Метод "Стрілянини"
Вступ
На даний момент велика роль в розвитку сучасного світу відводиться підвищенню технічного рівня обчислювальної техніки, пристроїв і засобів автоматизації. Це передбачає розвиток виробництва і широке використання промислових роботів, систем автоматичного управління з використанням мікропроцессорів і мікро-ЕОМ, створення гнучких автоматизованих виробництв. Розв'язок цих задач потребує широкого упровадження в інженерну практику методів обчислювальної математики.
Обчислювальна математика заснована на чисельних методах, придатних до застосування при розрахунках на ЕОМ. Сучасні ЕОМ дозволили дослідникам значно підвищити ефективність математичного моделювання складних задач науки і техніки. Нині методи досліднення проникають практично в усі сфери людської діяльності, а математичні моделі стають засобами пізнання.
Значення математичних моделей неперервно зростає у зв'язку з тенденціями до оптимізації технічних пристроїв і технологічних схем планування експерименту. Реалізація моделей на ЕОМ здійснюється за допомогою різноманітних методів обчислювальної математики, яка неперервно удосконалюєтьтся.
В даній роботі розглянуто розв’язання крайової задачі методом “стрілянини” (на прикладі диференційного рівняння другого порядку).
2. Теоретичні відомості
Диференційним рівнянням називають рівняння, що зв'язує незалежну змінну х , шукану функцію y=f(x) та її похідні y', y'',…, y(n).
В залежності від числа незалежних змінних та типу похідних, що входять до них диференційні рівняння діляться на звичайні диференційні рівняння, що мають одну незалежну змінну та похідні по ній, та рівняння в частинних похідних, маючих декілька незалежних змінних та похідні (частинні) по ним.
Існує багато методів для знаходження розв’язків диференційних рівнянь через елементарні чи спеціальні функції. Такі методи називають аналітичними, чи класичними, але в більшості задач вони чи зовсім непридатні, чи приводять до дуже складних розрахунків. При заданні коефіціентів чи функцій в диференційних рівняннях у вигляді таблиць експерементальних даних використання класичних методів принципово неможливо. Це обумовлює важливість чисельних методів, що розглядають рішення диференційних рівнянь, це є основою при складанні алгоритмів та програм для ЕОМ.
Звичайне диференційне рівняння має нескінчену множину розв’язків. Для відшукання якогось конкретного розв’язку потрібні додаткові умови. Ці умови можуть бути різними. У випадку, коли додаткові умови задаються при одному значенні незалежної змінної, має місце задача Коші (задача з початковими умовами). Якщо ж умови задаються при двох чи більше значеннях незалежної змінної, то задача називається крайовою. В задачі Коші додаткові умови називаються початковими, а в крайовій – граничними. При рішенні цих задач використовуються різні методи та алгоритми.
Сформулюємо задачу Коші. Нехай дано диференційне рівняння: та початкова умова . Потрібно знайти функцію на відрізку від до , таку, що задовольняє як дане рівняння, так і початкову умову.
Крайову задачу розглянемо на прикладі звичайного диференційного рівняння другого порядку при граничних умовах . Методи розв’язків рівнянь більш високих порядків аналогічні.
2.1 Методи розв’язку задачі Коші.
В основі чисельних методів розв’язку диференційних рівнянь лежить розклад функції в ряд Тейлора в околі вихідної точки : , де - відстань (крок) між вихідною точкою та точкою , в якій шукають розв’язок.
Причому в різних методах враховується різна кількість членів розкладу, що визначає точність розрахунків. Вважають, що порядок похобки рівний , якщо існує таке число , та , де - локальна помилка; - крок дискретизації.
Число не залежить від номера кроку та його велечини, а визначається похідними і довжиною інтервала. При апроксимації розв’язку рядами Тейлора воно зв’язане зі степінню членів ряду, що відкидаються.
Методи розв’язку задачі Коші можна розділити на дві групи: однокрокові, в яких для знаходження слідуючої точки на кривій потрібна інформація лише про один попередній крок (методи Ейлера та Рунге-Кутта); багатокрокові (прогнозу та корекції), в яких для знаходження слідуючої точки на кривій потрібна інформація більш ніж про одну із попередніх точок.
2.2 Вибір методу розв'язання задачі Коші
Порівнюючи ефективність однокрокових і багатокрокових методів, виділяють такі особливості:
Багатокрокові методи вимагають більшого об'єму пам'яті ЕОМ, тому що оперують більшою кількістю початкових даних.
При використанні
багатокрокових методів існує можливість
оцінки
похибки на кроці, тому значення кроку
обирається оптимальним, а
в
однокрокових — з деяким запасом , що
знижує швидкодію.
3. При однаковій точності багато крокові методи вимагають меншого обсягу обчислень. Наприклад, в методі Рунге-Кутта четвертого порядку точності доводиться обчислювати чотири значення функції на кожному кроці, а для забезпечення збіжності методу прогнозу і корекції того ж порядку точності - достатньо двох.
4. Однокрокові методи на відміну від багатокрокових дозволяють одразу почати розв'язання задачі ("самостартування") і легко змінювати крок в процесі обчислень.
Перед початком розв'язання задачі необхідно провести перевірку на "жорсткість" і у випадку позитивного результату використати спеціальні методи. Якщо задача Коші дуже складна, то зазвичай перевага надається методу прогнозу і корекції, який має до того ж більш високу швидкодію. Початок розв'язання задачі при цьому проводиться за допомогою однокрокових методів. Якщо для обчислення чергового значення уі вимагається більш ніж дві ітерації або якщо помилка зрізання дуже велика, то необхідно зменшити крок Н. З іншого боку при дуже малій похибці зрізання можна збільшити крок, тим самим підвищити швидкодію, але при цьому весь процес розв'язання треба починати спочатку. Інколи на практиці вимагається мінімізувати час підготовки задачі до розв'язання. Тоді доцільно використовувати методи Рунге-Кутта.
На закінчення слід відзначити, що велике значення для ефективного розв'язання задачі мають досвід, інтуїція і кваліфікація користувача як при постановці задачі, так і в процесі вибру методу розробки алгоритму і програми для ЕОМ. При цьому часто зручно користуватись вже готовими програмними засобами, які є в наявності (наприклад, в пакетах МАРLЕ, МАТНЕМАТIКА).
2.3Методи розв'язання крайових задач
Методи розв'язання крайових задач розглядаються на прикладі звичайного диференціального рівняння другого порядку
при граничних умовах у(а) = А , у(в) - В. Методи розв'язання крайових задач розділяють на дві групи: методи, що побудовані на заміні розв'язання крайової задачі розв'язанням декількох задач Коші (методи "стрілянини") та різницеві методи.
2.4 Метод "стрілянини"
Якщо звичайне диференціальне рівняння другого порядку - лінійне, то воно має вигляд:
при у(а) = А , у(в) = В.
Крайову задачу можна звести до задачі Коші введенням додаткової початкової умови, крім у(а)=А вводиться у'(а)=.
Знайшовши розв'язок (х), можна поставити іншу початкову умову у(а)= і отримати інший розв'язок у2 (х). Якщо а , причому , то розв'язок:
буде задовольняти обидві початкові умови.
При розв'язуванні
нелінійного звичайного диференціального
рівняння
методами "стрілянини" крайова
задача зводиться до
розв'язування
декількох задач Коші, послідовно вводячи
в початкові і
умови
значення
:
у(а)=А і у'(а)=а
і намагаючись знайти розв'язок, який задовольняє умову у(в)=В,
При цьому алгоритм досягнення мети будується на основі одного з методів оптимізації. Однак цей шлях розв'язання задачі пов'язаний з великими обчислювальними труднощами, і тому у випадку нелінійних |диференціальних рівнянь перевага надається різницевим методам.
3.Вибір методу інструментальних засобів вирішення задач.
Розв’язок даної задачі реалізовано на ЕОМ, причому було складено алгоритм та програму в середовищі Borland Delphi 7. Програма є досить простою та зрозумілою для користувача середнього рівня
Для нормального функціонування програми необхідна наявність наступних апаратних засобів :
IBM PC/XT сумісний комп'ютер;
CPU не нижче Intel P-100;
Операційна система MS-Windows 95 та вище;
8 Mb ОЗУ;
Монітор, що підтримує режим 640x480, 16 кольорів;
4. Функціональне призначення
Розроблена програма дозволяє розв’язати вказану крайову задачу:
,
методом стрілянини з кроками 0,1 і 0,05.
Результати виводяться у текстовій формі.
5. Розробка та опис логічної частини програми
В даній курсовій роботі було розроблено програмне забезпечення для розв’язання та дослідження заданого диференційного рівняння. Розв’язок ведеться за різницевим алгоритмом.
Кодування на мові Паскаль проводилося з застосуванням інтуїтивно-зрозумілих назв змінних та процедур. Також відступи та табуляція дозволяє досить легко збагнути структуру програми.
В інтерфейсі також не допущено зайвих елементів.
6. Керівництво оператору
Для завантаження програми необхідно запустити програмний файл Project1.exe. При цьому зявиться вікно (рис. 1), де можна задати початкові умови, переглянути постановку задачі а також ознайомитися з розв’язком при натисненні кнопки Розв’язок.
Рисунок 1. Інтерфейс програми.
7. Результати обчислень
Результати обчислень:
Крок: 0,1000000000
X | Y
-----------
0,000|1,0000000000
0,100|0,3273336200
0,200|0,1072995400
0,300|0,0356159580
0,400|0,0131109860
0,500|0,0085276729
0,600|0,0151296980
0,700|0,0408859800
0,800|0,1180330500
0,900|0,3434084400
1,000|1,0000000000
Похибка не б_льше: 0,0050000000
Результати обчислень:
Крок: 0,0500000000
X | Y
-----------
0,000|1,0000000000
0,050|0,5993159300
0,100|0,3592222800
0,150|0,2153842700
0,200|0,1292593800
0,250|0,0777695550
0,300|0,0471172200
0,350|0,0290879730
0,400|0,0188492490
0,450|0,0136550000
0,500|0,0121092040
0,550|0,0137906880
0,600|0,0191384160
0,650|0,0295660470
0,700|0,0478356090
0,750|0,0787890890
0,800|0,1306317000
0,850|0,2171069500
0,900|0,3611400200
0,950|0,6009154100
1,000|1,0000000000
Похибка не більше: 0,0012500000
Висновки
При виконані даної курсової роботи я навчився розв’язувати крайові задачі за допомогою методу стрілянини. Було відмічено, що метод досить важко приміняти до комп’ютерних обчислень через необхідність врахування специфіки кожної задачі.
Література
В.Т.Маликов, Р.Н.Кветный . Вычислительные методы и применение ЭВМ . Учебное пособие -- К.: Выща шк. Головное издательство,1989.-213 с .
В.Е.Краскевич, К.Х.Зеленский, В.И.Гречко . Численные методы в инженерных исследованиях. -- К.: Выща шк. Головное издательство, 1986.--263 с .
Самарський А.А. Вступ в чисельні методи. - М.: Наука,
1987. – 286 с.
Додаток A
Алгоритм роботи програми
Додаток Б
Лістинг програми
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Buttons, Math;
type
TForm1 = class(TForm)
GroupBox2: TGroupBox;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
Memo1: TMemo;
LabeledEdit1: TLabeledEdit;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Form2.ShowModal;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
var
i, j, n :integer;
h:Extended;
ybeg, yend, t: Extended;
alpha1, alpha2, beta1, beta2 : extended;
b:array of Extended;
a:array of array of Extended;
y,y1,y2:array of Extended;
x:array of Extended;
M0,M1,M2,err:Extended;
k,k0,k1,k2,k3,l,l0,l1,l2,l3,zn,xn:extended;
function f(x,y,dy:extended):extended;
begin
result:=100*y;
end;
begin
try
h:=StrToFloat(LabeledEdit1.Text);
n:=round(1/h)+1;
ybeg:=1; yend:=1;
SetLength(y,n);
SetLength(y1,n);
SetLength(y2,n);
y1[0]:=ybeg;
y2[0]:=ybeg;
alpha1:=yend;
alpha2:=yend;
zn:=alpha1; xn:=0;
for i:=1 to n-1 do begin
l0:=h*f(xn,y1[i-1],zn);
k0:=h*zn;
l1:=h*f(xn+h/2,y1[i-1]+k0/2,zn+l0/2);
k1:=h*(zn+l1/2);
l2:=h*f(xn+h/2,y1[i-1]+k1/2,zn+l1/2);
k2:=h*(zn+l2/2);
l3:=h*f(xn+h,y1[i-1]+k2,zn+l2);
k3:=h*(zn+l3);
k:=(k0+2*k1+2*k2+k3)/6;
l:=(l0+2*l1+2*l2+l3)/6;
y1[i]:=y1[i-1]+k;
zn:=zn+l;
xn:=xn+h;
end;
beta1:=y1[n-1]; beta2:=beta1;
while (beta1=beta2) do begin
alpha2:=alpha2-h;
zn:=alpha2; xn:=0;
for i:=1 to n-1 do begin
l0:=h*f(xn,y2[i-1],zn);
k0:=h*zn;
l1:=h*f(xn+h/2,y2[i-1]+k0/2,zn+l0/2);
k1:=h*(zn+l1/2);
l2:=h*f(xn+h/2,y2[i-1]+k1/2,zn+l1/2);
k2:=h*(zn+l2/2);
l3:=h*f(xn+h,y2[i-1]+k2,zn+l2);
k3:=h*(zn+l3);
k:=(k0+2*k1+2*k2+k3)/6;
l:=(l0+2*l1+2*l2+l3)/6;
y2[i]:=y2[i-1]+k;
zn:=zn+l;
xn:=xn+h;
end;
beta2:=y2[n-1];
end;
for i:=0 to n-1 do
y[i]:=1/(beta1-beta2)*((1-beta2)*y1[i]+(beta1-1)*y2[i]);
with Memo1.Lines do begin
clear;
Add('Результати обчислень: ');
Add(' Крок: '+FloatToStrF(h,ffFixed,8,10));
Add(' X | Y ');
Add(' ----------- ');
for i:=0 to n-1 do
Add(' '+FloatToStrF(h*i,ffFixed,3,3)+'|'+FloatToStrF(abs(y[i]),ffFixed,8,10));
Add(' Похибка не б_льше: '+FloatToStrF(h*h/2,ffFixed,8,10));
end;
except
on EConvertError do
Application.MessageBox('Неправильно введен_ дан_', 'Увага');
end;
end;
end.
5