Смекни!
smekni.com

Метод Стрілянини (стр. 2 из 2)

у(а)=А і у'(а)=а

і намагаючись знайти розв'язок, який задовольняє умову у(в)=В,

При цьому алгоритм досягнення мети будується на основі одного з методів оптимізації. Однак цей шлях розв'язання задачі пов'язаний з великими обчислювальними труднощами, і тому у випадку нелінійних |диференціальних рівнянь перевага надається різницевим методам.


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.