Void main(void)
{
double a, b, h, h1, x, m;
int i;
cout<<"Vvedite a: ";
cin>>a;
cout<<"Vvedite b: ";
cin>>b;
cout<<"Vvedite h: ";
cin>>h;
cout<<"Vvedite m: ";
cin>>m;
h1=(b-a)/20; //shag
printf(" x f(x) f'(x) ~f'(x) df'(x)\n");
printf("------------------------------------\n");
for (i=1;i<=21;i++) {
x=a+(i-1)*h1;
printf("%3.2f %7.3f %7.3f %7.3f %7.3f\n",x,func(x),toch_dif_1(x),pribl_dif_1(func,x,a,b,h),toch_dif_1(x)-
pribl_dif_1(func,x,a,b,h));
}
cout<<endl;
printf(" x f''(x) ~f''(x) df''(x)\n");
printf("------------------------------------\n");
for (i=2;i<=20;i++) {
x=a+(i-1)*h1;
printf("%3.2f %8.3f %8.3f %8.3f\n",x,toch_dif_2(x),pribl_dif_2(func,x,a,b,h),toch_dif_2(x)-
pribl_dif_2(func,x,a,b,h));
}
printf("\n\n priblizitel'noe znachenie integrala function f(x):%.3f\n\n",pribl_integr(func,a,b,m));
}
Рисунок
3 – Результат выполнения программы при
и
![]()

Рисунок
4 – Результат выполнения программы при
и
![]()

Рисунок
5 – Результат выполнения программы при
и
![]()

Задание №5
«Методы решений нелинейных уравнений»
Отладить
программу определения всех корней
функции
в указанном интервале
,
использовать метод в соответствии с
полученным вариантом.
Заданная функция в указанном интервале имеет три корня.
Расчет
функции, а также метод нахождения корня
оформить в виде отдельных подпрограмм.
Выбрать точность
,
а значение
по
усмотрению.
После выполнения расчетов нарисовать график функции.
|
f(x) |
a |
b |
Метод |
|
|
1 |
8 |
MS |
Листинг программы:
#include <math.h>
#include <stdio.h>
#include <iostream.h>
double func(double); //vichislenie znacheniy funkcii
double met_sek(double (*f)(double), double, double, double);//vichislenie kornya
//metodom sekuschih
double func(double x)
{ return (log(x)-5.*cos(x));} //f(x)=ln(x)-5cos(x)
double met_sek(double (*f)(double), double alfa, double eps, double h)
{
double x1, x0, de;
x0=alfa;
do {
x1=x0-(f(x0)*h)/(f(x0)-f(x0-h));
de=fabs(x1-x0);
x0=x1;
} while (de>eps);
return x0;
}
Void main(void)
{
int i;
double a, b, x, h=0.01, eps=0.0001, alfa; //h-shag, eps-pogreshnost'
cout<<"Vvedite a: ";
cin>>a;
cout<<"Vvedite b: ";
cin>>b;
printf("\n x f(x)\n");
for (x=a;x<=b;x+=0.1)
printf("%3.2f %7.3f\n",x,func(x));
for (i=1;i<=3;i++) {
cout<<"Vvedite alfa: ";
cin>>alfa;
printf("\n%d-iy koren': %7.3f\n", i, met_sek(func,alfa,eps,h));
}
cout<<endl;
}
Рисунок 6 – Результат

Задание №6
«Методы нахождения минимума функции одной переменной»
Отладить программу определения минимума указанной в таблице 1 функции заданным методом. Сначала на экран выводится таблица значений функции и делается запрос на ввод начального приближения для вычисления требуемого локального минимума. Расчет функции, а также метод нахождения минимума оформить в виде отдельных подпрограмм. Выбрать m и ξ по усмотрению. Заданная функция на указанном интервале имеет три локальных минимума.
После
выполнения расчетов построить график
исследуемой функции и проанализировать
зависимость количества итераций от
(
),
для чего встроить в алгоритм счетчик
количества вычислений функции.
|
f(x) |
a |
b |
Метод |
|
|
2 |
11 |
MPP |
Листинг программы:
#include <math.h>
#include <stdio.h>
#include <iostream.h>
int count;
double func(double); //vichislenie znacheniy funkcii
double met_posl_perebora(double (*f)(double), double, double, double);//vichislenie minimuma funkcii
//metodom posledovat. perebora
double func(double x)
{ return (log(x)-5.*cos(x)*cos(x));} //f(x)=ln(x)-5cos(x)*cos(x)
double met_posl_perebora(double (*f)(double), double pribl, double eps, double h)
{
double x1, y1, y0;
x1=pribl;
y1=f(x1);
do {
do {
pribl=x1;
y0=y1;
x1=pribl+h;
y1=f(x1);
count+=1; //chislo iteraciy
} while (y1<=y0);
h=-h/4;
} while (fabs(h)>=(eps/4));
return f(pribl);
}
