Розробка та опис логічної частини програми
В даній курсовій роботі було розроблено програмне забезпечення для розв’язання та дослідження заданого диференційного рівняння. Розвязок ведеться за різницевим алгоритмом. Кодування на мові Паскаль проводилося з застосуванням інтуїтивно-зрозумілих назв змінних та процедур. Також відступи та табуляція дозволяє досить легко збагнути структуру програми.
В інтерфейсі також не допущено зайвих елементів.
Керівництво оператору
Для завантаження програми необхідно запустити програмний файл 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!