Скачиваний:
11
Добавлен:
01.04.2014
Размер:
2.33 Mб
Скачать

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);

}