у(а)=А і у'(а)=а
і намагаючись знайти розв'язок, який задовольняє умову у(в)=В,
При цьому алгоритм досягнення мети будується на основі одного з методів оптимізації. Однак цей шлях розв'язання задачі пов'язаний з великими обчислювальними труднощами, і тому у випадку нелінійних |диференціальних рівнянь перевага надається різницевим методам.
3.Вибір методу інструментальних засобів вирішення задач.
Розв’язок даної задачі реалізовано на ЕОМ, причому було складено алгоритм та програму в середовищі BorlandDelphi 7. Програма є досить простою та зрозумілою для користувача середнього рівня
Для нормального функціонування програми необхідна наявність наступних апаратних засобів :
1. IBMPC/XT сумісний комп'ютер;
2. CPU не нижче Intel P-100;
Операційна система MS-Windows 95 та вище;
3. 8 Mb ОЗУ;
4. Монітор, що підтримує режим 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
Висновки
При виконані даної курсової роботи я навчився розв’язувати крайові задачі за допомогою методу стрілянини. Було відмічено, що метод досить важко приміняти до комп’ютерних обчислень через необхідність врахування специфіки кожної задачі.
Література
1. В.Т.Маликов, Р.Н.Кветный . Вычислительные методы и применение ЭВМ . Учебное пособие -- К.: Выща шк. Головное издательство,1989.-213 с .
2. В.Е.Краскевич, К.Х.Зеленский, В.И.Гречко . Численные методы в инженерных исследованиях. -- К.: Выща шк. Головное издательство, 1986.--263 с .
3. Самарський А.А. Вступ в чисельні методи. - М.: Наука,
1987. – 286 с.
Додаток A
Алгоритм роботи програми
Додаток Б
Лістинг програми
unitUnit1;
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.