Розробка та опис логічної частини програми



 

В даній курсовій роботі було розроблено програмне забезпечення для розв’язання та дослідження заданого диференційного рівняння. Розвязок ведеться за різницевим алгоритмом. Кодування на мові Паскаль проводилося з застосуванням інтуїтивно-зрозумілих назв змінних та процедур. Також відступи та табуляція дозволяє досить легко збагнути структуру програми.

В інтерфейсі також не допущено зайвих елементів.

 

Керівництво оператору

 

Для завантаження програми необхідно запустити програмний файл Project1.exe. При цьому зявиться вікно (рис. 1), де можна задати початкові умови, переглянути постановку задачі а також ознайомитися з розв’язком при натисненні кнопки Розвязок.

 

Рисунок 1. Інтерфейс програми.

 

Результати обчислень

 

Результати обчислень:

Метод Гауса: 0,9962219100

Похибка: 0,0004163754

Метод Чебишева: 0,9961046200

Похибка: 0,0111120270

Точне розвязання (Mathcad): 1,1367262

Висновки

 

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


Література

 

1. Самарський А.А. Вступ в чисельні методи. - М.: Наука,

1987. – 286 с.

2.Квєтний Р.Н., Маліков В.Т. Обчислювльні методи та використання ЕОМ. Вища школа, 1989 – 55 с., 104 с.


Додаток 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);

const

c = 1.5;

d = 2.0;

n = 3;

tc:array[1..3] of extended = (-0.707107, 0, 0.707107);

tg:array[1..3] of extended = (-0.77459667, 0, 0.77459667);

Ag:array[1..3] of extended = (5/9, 8/9, 5/9);

 

function f(x:extended):extended;

begin

result := c*x/2+1/cos(d*x);

end;

 

function f_4(x:extended):extended;

begin

result := power(d,4)*

(24-20*power(cos(d*x),2)+

power(cos(d*x),4))/

power(cos(d*x),5);

end;

 

function f_6(x:extended):extended;

begin

 result := -power(d,6)*

(-720-840*power(cos(d*x),2)-

182*power(cos(d*x),4)+power(cos(d*x),6))/

power(cos(d*x),7);

end;

 

 

var

i :integer;

h, x,a,b:Extended;

sumC,sumG,iG,iC,ec,max:Extended;

errC,errG:Extended;

begin

try

h:=StrToFloat(LabeledEdit1.Text);

 

a := 0.0;

b := 0.785-h;

errC:=0; errG:=0;

x:=a; sumC:=0; sumG:=0;

while x<b do begin

iG:=0; iC:=0; ec:=0; max:=0;

for i:=1 to 3 do begin

iC:=iC+(f((2*x+h)/2+h/2*tC[i]));

iG:=iG+(Ag[i]*f((2*x+h)/2+h/2*tG[i]));

ec:=ec+power((2*x+h)/2+h/2*tC[i]-(2*x+h)/2,n+1)*f_4((2*x+h)/2+h/2*tC[i]);

if f_6((2*x+h)/2+h/2*tG[i])>max then max:=f_6((2*x+h)/2+h/2*tG[i]);

end;

iC:=iC*h/n;

iG:=iG*h/2;

sumC:=sumC+iC;

sumG:=sumG+iG;

max:=power(h,2*n+1)*power(6,4)*max/power(2,2*n+1)/power(120,3)/(2*n+1);

 

if h/18*ec>errC then errC:=h/18*ec;

if max>errG then errG:=max;

 

x:=x+h;

end;

 

a := 0.785+h;

b := 1;

x:=a;

while x<b do begin

iG:=0; iC:=0; ec:=0; max:=0;

for i:=1 to 3 do begin

iC:=iC+(f((2*x+h)/2+h/2*tC[i]));

iG:=iG+(Ag[i]*f((2*x+h)/2+h/2*tG[i]));

ec:=ec+power((2*x+h)/2+h/2*tC[i]-(2*x+h)/2,n+1)*f_4((2*x+h)/2+h/2*tC[i]);

if f_6((2*x+h)/2+h/2*tG[i])>max then max:=f_6((2*x+h)/2+h/2*tG[i]);

end;

iC:=iC*h/n;

iG:=iG*h/2;

sumC:=sumC+iC;

sumG:=sumG+iG;

 

max:=power(h,2*n+1)*power(6,4)*max/power(2,2*n+1)/power(120,3)/(2*n+1);

 

if h/18*ec>errC then errC:=h/18*ec;

if max>errG then errG:=max;

 

x:=x+h;

end;

 

with Memo1.Lines do begin

clear;

Add('Результати обчислень: ');

Add(' Метод Гауса: '+FloatToStrF(sumG,ffFixed,8,10));

Add(' Похибка: '+FloatToStrF(errG,ffFixed,8,10));

Add(' Метод Чебишева: '+FloatToStrF(sumC,ffFixed,8,10));

Add(' Похибка: '+FloatToStrF(errC,ffFixed,8,10));

Add(' Точне розвязання (Mathcad):

'+FloatToStrF(1.1367262217813367605,ffFixed,8,10));

end;

except

on EConvertError do

Application.MessageBox('Неправильно введен_ дан_', 'Увага');

end;

end;

end.


Дата добавления: 2021-02-10; просмотров: 37; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!