Метод эйлера код программы

Всем привет! Очень прошу помочь.
Есть образец кода для решения задачи Коши методом Эйлера (язык Си), все работает. Значения, как и должно быть, получаются похожими:

/*n — число точек численного решения, x — независимая переменная, y — искомое решение, f — правая часть, а — начало интервала, b — конец интервала, h — шаг интегрирования*/ #include #include #define n 100 float f(float, float); float ya(float); int main (void) < float a, b, h, x, y[n]; int k; a=0; b=1; h=(b-a)/(n-1); y[0]=1; // начальное условие for (k=1; k// сравнение с аналитическим решением for (k=0; k getch(); > float f(float x, float y) // правая часть < return 2*(x*x+y); >float ya(float x) // аналитическое решение < return 1.5*exp(2*x)-x*x-x-0.5;

Но, подставляя свои значения y’=y/x-log(x)/x; y(a)=1; a=1; b=2; точное решение задачи: y(x)=log(x)+1), что-то идет не так, аналитическое и точное решения очень сильно разнятся (в 500 раз). И преподаватель говорит, что у меня интервал a=1 и b=2, а выдача начинается с 0:

Численное решение задачи Коши методом Эйлера

#include #include #define n 100 float f(float, float); float ya(float); int main (void) < float a, b, h, x, y[n]; int k; a=1; b=2; h=(b-a)/(n-1); y[0]=1; // начальное условие y[a]=1 for (k=1; k// сравнение с аналитическим решением for (k=0; k getch(); > float f(float x, float y) // правая часть < return y/x-log(x)/x; >float ya(float x) // аналитическое решение

Помогите, пожалуйста! Не могу понять в чем дело. Типы данных пробовал менять. Уравнение вроде верно записано с условий (задание прилагаю).

Читайте также:
Программа где можно музыку накладывать на музыку

Изображения

Снимок.PNG (9.8 Кб, 42 просмотров)

Источник: www.programmersforum.ru

Метод эйлера код программы

Программы на Pascal (Паскаль): метод Адамса 4-го порядка и метод Эйлера

Я писал о себе, что учусь на системного администратора и, соответственно, в универе нам часто задают программировать различные задачи. В основном пишу программы на языке Паскаль (Pascal) при помощи PascalABC. На данный момент у меня скопилось куча различных программ, которые нам задавали на лабах. Думаю, не пропадать же добру зря, поэтому решил некоторыми из них с вами поделиться.

Программы для решения задачи Коши на Pascal:

Метод Адамса-Башфорта 4-го порядка, задача на Паскале (Pascal)

Вот мой пример: F(x)=(1/(x+16.7)) +x+3, интервал от 1.5 до 5, шаг h=0.05 и начальные условия x[0]=1.5 и y[0]=1.4.

USES CRT; VAR a,b,h,k1,k2,k3,k4: real; i,k:integer; t:text; y: array [0..100] of real; x: array [0..100] of real; function f(x1:real):real; begin f:=(1/(x1+16.7))+x1+3; //F(x)=1/(x+16.7) + x + 3 end; BEGIN clrscr; assign(t,’1.txt’); //результат будет записываться в 1.txt h:=0.05; //шаг x[0]:=1.5; //начало интервала и нач. условие х b:=5; //конец интервала y[0]:=1.4; //нач. условие y rewrite(t); for k:=0 to 3 do begin k1:=h*f(x[k]); k2:=h*f(x[k]+h/2); k3:=h*f(x[k]+h/2); k4:=h*f(x[k]+h); y[k+1]:=y[k]+(k1+2*k2+2*k3+k4)/6; // метод Рунге-Кутта x[k+1]:=x[k]+h; writeln(x[k]:4:2,’ ‘,y[k]:4:4); writeln(t,x[k]:4:1,’ ‘,y[k]:4:4); end; for k:=4 to 100 do begin if (x[k]>=(b+h/2)) then break; y[k+1]:=y[k]+(h/24)*(55*f(x[k])-59*f(x[k-1])+37*f(x[k-2])-9*f(x[k-3])); writeln(x[k]:4:2,’ ‘,y[k]:4:4); writeln(t,x[k]:4:1,’ ‘,y[k]:4:4); x[k+1]:=x[k]+h; end; close(t); END.

Метод Эйлера, задача на Паскале (Pascal)

USES CRT; VAR a,b,h: real; i,j:integer; t:text; y: array [0..100] of real; x: array [0..100] of real; function f(x1:real):real; begin f:=(1/(x1+16.7))+x1+3; end; BEGIN clrscr; assign(t,’2.txt’); //результат будет записываться в 2.txt h:=0.05; x[0]:=1.5; b:=5; y[0]:=1.4; i:=0; rewrite(t); while (x[i]<(b+h/2)) do begin y[i+1]:=y[i]+h*f(x[i]); writeln(y[i]:5:5,’ pri x=’,x[i]); writeln(t,x[i]:4:1,’ ‘,y[i]:4:4); i:=i+1; x[i]:=x[i-1]+h; end; close(t); readkey; END.

Количество точек зависит от того, какой вы укажете шаг h : чем он меньше, тем больше точек.

Читайте также:
Основные профессиональные программы обучения по профессиям

Метод Эйлера

Полученный результат я сохранял в txt-файл, чтобы потом построить графики в Маткаде (MathCAD) для проверки: если графики совпадают — все верно. Я проверял — у меня совпадают.

Мой паблик в Вконтакте 🙂

Источник: myblogy.ru

2.1.5. Примеры работы программы

В результате выполнения программы с разным числом разбиений средняя сумма и значение метода трапеций совпадают. Метод Симпсона является наиболее точным при меньшем числе разбиений.

3.1. Вычисление Дифференциального уравнения методом Эйлера

Используя метод Эйлера, вычислить таблицу из (n+1) приближенных значений решения дифференциального уравнения вида, удовлетворяющего начальному условиюна отрезке [0,1] для различных чисел разбиения отрезка интегрирования (10, 20, . 500).

Метод Эйлера является самым простым и наименее точным. Он применяется для ориентировочных расчетов. Приращение в этом методе определяется по формуле

,

т.е. функция y на аппроксимируется линейной функцией с угловым коэффициентом. Из формул (26) и (27) следует формула Эйлера

.

3.1.1. Блок-схема алгоритма

Введите число разбиений

Источник: studfile.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru