МІНІСТЕРСТВООСВІТИ І НАУКИ УКРАЇНИ
СУМСЬКИЙДЕРЖАВНИЙ УНІВЕРСИТЕТКафедраінформатикиКУРСОВА РОБОТА
Зпрограмування
Натему:
“Розв’язання задачі Коші для звичайногодиференціального рівняння першого порядку методом Ейлера”
Суми– 2006 р.
План
1. Постановказадачі
2. Визначення.Загальні відомості про задачу Коші для звичайних диференціальних рівняньпершого порядку
3. Розв’язання задачі Коші для звичайнихдиференціальних рівнянь першого порядку методом Ейлера
а) похибка при вирішенні задачі Кошідля звичайних диференціальних рівнянь першого порядку методом Ейлера. Алгоритмрозв’язання диференціальногорівняння першого порядку методом Ейлера
4. Блок –схема
5. Реалізаціяалгоритму у середовищі Borland Pascal
6. Результатроботи програми
7. Умовніпозначення
8. Списоквикористаних джерел
Постановказадачі
ПОСТАНОВКАЗАДАЧІ ТА МЕТОД ВИРІШЕННЯ
Вирішитидиференціальне рівняння чисельним методом ( у/=f(x,y)) це означає для заданої послідовності аргументів х0, х1…, хnі числа у0, не визначаючи функцію у=F(x), знайти такі значення у1, у2,…, уn,що уi=F(xi)(i=1,2,…,n) і F(x0)=y0.
Такимчином численні методи дозволяють замість знаходження функції У=F(x) отримати таблицю значень цієї функціїдля заданої послідовності аргументів… Величина h=xk-xk-1 називаеться кроком інтегрування.
МетодЕйлера відноситься до численних методів, що дають відповідь у вигляді таблиці наближенихзначень шуканої функціїу(х).він є порівняно грубимта використовуеться в основному для приблизних розрахунків.
Визначення.Загальні відомості про задачу Коші для звичайних диференціальних рівняньпершого порядку
Звичайнимдиференціальним рівнянням називається рівняння виду :
/>
де порядокстаршої похідної к називається порядком звичайного диференціального рівняння.Звичайне диференціальне рівняння має безліч розв’язків. Для знаходження хоча бодного розв’язку потрібні додаткові умови. Ці умови можуть бути двох типів –задача Коші та Краєва задача. Згідно теми курсової роботи розглянемо лишеперший тип умови, тобто задачу Коші. При розв’язанні задачі Коші додаткові умови задаються при одномузначенні незалежної змінної. Наприклад, при х = а задані значення функції /> і можливі деякіпохідні шуканої функції /> і так далі…… Існують декількаметодів розв’ язання задачі Коші:
1. Апроксимаціярядом Тейлора
2. МетодиРунне – Кутта
3. Методипрогнозу та корекції
Нульовимнаближенням всіх вище перерахованих методів вирішення задачі Коші є методЕйлера.
Розв’язання задачі Коші для звичайнихдиференціальних рівнянь першого порядку методом Ейлера
Розглянемонайпростіший метод вирішення задачі Коші. Проілюструємо його на прикладізвичайного диференціального рівняння першого порядку.
/> ПУ * />
Підстановка ПУ впочаткове ЗДР* дає значення похідної />функції /> в початковій точці. Розв’язок в наступній точці/>записується у вигляді:
/>.
При цьомудопускається похибка: />. Далі використовується точка, якуможна вважати початковою /> і за допомогою її визначаєтьсянаступна точка /> і так далі.
Отже узагальненаформула методу Ейлера набуває вигляду:
/>
Похибка, щодопускається на кожному кроці: />. Сума всіх похибок приобчисленні на кожному з кроків вирішення дає нам загальну похибку />. Метод Ейлерає аналогом методу прямокутників для чисельного інтегрування. Якщо права частинапочаткового ДР* не залежить від у, то значення шуканої функції в точці />визначаєтьсяінтегралом /> ітоді загальна формула методу Ейлера являє собою формулу лівих прямокутників.Але, на відміну від інтегрування, де похибки просто сумувалися, при вирішенніДР похибка на попередньому кроці веде до ще більшої похибки на наступномукроці, і як правило сумарна похибка зростає експоненціально з кількістюпройдених вже кроків. />. Тож використовуємо модифікованийметод Ейлера як найбільш точний.
Похибка привирішенні задачі Коші для звичайних диференціальних рівнянь першого порядкуметодом Ейлера
Для ЗДР першогопорядку /> щомає ПУ /> загальнаформула методу Ейлера має вигляд /> . Якщо позначити дійсне вирішеннязадачі Коші як />, то похибка Е в вузлі /> може бутипредставлена у вигляді
/>.
Кали мивизначаємо приріст функції
/>
та вводимо умовніпозначення
/>,
то можливооцінити /> зверху:
/>.
Якщо припустити,що початкова похибка рівна нулю, то випливає висновок:
/>.
Тепер, якщозамінити /> уграниці />,отримаємо:
/>.
З останньогоспіввідношення видно, що при /> похибка Е зростає експоненціальноз координатою (при/>отримуємо /> ).
/>
Мал. 1
На мал.1приведені підрахунки для рівняння /> (вирішення — />). Єдиний спосіб оцінитимасштаби похибки, що наросла – провести декілька пробних підрахунків з різнимикроками по х.
Алгоритмрозв’язання диференціального рівняння першого порядку методом Ейлера
Нижче поданийалгоритм чисельно інтегрує звичайне диференціальне рівняння першого, другого татретього порядку з використанням модифікованого прямого методу Ейлера
При чисельномуінтегруванні диференціального рівняння першого порядку y' = F(x,y)
З початковоюумовою y(x0 ) = y0 (задачаКоші) спочатку вибираємо
порядок похідної– у нашому випадку згідно з варіантом курсової – порядок 1 (диференціальнерівняння першого порядку). Далі визначаємо коефіцієнти та коефіцієнт при х.Вводимо границі відрізку. Фіксований приріст аргументу h = (xf -x0 )/n, де xf — кінцева точка інтервалу інтегрування, n – кількість кроків. Потім,використовуючи процедуру модифікованого методу Ейлера,, обчислюємо yk згідно з рекурсивною формулою:
yk = yk-1 +h[Fk-1 +F(xk,yk-1 +hFk-1 )]/2
де Fk = F(xk, yk ). Можна використовувати іншурекурсивну формулу:
yk = yk-1 +F(xk-1 +h/2,yk-1 +Fk-1 h/2)
Після визначеннякроку, вводимо значення початкової умови. Отримуємо таблицю відповідей.
/>Блок- схема
Реалізаціяалгоритму у середовищі BorlandPascal
uses wincrt;
var
yx,xy,l,v,p,ff,ay,by,x:array[0..10] of real;
y,a,b:array[0..10,0..1]of real;
i,n,o:integer;
c,d,h,k:real;
label
lap1;
begin
clrscr;
writeln('введитенаивысший порядок производной (в нашем случае — 1)');
readln(n);
if n=0 then begin
writeln('этопрямолинейная зависимость и решается без метода Эйлера');
goto lap1;end;
writeln('введите коэффициенты {a0,a1}');
for i:=0 to n do
readln(l[i]);
if (n=1) and (l[1]=0)or (n=2) and (l[2]=0) or (n=3) and (l[3]=0) then begin
writeln('деление наноль');
goto lap1;
end;
writeln('введитекоэффициент при x');
readln(k);
writeln('введитеотрезок ');
readln(c,d);
o:=5;
h:=abs(d-c)/o;
writeln('шаг=',h:1:1);
writeln('задайтеначальные условия y(x)= ');
for i:=0 to n-1 do
readln(v[i]);
if n=3 then begin
yx[0]:=v[0];
ay[0]:=v[1];
by[0]:=v[2];
p[0]:=(k*c-l[0]*v[0]-l[1]*v[1]-l[2]*v[2])/l[3];
x[0]:=c;
gotoxy(32,1);
write(' ');
gotoxy(32,2);
write(' x y a b ');
gotoxy(32,3);
write(' ',c:7:7,'',yx[0]:7:7,' ',ay[0]:7:7,' ',by[0]:7:7,' ');
for i:=0 to o-1 dobegin
x[i]:=x[i]+h/2;
y[i,1]:=yx[i]+(h/2)*ay[i];
a[i,1]:=ay[i]+(h/2)*by[i];
b[i,1]:=by[i]+(h/2)*p[i];
ff[i]:=(k*x[i]-l[0]*y[i,1]-l[1]*a[i,1]-l[2]*b[i,1])/l[3];
xy[i]:=x[i]+h/2;
yx[i+1]:=yx[i]+h*a[i,1];
ay[i+1]:=ay[i]+h*b[i,1];
by[i+1]:=by[i]+h*ff[i];
x[i+1]:=x[i]+h/2;
p[i+1]:=(k*xy[i]-l[0]*yx[i+1]-l[1]*ay[i+1]-l[2]*by[i+1])/l[3];
end;
for i:=0 to o-1 dobegin
gotoxy(32,4+i);
write(' ',xy[i]:7:7,'',yx[i+1]:7:7,' ',ay[i+1]:7:7,' ',by[i+1]:7:7,' ');
end;
gotoxy(32,4+o);
write(' ');
end;
if n=2 then begin
x[0]:=c;
yx[0]:=v[0];
ay[0]:=v[1];
p[0]:=(k*c-l[0]*yx[0]-l[1]*v[1])/l[2];
gotoxy(32,1);
write(' ');
gotoxy(32,2);
write(' x y a ');
gotoxy(32,3);
write(' ',c:7:7,'',yx[0]:7:7,' ',ay[0]:7:7,' ');
for i:=0 to o-1 dobegin
x[i]:=x[i]+h/2;
y[i,1]:=yx[i]+(h/2)*ay[i];
a[i,1]:=ay[i]+(h/2)*p[i];
ff[i]:=(k*x[i]-l[0]*y[i,1]-l[1]*a[i,1])/l[2];
xy[i]:=x[i]+h/2;
yx[i+1]:=yx[i]+h*a[i,1];
ay[i+1]:=ay[i]+h*ff[i];
x[i+1]:=x[i]+h/2;
p[i+1]:=(k*xy[i]-l[0]*yx[i+1]-l[1]*ay[i+1])/l[2];
end;
for i:=0 to o-1 dobegin
gotoxy(32,4+i);
write(' ',xy[i]:7:7,'',yx[i+1]:7:7,' ',ay[I+1]:7:7,' ');
end;
gotoxy(32,4+o);
write(' ');
end;
if n=1 then begin
x[0]:=c;
yx[0]:=v[0];
p[0]:=(k*x[0]-l[0]*yx[0])/l[1];
for i:=0 to o-1 dobegin
x[i]:=x[i]+h/2;
y[i,1]:=yx[i]+(h/2)*p[i];
xy[i]:=x[i]+h/2;
ff[i]:=(k*x[i]-l[0]*y[i,1])/l[1];
yx[i+1]:=yx[i]+h*ff[i];
x[i+1]:=x[i]+h/2;
p[i+1]:=(k*xy[i]-l[0]*yx[i+1])/l[1];
end;
gotoxy(32,1);
write(' ');
gotoxy(32,2);
write(' x____________y ');
write('___________________');
gotoxy(32,3);
write(' ',c:7:7,'',yx[0]:7:7,' ');
for i:=0 to o-1 dobegin
gotoxy(32,4+i);
write(' ',xy[i]:7:7,'',yx[i+1]:7:7,' ');
end;
gotoxy(32,o+4);
write(' ');
end;
lap1:readln;
clrscr;
end.
Результат роботипрограми
/>
У випадку, колипорядок похідної = 0:
/>
Умовніпозначення
1. ПУ * — початкова умова
2. ЗДР* –звичайне диференціальне рівняння
3. ДР* — диференціальне рівняння
Списоквикористаних джерел:
Щодо реалізаціїалгоритму у середовищі Borland Pascal:
· БоровикВ.О., Тиркусова Н.В. програмування: Навч. посібник.-Суми: Вид-воСумДУ, 2004.-Частина 1.-107с. – Рос. Мовою
· БоровикВ.О., Тиркусова Н.В. програмування: Навч. посібник.-Суми: Вид-воСумДУ, 2004.-Частина 2.-107с. – Рос. Мовою
· http://www.forum.pascla.net
· http://pascalclub.ru
Щодоматематичного обґрунтування методa:
· Диференціальнірівняння: Навчю посібник А.М.Самійленко, С.А. Кривошия, М.О. Перестук. – К.: Либідь, 2003-504 с.
· http://www.alglib.sources.ru
· http://www.alglib.ru
· http://www.users.kpi.kharkov.ua