ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 04.02.2025

Просмотров: 29

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
    1. Реализация методов

Код реализации всей программы предоставлен в приложении.

Код реализации метода Симпсона предоставлен в приложении 1.

Код реализации вычисления факториала с помощью гамма-функции предоставлен в приложении 2.

  1. Описание применения пакета программ

    1. Основные понятия, цели и задачи

Программа производит вычисление определённого интеграла методом Симпсона, а также вычисление самой подынтегральной функции Бесселя и факториала нецелого числа для решения этой функции. Всё это необходимо для вычисления исходного выражения, что и является целью работы данной программы.

    1. Описание интерфейса программы

На рисунке 1. предоставлено изображение диалогового окна программы. Здесь задаются параметры решения и выводится результат.

Рисунок 1 - Диалоговое окно программы

Диалоговое окно программы разделено на 3 части:

  • Верхняя часть – «шапка» программы с изображением целевого выражения и кнопкой «равно»

  • Нижняя левая часть – «Исходные данные»

  • Нижняя правая часть – «Промежуточные вычисления и результат»

Верхняя часть

Содержит в себе изображение выражения, которое и должна вычислять программа. Для его вычисления нужно, предварительно задав исходные данные, нажать на кнопку «равно», которая тоже содержится в этой части.

Исходные данные

Содержит в себе 3 поля TEditи одно полеTComboBoxдля внесения пользователем исходных значений. В полеDyвносится значение σy, в полеDzвносится значение σz, в полеR0 вносится значениеR0, и в полеRmaxможно либо выбрать предложенные, либо ввести вручную значениеRmax.

Промежуточные вычисления и результат

Содержит в себе 7 полей TEdit:

  • a1 – отображает вычисленное значение

  • a2 - отображает вычисленное значение

  • k - отображает вычисленное значение

  • Верхний предел интегрирования(T) - отображает вычисленное значение верхнего предела интегрирования ∆


  • Нижний предел интегрирования – можно отнести к исходным данным, задаётся вручную пользователем. По умолчанию принимает значение 0

  • Результат интегрирования – отображает вычисленный результат интеграла

  • Результат выражения P1,0 - отображает вычисленное значение всего искомого выражения, является конечным результатом работы всей программы.

    1. Описание результатов решения

На рисунке 2. предоставлен результат работы программы.

Рисунок 2 – Результат работы программы

Результаты интегрирования, в предложенной мной программе, пределов интегрирования с помощью интерполяции, сходятся с результатами, посчитанными с помощью интернет ресурса www.matcabi.net.

http://www.matcabi.net/integrate_def.php

    1. Тестирование

Было проведено тестирование вычисления определённого интеграла

при двух разных значениях Rmax а следовательно и верхних пределах интегрирования:

  1. При Rmax = 1

Результаты вычислений моей программы:

Результаты вычисления интеграла проведённого при помощи интернет ресурса:

  1. При Rmax = 45

Результаты вычислений моей программы:

Результаты вычисления интеграла проведённого при помощи интернет ресурса:

  1. Список использованной в работе литературы и интернет ресурсов

  1. Неупокоев Ф.К. – «Стрельбы зенитными ракетами»

  2. http://ru.numberempire.com/ - для контроля вычислений гамма-функции

  3. http://www.matcabi.net/ - вычисление определённых интегралов и функции Бесселя

  4. http://ru.wikipedia.org/wiki/Гамма-функция

  5. http://ref.rushkolnik.ru/v4470/?page=3

  6. 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;