ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.02.2025
Просмотров: 29
Скачиваний: 0
Реализация методов
Код реализации всей программы предоставлен в приложении.
Код реализации метода Симпсона предоставлен в приложении 1.
Код реализации вычисления факториала с помощью гамма-функции предоставлен в приложении 2.
-
Описание применения пакета программ
Основные понятия, цели и задачи
Программа производит вычисление определённого интеграла методом Симпсона, а также вычисление самой подынтегральной функции Бесселя и факториала нецелого числа для решения этой функции. Всё это необходимо для вычисления исходного выражения, что и является целью работы данной программы.
Описание интерфейса программы
На рисунке 1. предоставлено изображение диалогового окна программы. Здесь задаются параметры решения и выводится результат.
Рисунок 1 - Диалоговое окно программы
Диалоговое окно программы разделено на 3 части:
Верхняя часть – «шапка» программы с изображением целевого выражения и кнопкой «равно»
Нижняя левая часть – «Исходные данные»
Нижняя правая часть – «Промежуточные вычисления и результат»
Верхняя часть
Содержит в себе изображение выражения, которое и должна вычислять программа. Для его вычисления нужно, предварительно задав исходные данные, нажать на кнопку «равно», которая тоже содержится в этой части.
Исходные данные
Содержит в себе 3 поля TEditи одно полеTComboBoxдля внесения пользователем исходных значений. В полеDyвносится значение σy, в полеDzвносится значение σz, в полеR0 вносится значениеR0, и в полеRmaxможно либо выбрать предложенные, либо ввести вручную значениеRmax.
Промежуточные вычисления и результат
Содержит в себе 7 полей TEdit:
a1 – отображает вычисленное значение
a2 - отображает вычисленное значение
k - отображает вычисленное значение
Верхний предел интегрирования(T) - отображает вычисленное значение верхнего предела интегрирования ∆
Нижний предел интегрирования – можно отнести к исходным данным, задаётся вручную пользователем. По умолчанию принимает значение 0
Результат интегрирования – отображает вычисленный результат интеграла
Результат выражения P1,0 - отображает вычисленное значение всего искомого выражения, является конечным результатом работы всей программы.
Описание результатов решения
На рисунке 2. предоставлен результат работы программы.
Рисунок 2 – Результат работы программы
Результаты интегрирования, в предложенной мной программе, пределов интегрирования с помощью интерполяции, сходятся с результатами, посчитанными с помощью интернет ресурса www.matcabi.net.
http://www.matcabi.net/integrate_def.php
Тестирование
Было
проведено тестирование вычисления
определённого интеграла
при двух разных значениях Rmax а следовательно и верхних пределах интегрирования:
При Rmax = 1
Результаты вычислений моей программы:
Результаты вычисления интеграла проведённого при помощи интернет ресурса:
При Rmax = 45
Результаты вычислений моей программы:
Результаты вычисления интеграла проведённого при помощи интернет ресурса:
Список использованной в работе литературы и интернет ресурсов
Неупокоев Ф.К. – «Стрельбы зенитными ракетами»
http://ru.numberempire.com/ - для контроля вычислений гамма-функции
http://www.matcabi.net/ - вычисление определённых интегралов и функции Бесселя
http://ru.wikipedia.org/wiki/Гамма-функция
http://ref.rushkolnik.ru/v4470/?page=3
http://www.wikiznanie.ru/ru-wz/index.php/Гамма-функция#scrollTop=0
Приложение
Исходный код программы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
ComboBox1: TComboBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
GroupBox2: TGroupBox;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Label9: TLabel;
Edit7: TEdit;
Edit8: TEdit;
Label10: TLabel;
Edit9: TEdit;
Label5: TLabel;
Edit10: TEdit;
Label11: TLabel;
Image1: TImage;
BitBtn1: TBitBtn;
procedure Inicialization;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Dy,Dz,R0,Rmax:integer;
implementation
{$R *.dfm}
procedure TForm1.Inicialization;
begin
Dy:=StrToInt(Edit1.Text);
Dz:=StrToInt(Edit2.Text);
R0:=StrToInt(Edit3.Text);
Rmax:=StrToInt(ComboBox1.Text);
end;
function Pow(chislo, stepen:real):real;
var per:real;
b:integer;
a:string;
begin
Per:= Abs(chislo);
a:=FloatToStr(stepen);
b:=length(a);
a:=a[length(a)];
b:=StrToInt(a);
b:=b mod 2;
if (chislo=0) and (stepen<>0) then Pow:=0
else if (chislo<0) and (b=1)
then Pow:=(-1)*Exp((stepen)*Ln(per))
else Pow:=Exp((stepen)*Ln(per));
end;
function gamma(z:real):real;
var i,fact:integer;
tmp1,tmp2:real;
begin
if Frac(z)=0
then begin
fact:= 1;
for i:=2 to round(z) do fact:= fact * i;
gamma:=fact;
end
else begin
tmp1:= sqrt(2*PI/z);
tmp2:= z + 1.0/(12 * z - 1.0/(10*z));
tmp2:= pow(tmp2/Exp(1),z);
gamma:= tmp1*tmp2;
end;
end;
function f(t,k:real):real;
var i,n:integer;
h,r,rez:real;
x,y,l:real;
begin
i:=0; h:=Frac(k);
if k > int(k) then n:=Round(int(k))+1
else n:=Round(int(k));
rez:=1;
for i:=1 to n do begin
r:=i-1+h;
rez:=rez+pow(-1,int(r)+1)*((pow(t/2,2*r))/pow(gamma(r),2));
end;
f:=Exp(-t)*rez;
end;
function Simpson(t1,t2,k: real): real;
var
h,s0,s,eps: real;
n,i:integer;
begin
eps:=0.00001;
n:=100;
s:=0;
repeat
h:=(t2-t1)/n; s0:=s;
s:=f(t1,k)+f(t2,k);
for i:=1 to n-1 do
s:=s+2*(1+i mod 2)*f(t1+i*h,k);
s:=s*h/3;
until abs(s-s0) <= eps;
Simpson:=s;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var a1,a2,k,T0,T,Integ,P1_0:real;
begin
Inicialization;
a1:=Dy/Dz;
a2:=Dy/R0;
k:=abs((1-a1*a1)/(1+a1*a1+2*a2*a2));
T0:=StrToFloat(Edit8.Text);
T:=(1+a1*a1+2*a2*a2)/(4*Dy*Dy)*Rmax*Rmax;
Integ:=Simpson(T0,T,k);
P1_0:=(4*Dy*Dz*R0*R0)/((Dy*Dy+Dz*Dz)*R0*R0+2*Dy*Dy*Dz*Dz);
P1_0:=P1_0*Integ;
Edit4.Text:=FloatToStr(a1);
Edit5.Text:=FloatToStr(a2);
Edit6.Text:=FloatToStr(k);
Edit7.Text:=FloatToStr(T);
Edit9.Text:=FloatToStr(Integ);
Edit10.Text:=FloatToStr(P1_0);
end;
end.
Приложение 1
function gamma(z:real):real;
var i,fact:integer;
tmp1,tmp2:real;
begin
if Frac(z)=0
then begin
fact:= 1;
for i:=2 to round(z) do fact:= fact * i;
gamma:=fact;
end
else begin
tmp1:= sqrt(2*PI/z);
tmp2:= z + 1.0/(12 * z - 1.0/(10*z));
tmp2:= pow(tmp2/Exp(1),z);
gamma:= tmp1*tmp2;
end;
end;
Приложение 2
function Simpson(t1,t2,k: real): real;
var
h,s0,s,eps: real;
n,i:integer;
begin
eps:=0.00001;
n:=100;
s:=0;
repeat
h:=(t2-t1)/n; s0:=s;
s:=f(t1,k)+f(t2,k);
for i:=1 to n-1 do
s:=s+2*(1+i mod 2)*f(t1+i*h,k);
s:=s*h/3;
until abs(s-s0) <= eps;
Simpson:=s;
end;