Смекни!
smekni.com

Решение прикладных задач методом дихотомии (стр. 2 из 2)

На n-ом шаге имеем точку (xn-1,yn-1), задающую начальное условие для уравнения:

y(xn-1)=yn-1

Уравнение определяет угловой коэффициент касательной к интегральной кривой в этой точке

Соответствующее уравнение касательной:y-yn-1=k(x-xn-1)

Отсюда получаем значение х=хn, соответствующее точке: хnn-1+h,

А именно: yn-yn-1=kn-1(xn-1+h-xn-1), или

yn=yn-1+h·kn-1

yn=yn-1+h·f(xn-1,yn-1)

Полученная формула является основной расчетной формулой метода Эйлера.

Процесс вычислений заканчивается, когда аргумент после очередного приращения выйдет за пределы исследуемого отрезка

.

2. Дифференциальное уравнение:

x0 = 0 , y0 = 1, xmax=1, Δx = 0.01; 0.005; 0.001

3. Схема алгоритма:


5. Таблица идентификаторов:

Обозначение Идентификатор Тип
s s int
i i int
x x double
xmax x_max double
x1 x1 double
Δx
h[i] double
y y double
d d double
f(x) f(x) double
k k(x,y) double

6. Листинг программы:

#include<stdio.h>

#include<math.h>

double k(double x,double y )

{

return ((x/exp(x*x))-2.*x*y);

}

double f(double x)

{

return ((1./exp(x*x))*(1+x*x/2.));

}

int main(void)

{

int s,i;

double x,x1,x_max=1,y,d;

double h[3]={0.01,0.005,0.001};

FILE*file;

file=fopen("result.txt","w+");

for (i=0;i<=2;i++)

{ s=0;y=1;

fprintf(file,"h(%i)=%lf&bsol;n",i,h[i]);

for(x=0;x<=x_max;x+=h[i])

{

s++;

x1=x+h[i];

y=y+k(x,y)*h[i];

d=y-f(x1);// y- pribl. f(x)- tochnoe

printf(" step =%4.i x=%6.4lf y=%6.4lf yt=%6.4lf d=%10.8lf&bsol;n",s,x1,y,f(x1),d);

fprintf(file," step =%4.i x=%10.8lf y=%10.8lf yt=%10.8lf d=%10.8lf&bsol;n",s,x1,y,f(x1),d);

}

}

fclose(file);

return 0;



Вывод: Интегрированная среда Visual С позволяет обрабатывать программы ,записанные на языке С++ .Для программирования циклических алгоритмов были использованы операторы организации циклов с параметрами, решение использует форматируемый вывод и оператор присваивания, а также использовались операторы вызова функций. Чем больше шаг, тем точнее вычисления.