На n-ом шаге имеем точку (xn-1,yn-1), задающую начальное условие для уравнения:
y(xn-1)=yn-1
Уравнение определяет угловой коэффициент касательной к интегральной кривой в этой точке
Соответствующее уравнение касательной:y-yn-1=k(x-xn-1)
Отсюда получаем значение х=хn, соответствующее точке: хn=хn-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.0013. Схема алгоритма:
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\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\n",s,x1,y,f(x1),d);
fprintf(file," step =%4.i x=%10.8lf y=%10.8lf yt=%10.8lf d=%10.8lf\n",s,x1,y,f(x1),d);
}
}
fclose(file);
return 0;
Вывод: Интегрированная среда Visual С позволяет обрабатывать программы ,записанные на языке С++ .Для программирования циклических алгоритмов были использованы операторы организации циклов с параметрами, решение использует форматируемый вывод и оператор присваивания, а также использовались операторы вызова функций. Чем больше шаг, тем точнее вычисления.