Численные методы решения математических задач

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Математика
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    2,9 Мб
  • Опубликовано:
    2013-05-23
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Численные методы решения математических задач

МОСКОВСКИЙ АВИАЦИОННЫЙ ИНСТИТУТ

(национальный исследовательский университет)

Факультет №8 «Прикладная математика и физика»

Кафедра 806 «Вычислительная математика и программирование»






ОТЧЕТ

по

расчетно-графической работе

по дисциплине

«Вычислительная математика»

Выполнил:

Студент группы 03-325

Игнатенко А.В.

Преподаватель:

Кринецкий О.Е.




Москва 2012

ОГЛАВЛЕНИЕ

1. Постановка задачи

. Формулировка заданий РГР

. Выполнение расчетно-графической работы

.1 Метод Гаусса

.1.1 Листинг

.2 Метод прогонки

.2.1 Листинг

.3 Нелинейное уравнение

.3.1 Листинг

.4 Метод вращения Якоби

.4.1 Листинг

.5 Интерполяционный многочлен

.5.1 Интерполяционный многочлен Лагранжа

.5.2 Интерполяционный многочлен Ньютона

.6 Интерполяция сплайнами

.6.1 Листинг

.7 Метод наименьших квадратов

.7.1 Листинг

.8 Дифференцирование многочленами

.8.1 Листинг

.9 Метод Монте-Карло

.9.1 Листинг

.10 Метод Рунге-Кутты

.10.1 Листинг

.11 Краевая задача

.11.1 Листинг

. Заключение

 

1. Постановка задачи


Выполнить задания 1-11 расчетно-графической работы в соответствии с вариантом. При выполнении заданий разрешается пользоваться различным программным обеспечением, учитывая следующие требования:

) Алгоритм работы и листинг используемого программного обеспечения должен быть понятен студенту. Студент должен предоставить необходимые разъяснения по требованию преподавателя, либо усовершенствовать/дополнить программу, если это необходимо;

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

) При предоставлении собственноручно написанного ПО, студенту следует разместить на носителе, содержащем ПО, дистрибутив той среды программирования, в которой было написано ПО.

 

2. Формулировка заданий РГР

нелинейный уравнение интерполяционный многочлен

Расчетно-графическая работа состоит из нескольких заданий, для успешного решения которых необходимо продемонстрировать владение численными методами решения математических задач.

Формулировка всех заданий приведена ниже.

) Методом Гаусса с точностью ε=0,01 решить СЛАУ;

) Методом прогонки решить СЛАУ, ε=0,01;

) Методом простой итерации (или любым другим) с ε=0,01 уточнить один из корней уравнения;

) Методом вращения с ε=0,01 вычислить собственные значения и собственные вектора симметрической матрицы А;

) Выписать интерполяционные многочлены Лагранжа и Ньютона для узловых значений {xi, yi}, заданных функцией y=f(x);

) Для таблицы задания 5 выписать кубические сплайны дефекта 1 на каждом отрезке x∈[xi-1, xi], i=1..4;

) Методом наименьших квадратов аппроксимировать линейным и квадратичным многочленом заданную таблицу.

) Используя таблицу задания 5 найти значение 1-й и 2-й производной в заданной точке.

) Методом Рунге-Кутты с шагом h=0,1 и ε=0,01 решить задачу Коши.

) Методом прогонки с шагом h=0,1 и 0(h2) решить краевую задачу для ОДУ.

 

3. Выполнение расчетно-графической работы


Все задания, представленные в РГР, были выполнены с использованием собственноручно разработанного ПО и в соответствии с требуемым вариантом. Описание метода, описание алгоритма, скриншоты работы и листинг прилагаются.

 

3.1 Метод Гаусса


 


В ходе работы программы были подсчитаны корни СЛАУ:


Определитель введенной матрицы:

 

3.1.1 Листинг

unit Gauss;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Grids, ExtCtrls, jpeg;= class(TForm): TStringGrid;: TButton;: TEdit;: TLabel;: TButton;: TMemo;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TBevel;: TBevel;: TStaticText;: TButton;: TStringGrid;: TEdit;: TButton;: TLabel;: TEdit;: TImage;: TLabel;Button1Click(Sender: TObject);Button2Click(Sender: TObject);FormCreate(Sender: TObject);Button3Click(Sender: TObject);Button4Click(Sender: TObject);

{ Private declarations }

{ Public declarations };=array [1..20,1..20] of extended;=array [1..20] of extended;=array of Real;=array of Tmass;: TextFile;: TForm1;,m,n,i,j,p,l: integer;, znak: integer;: Mat;: string;:Mat;,b:Vec;:real;: string;: Integer;: Real;

begin('Заполните все поля матрицы');

exit;;i:=0 to StringGrid2.RowCount doj:=0 to StringGrid2.ColCount do begin.Cells[i,j]:=StringGrid1.Cells[i,j];;i:=1 to n doj:=1 to n+1 do[i,j]:=StrToFloat(StringGrid1.Cells[j-1,i-1]);:=n+1;k:=1 to n do:=k+1;:=A[k,k];:=k;i:=k1 to n do:=a[i,k];abs(R)>abs(S)then:=R;:=I;;s=0.0 then('Определитель равен нулю!');;;j<>k theni:=k to n1 do:=A[k,i];[k,i]:=A[j,i];[j,i]:=R;;j:=k to n1 do {k}[k,j]:=A[k,j]/S;i:=k1 to n do:=A[i,k];j:=k to n1 do {k}[i,j]:=A[i,j]-A[k,j]*R;;;s<>0.0 theni:=n downto 1 do:=a[i,n1];j:=i+1 to n do:=s-a[i,j]*x[j];[i]:=s;;.Text:='';i:=1 to n do.lines.Add('X['+FloatToStr(i)+']= '+FloatToStr(x[i]));;('Det[A]=0');;;.Visible:=True;;TForm1.FormCreate(Sender: TObject);.text:='';;TForm1.Button3Click(Sender: TObject);Per(k,n:integer;var a:Tmatrix; var p:integer);z:Real;j,i:integer;:=abs(a[k,k]);i:=k;p:=0;j:=k+1 to n-1 doabs(a[j,k])>z then:=abs(a[j,k]);i:=j;:=p+1;;;i>k thenj:=k to n-1 do:=a[i,j];[i,j]:=a[k,j];[k,j]:=z;;;Znak(p:integer):integer;p mod 2=0 then:=1 else result:=-1;;Opr(n:integer;var a:tmatrix;var det:real);k,i,j,p:integer;r:real;:=1.0;k:=0 to n-1 doa[k,k]=0 then Per(k,n,a,p);:=znak(p)*det*a[k,k];j:=k+1 to n-1 do:=a[j,k]/a[k,k];i:=k to n-1 do[j,i]:=a[j,i]-r*a[k,i];;;;k,j,i:integer;:Tmatrix;:real;:=strtoint(edit1.Text);(a,n,n);k:=0 to n-1 doj:=0 to n-1 do[k,j]:=strtofloat(StringGrid2.Cells[j,k]);(n,a,det);.Text:=FloatToStrF(det,ffFixed,5,0);;TForm1.Button4Click(Sender: TObject);lol: Integer;:=StrToInt(Edit3.Text);;p:= 0 to StringGrid1.RowCount dol:= 0 to StringGrid1.ColCount do:=Random(2);znak=1 then znak:=-1 else znak:=1;:=Random(100);:=IntToStr(tempint);:=StrToFloat(tempstr);.Cells[p,l]:=FloatToStr(znak*(Random(lol+1)+tempfloat*0.01));;;.

3.2 Метод прогонки


 


В ходе работы программы были подсчитаны корни СЛАУ:


Прогоночные коэффициенты:

 

3.2.1 Листинг

unit Progonka;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Grids, ExtCtrls, jpeg;= class(TForm): TStringGrid;: TButton;: TEdit;: TButton;: TLabel;: TMemo;: TLabel;: TBevel;: TPanel;: TLabel;: TLabel;: TEdit;: TButton;: TButton;: TLabel;: TBevel;: TButton;: TLabel;: TEdit;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TImage;: TLabel;Button1Click(Sender: TObject);Button2Click(Sender: TObject);Button3Click(Sender: TObject);Button4Click(Sender: TObject);FormCreate(Sender: TObject);Button5Click(Sender: TObject);

{ Private declarations }

{ Public declarations };=array [0..100] of extended;=array [0..100] of extended;,P,x :MasEl;,b,c,d:MasExt;: TextFile;: TForm1;,j,n,k,raz,p1,l1,znak : integer;: string;:real;: Integer;: String;: Real;Unit2;

{$R *.dfm}TForm1.Button1Click(Sender: TObject);:=StrToInt(Edit1.text);i:=1 to n doj:=1 to n+1 do.Cells[j-1,i-1]:='';.ColCount:=n+1;.RowCount:=n;.Height:=n*26+1;.Width:=(n+1)*66+1;.Visible:=true;.visible:=true;.text:='';.memo1.text:='';.Enabled:=True;;TForm1.Button2Click(Sender: TObject);,j,n,k,raz : integer;,P,x :MasEl;,b,c,d:MasExt;:string;,R:real;: boolean;:=StrToInt(Edit1.text);.memo1.lines.Add('P[0]= 1');.memo1.lines.Add('Q[0]= 1');i:=1 to n do[i]:=StrToFloat(StringGrid1.Cells[i-1,i-1]); //главная диагональi<n then[i]:=StrToFloat(StringGrid1.Cells[i,i-1]); //нижняя диагональ[i+1]:=StrToFloat(StringGrid1.Cells[i-1,i]); //верхняя диагональ;[i]:=StrToFloat(StringGrid1.Cells[n,i-1]) //свободные члены;

//P[i], Q[i] - метод прогонкиi:=1 to n do[i]:=(-c[i])/(b[i]+a[i]*P[i-1]);[i]:=(d[i]-a[i]*Q[i-1])/(b[i]+a[i]*P[i-1]);.memo1.lines.Add('P['+IntToStr(i)+']= '+FloatToStr(P[i]));.memo1.lines.Add('Q['+IntToStr(i)+']= '+FloatToStr(Q[i]));;[n]:=Q[n];i:=(n-1) downto 1 do[i]:=P[i]*x[i+1]+Q[i];i:=1 to n do.lines.Add('X['+FloatToStr(i)+']= '+FloatToStr(x[i]));.Visible:=true;;.Enabled:=False;.Visible:=True;;TForm1.Button3Click(Sender: TObject);,j,n,k,raz : integer;,P,x :MasEl;,b,c,d:array[1..100] of integer;

begin

//случайное заполнение матрицы:=StrToInt(Edit1.text);

Randomize;i:=1 to n do[i]:=(Random(2*StrToInt(Edit2.text)+1)-StrToInt(Edit2.text));b[i]<>0;.cells[i-1,i-1]:=FloatToStr(b[i]);i<n then[i]:=Random(Abs(2*b[i]+1))-Abs(b[i]);.cells[i,i-1]:=FloatToStr(c[i]);c[i]:=0;i>1 then[i]:=Random(2*(Abs(b[i])-Abs(c[i]))+1)-(Abs(b[i])-Abs(c[i]));.cells[i-2,i-1]:=FloatToStr(a[i]);a[i]:=0;[i]:=a[i]+b[i]+c[i];.cells[n,i-1]:=FloatToStr(d[i]);;;TForm1.Button4Click(Sender: TObject);.Show;;TForm1.FormCreate(Sender: TObject);.Text:='';;TForm1.Button5Click(Sender: TObject);lol: integer;:=StrToInt(Edit3.Text);;p1:= 0 to StringGrid1.RowCount dol1:= 0 to StringGrid1.ColCount do:=Random(2);znak=1 then znak:=-1 else znak:=1;:=Random(100);:=IntToStr(tempint);:=StrToFloat(tempstr);.Cells[p1,l1]:=FloatToStr(znak*(Random(lol+1)+tempfloat*0.01));

end;;.

3.3 Нелинейное уравнение


 

 

3.3.1 Листинг

unit Unit1;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, ExtCtrls,Math, jpeg;= class(TForm): TLabel;: TLabel;: TLabel;: TPanel;: TLabel;: TLabel;: TLabel;: TLabel;: TButton;: TEdit;: TPanel;: TLabel;: TImage;Button1Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm1;

{$R *.dfm}TForm1.Button1Click(Sender: TObject);x:real;.Caption:='Результат Вычислений:';:=StrToFloat(Edit1.Text);:= x - ( ((Cos(x)/sin(x)) - 2*x) / ( (-1*(1/sqr(sin(x))) - 2 )) );.Text:=FloatToStr(x);;

end.

3.4 Метод вращения Якоби


A =


Пошаговое выполнение программы (преобразование матриц):

 

3.4.1 Листинг

unit Unitmv;, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,, Grids, jpeg, ExtCtrls, Math;= class(TForm): TStringGrid;: TButton;: TEdit;: TButton;: TEdit;: TLabel;: TLabel;: TMemo;: TButton;: TLabel;: TBevel;: TBevel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TImage;: TLabel;Button1Click(Sender: TObject);Button2Click(Sender: TObject);FormCreate(Sender: TObject);Button3Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm1;Unit2;:extended;,i,j,i1,j1,l:integer;,pov,new,rez,povtr:array [1..20,1..20] of extended;

{$R *.DFM}TForm1.Button1Click(Sender: TObject);,j:integer;:=StrToFloat(Edit2.text);:=StrToInt(Edit1.text);.RowCount:=n; //устанавливаем размерность матрицы.ColCount:=n;matrix doi:=0 to RowCount do //очищаем еёj:=0 to ColCount do[j, i]:='';.width:=matrix.DefaultColWidth*n+20;.height:=matrix.DefaultRowHeight*n+20;;TForm1.Button2Click(Sender: TObject);sum,max,x,k:extended;:string;i:=1 to n doj:=1 to n do[i,j]:=StrToFloat(matrix.Cells[j-1, i-1]);;;:=k+1;:=0;i:=1 to n doj:=1 to n doi<>j then:=sum+a[i,j]*a[i,j];:=sqrt(sum);:=abs(a[1,2]);:=1;:=2;i:=1 to n doj:=1 to n do begin[i,j]:=0;(i<>j) and (abs(A[i,j])>max) then

begin:=abs(A[i,j]);//запоминаем индекс максимального элемента

i1:=i;:=j;;;max=0 theni:=1 to n do.Lines.Add('Диагональный эл-т на позиции ['+IntToStr(i)+','+IntToStr(i)+']= '+FloatToStr(a[i,i]));

break;;

{еси максимальный элемент ноль-значит всё обнулили выход}

// showmessage(FloatToStr(a[i1,j1]));:=0.5*arctan(2*(a[i1,j1]/(a[i1,i1]-a[j1,j1])));.Lines.Add('tg(2Phi)='+FloatToStr(tan(2*x)));i:=1 to n do[i,i]:=1;[i1,i1]:=cos(x);[j1,j1]:=cos(x);[i1,j1]:=-sin(x);[j1,i1]:=sin(x);

for i:=1 to n doj:=1 to n do povtr[i,j]:=pov[j,i]; //транспонируем. т.к. определитель равен единице это тоже самое что обратная

for i:=1 to n doj:=1 to n do

begin[i,j]:= 0;l:= 1 to n do //умножаем транспонированную м-цу поворота на исходную

new[i,j]:= new[i,j] + povtr[i,l]*a[l,j];;i:=1 to n doj:=1 to n do

rez[i,j]:= 0;l:= 1 to n do //то что получилось умножаем на м-цу поворота

rez[i,j]:= rez[i,j] + new[i,l]*pov[l,j];;i:=1 to n doj:=1 to n do begin[i,j]:=rez[i,j];;.memo1.Lines.add('Матрица после '+FloatToStr(k)+'-го преобразования');i:=1 to n do:='';j:=1 to n do:=st+FloatToStrF(a[i,j],fffixed,3,2)+' ';.memo1.Lines.add(st);;.memo1.Lines.add('------------------');sum<=e;i:=1 to n do.Lines.Add('Диагональный эл-т на позиции ['+IntToStr(i)+','+IntToStr(i)+']= '+FloatToStr(rez[i,i]));;TForm1.FormCreate(Sender: TObject);.text:='';;TForm1.Button3Click(Sender: TObject);.Show;;.

3.5 Интерполяционный многочлен


 

 

 

3.5.1 Интерполяционный многочлен Лагранжа



3.5.1.1 Листинг

// кнопка найти после графикаUnit1;

interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Grids, ExtCtrls, jpeg;= class(TForm): TStringGrid;: TEdit;: TImage;: TButton;: TButton;: TLabel;: TMemo;: TLabel;: TEdit;: TButton;: TLabel;: TBevel;: TImage;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TImage;: TLabel;Button2Click(Sender: TObject);Button1Click(Sender: TObject);Button3Click(Sender: TObject);Image1Click(Sender: TObject);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };=array[1..100] of Extended;: TForm1;,Xmin,Ymax,Ymin:extended;,a,y:Mas;,j,n: integer;,yy:real;,PY:integer;: Boolean;

{$R *.dfm}TForm1.Button1Click(Sender: TObject);:=StrToInt(Edit1.text);.ColCount:=n;.Width:=(n)*67;.Visible:=true;;Ln(x: Extended; a,y:Mas ; {передаём масштаб}var Xmax,Xmin,Ymax,Ymin:extended):Extended;, Mng: extended;

// формула Лагранжа:=0;i:=1 to n do:=1;j:=1 to n doi<>j then:=((x-a[j])/(a[i]-a[j]))*Mng;;:=Mng*y[i]+Sum;;:=Sum;:=10;:=-10;:=10;:=-10;;TForm1.Button2Click(Sender: TObject);

{x,yy:real;,PY:integer; }.Picture:= nil;:=StrToInt(Edit1.text);j:=1 to n do[j]:=StrToFloat(StringGrid1.Cells[j-1,0]);[j]:=StrToFloat(StringGrid1.Cells[j-1,1]);

//оси.Canvas.MoveTo(0,Image1.height div 2);.Canvas.LineTo(Image1.width,Image1.height div 2);.Canvas.MoveTo(Image1.width div 2,0);.Canvas.LineTo(Image1.width div 2,Image1.height);

// масштаб:=Xmin+0*(Xmax-Xmin)/Image1.Width;:=(Ln(x,a,y,Xmax,Xmin,Ymax,Ymin));.Canvas.MoveTo(0,trunc(Image1.Height-(yy-Ymin)*Image1.height/(Ymax-Ymin)));

//построение граффикаPX:=0 to Image1.Width do:=Xmin+PX*(Xmax-Xmin)/Image1.Width;:=(Ln(x,a,y,Xmax,Xmin,Ymax,Ymin));:=trunc(Image1.Height-(yy-Ymin)*Image1.height/(Ymax-Ymin));.Canvas.Pen.Color:=clNavy;.Canvas.LineTo(PX,PY);;.Enabled:=False;

//Button2.Enabled:=False;.Enabled:=True;:=True;;TForm1.Button3Click(Sender: TObject);:=StrToFloat(Edit2.text);:=(Ln(x,a,y,Xmax,Xmin,Ymax,Ymin));.Lines.Add('Значение функции в точке '+FloatToStr(x)+' = '+FloatToStr(yy));;TForm1.Image1Click(Sender: TObject);: TMouse;,py:integer;,xx: Extended;Button2.Enabled=False then Exit;Edit1.Text='' then:=0:=StrToInt(Edit1.text);koord=False then:=n+1;.ColCount:=n;.Width:=(n)*67;.Visible:=true;.text:=IntToStr(n);:=10;:=-10;:=10;:=-10;

//захват координат точек в пикселях:=ScreenToClient(MyMouse.CursorPos).x-image1.Left;:=(ScreenToClient(MyMouse.CursorPos).y-image1.top);

{ Memo1.Lines.add(inttostr(px) + 'Х ' + inttostr(py)); }

//перевод координат в декарт:=(Ymax-(py*((Ymax-Ymin)/image1.height)));:=(Xmin+px*(Ymax-Ymin)/image1.width);koord=False then begin.Cells[n-1,0]:=FloatToStrF(xx,ffFixed,4,2);.Cells[n-1,1]:=FloatToStrF(yy,ffFixed,4,2); end;koord=True then begin.Text:=FloatToStrF(xx,ffFixed,4,2);;koord=False then.Lines.add('x: '+FloatToStrF(xx,ffFixed,4,2)+' y:'+FloatToStrF(yy,ffFixed,4,2));

//рисуем точки.Canvas.Ellipse(px-2,py-2,px+2,py+2);;TForm1.FormCreate(Sender: TObject);.Canvas.MoveTo(0,Image1.height div 2);.Canvas.LineTo(Image1.width,Image1.height div 2);.Canvas.MoveTo(Image1.width div 2,0);.Canvas.LineTo(Image1.width div 2,Image1.height);

koord:=False;;.

3.5.2 Интерполяционный многочлен Ньютона



3.5.2.1 Листинг

unit Unit1;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Grids, ExtCtrls, jpeg;= class(TForm): TImage;: TLabel;: TLabel;: TLabel;: TBevel;: TImage;: TStringGrid;: TEdit;: TButton;: TButton;: TMemo;: TEdit;: TButton;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TImage;: TLabel;Button2Click(Sender: TObject);Button1Click(Sender: TObject);Button3Click(Sender: TObject);Image1Click(Sender: TObject);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };=array[1..100] of Extended;: TForm1;,Xmin,Ymax,Ymin,Fx:extended;,a,y:Mas;,j,n,k: integer;,yy:real;: Boolean;

{$R *.dfm}TForm1.Button1Click(Sender: TObject);:=StrToInt(Edit1.text);.ColCount:=n;.Width:=(n)*67;.Visible:=true;.Enabled:=True;;PH(x: Extended; a,y:Mas ; var Xmax,Xmin,Ymax,Ymin:extended):Extended;, Mng, Pn,Pr: extended;:=0;i:=1 to n do:=1;:=0;k:=1 to i doj:=1 to i dok<>j then:=1/(a[k]-a[j])*Fx;;:=Fx*y[k];:=Sum+Fx;:=1;;:=1;i>1 thenk:=1 to i-1 do:=Pr*(x-a[k]);:=sum*pr;:=Pn+Sum;;:=Pn;:=10;:=-10;:=10;:=-10;;TForm1.Button2Click(Sender: TObject);x,yy:real;,PY:integer;,Apx,Ypx: Integer;.Picture:= nil;:=StrToInt(Edit1.text);:=10;:=-10;:=10;:=-10;j:=1 to n do[j]:=StrToFloat(StringGrid1.Cells[j-1,0]);[j]:=StrToFloat(StringGrid1.Cells[j-1,1]);j:=1 to n do:=trunc((a[j]-Xmin)*Image1.Width/(Xmax-Xmin));:=trunc(Image1.Height-(y[j]-Ymin)*Image1.height/(Ymax-Ymin));.Canvas.Pixels[Apx,Ypx]:=clBlack;;.Canvas.MoveTo(0,Image1.height div 2);.Canvas.LineTo(Image1.width,Image1.height div 2);.Canvas.MoveTo(Image1.width div 2,0);.Canvas.LineTo(Image1.width div 2,Image1.height);:=Xmin+0*(Xmax-Xmin)/Image1.Width;:=(PH(x,a,y,Xmax,Xmin,Ymax,Ymin));.Canvas.MoveTo(0,trunc(Image1.Height-(yy-Ymin)*Image1.height/(Ymax-Ymin)));PX:=0 to Image1.Width do:=Xmin+PX*(Xmax-Xmin)/Image1.Width;:=(PH(x,a,y,Xmax,Xmin,Ymax,Ymin));:=trunc(Image1.Height-(yy-Ymin)*Image1.height/(Ymax-Ymin));.Canvas.Pen.Color:=clGreen;.Canvas.LineTo(PX,PY);;.Enabled:=False;

//button2.Enabled:=False;.Enabled:=True;:=True;;TForm1.Button3Click(Sender: TObject);:=StrToFloat(Edit2.text);:=(PH(x,a,y,Xmax,Xmin,Ymax,Ymin));.Lines.add('Значение функции в точке '+FloatToStr(x)+' = '+FloatToStr(yy));;TForm1.Image1Click(Sender: TObject);: TMouse;,py:integer;,xx: Extended;Button2.Enabled=False then Exit;Edit1.Text='' then:=0:=StrToInt(Edit1.text);koord=False then:=n+1;.ColCount:=n;.Width:=(n)*67;.Visible:=true;.text:=IntToStr(n);:=10;:=-10;:=10;:=-10;:=ScreenToClient(MyMouse.CursorPos).x-image1.left;:=(ScreenToClient(MyMouse.CursorPos).y-image1.top);

{ Memo1.Lines.add(inttostr(px) + 'Х ' + inttostr(py)); }:=(Ymax-(py*((Ymax-Ymin)/image1.height)));:=(Xmin+px*(Ymax-Ymin)/image1.width);koord=False then begin.Cells[n-1,0]:=FloatToStrF(xx,ffFixed,4,2);.Cells[n-1,1]:=FloatToStrF(yy,ffFixed,4,2); end;koord=True then Edit2.Text:=FloatToStrF(xx,ffFixed,4,2);koord=False then.Lines.add('x: '+FloatToStrF(xx,ffFixed,4,2)+' y:'+FloatToStrF(yy,ffFixed,4,2));.Canvas.Ellipse(px-2,py-2,px+2,py+2);;TForm1.FormCreate(Sender: TObject);.Canvas.MoveTo(0,Image1.height div 2);.Canvas.LineTo(Image1.width,Image1.height div 2);.Canvas.MoveTo(Image1.width div 2,0);.Canvas.LineTo(Image1.width div 2,Image1.height);:=False;;.

 

3.6.1 Листинг

unit Unit1;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Grids, ExtCtrls, jpeg;= class(TForm): TStringGrid;: TEdit;: TImage;: TButton;: TButton;: TMemo;: TLabel;: TLabel;: TEdit;: TButton;: TPanel;: TPanel;: TLabel;: TLabel;: TLabel;: TBevel;: TImage;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TImage;: TLabel;Button2Click(Sender: TObject);Button1Click(Sender: TObject);Button3Click(Sender: TObject);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };=array[0..100] of Extended;: TForm1;,Xmin,Ymax,Ymin:extended;,j,n,k,raz,nn : integer;,P :Mas;,a,b,c,d,y,cc,h,aa,bb:Mas;:string;:real;:real;,PY,Lg,Rg:integer;,XXmax,XXmin: extended;

{$R *.dfm}TForm1.Button1Click(Sender: TObject);:=StrToInt(Edit1.text);.ColCount:=n;.Width:=(n)*67;.Visible:=true;;S(x: Extended; i:Integer; a,y,xx,c,b,d:Mas ; var Xmax,Xmin,Ymax,Ymin:extended):Extended;, Mng: extended;:=0;:=a[i]+b[i]*(x-xx[i-1])+c[i]*(x-xx[i-1])*(x-xx[i-1])+d[i]*(x-xx[i-1])*(x-xx[i-1])*(x-xx[i-1]);:=Sum;:=10;:=-10;:=10;:=-10;;TForm1.Button2Click(Sender: TObject);.Text:='';.Visible:=true;.Visible:=true;:=StrToInt(Edit1.text);:=nn-1;j:=0 to n do[j]:=StrToFloat(StringGrid1.Cells[j,0]);[j]:=StrToFloat(StringGrid1.Cells[j,1]);;i:=1 to n do[i]:=xx[i]-xx[i-1];[1]:=0;[2]:=0;[1]:=0;[1]:=0;i:=2 to n do

begin // Нахождение коэф с[i] методом прогонки

bb[i]:=2*(h[i-1]+h[i]);[i]:=h[i];[i+1]:=h[i];[i]:=3*((y[i]-y[i-1])/h[i]-(y[i-1]-y[i-2])/h[i-1]); {y[0]}[i]:=(-cc[i])/(bb[i]+aa[i]*P[i-1]);[i]:=(d[i]-aa[i]*Q[i-1])/(bb[i]+aa[i]*P[i-1]);;[n+1]:=0;i:=n downto 2 do[i]:=P[i]*c[i+1]+Q[i];;[n+1]:=0;i:=1 to n do[i]:=((y[i]-y[i-1])/h[i]-(1/3)*h[i]*(c[i+1]+2*c[i]));[i]:=(c[i+1]-c[i])/(3*h[i]);[i]:=y[i-1];;i:=1 to n doForm1.Memo1.Lines do('a = '+FloatToStrF(a[i],fffixed,4,2));('b = '+FloatToStrF(b[i],fffixed,4,2));('c = '+FloatToStrF(c[i],fffixed,4,2));('d = '+FloatToStrF(d[i],fffixed,4,2));('----------------');;;.Canvas.MoveTo(0,Image1.height div 2);.Canvas.LineTo(Image1.width,Image1.height div 2);.Canvas.MoveTo(Image1.width div 2,0);.Canvas.LineTo(Image1.width div 2,Image1.height);i:=1 to n do:=xx[i];:=xx[i-1];:=XXmin;:=(S(x,i,a,y,xx,c,b,d,Xmax,Xmin,Ymax,Ymin));.Canvas.MoveTo(Trunc((XXmin-Xmin)*(Image1.Width/(Xmax-Xmin))),trunc(Image1.Height-(yy-Ymin)*Image1.height/(Ymax-Ymin)));.Canvas.Pixels[Trunc((XXmin-Xmin)*(Image1.Width/(Xmax-Xmin))),trunc(Image1.Height-(yy-Ymin)*Image1.height/(Ymax-Ymin))]:=clRed;:=trunc((xx[i]-xx[i-1])*(Image1.Width/(Xmax-Xmin)));PX:=0 to Rg do:=XXmin+PX*(Xmax-Xmin)/Image1.Width;:=(S(x,i,a,y,xx,c,b,d,Xmax,Xmin,Ymax,Ymin));:=trunc(Image1.Height-(yy-Ymin)*Image1.height/(Ymax-Ymin));.Canvas.Pen.Color:=clRed;:=trunc((x-Xmin)*(Image1.Width/(Xmax-Xmin)));.Canvas.LineTo(Lg,PY);;;.Visible:=TRUE;;TForm1.Button3Click(Sender: TObject);:=StrToFloat(Edit2.text);i:=1 to n do(x>=xx[i-1]) and (x<=xx[i]) then:=(S(x,i,a,y,xx,c,b,d,Xmax,Xmin,Ymax,Ymin));.memo1.lines.add('Значение функции в точке '+FloatToStr(x)+'= '+FloatToStr(yy));;;;TForm1.FormCreate(Sender: TObject);

{ image1.Canvas.MoveTo(0,Image1.height div 2);.Canvas.LineTo(Image1.width,Image1.height div 2);.Canvas.MoveTo(Image1.width div 2,0);.Canvas.LineTo(Image1.width div 2,Image1.height); }

end;.

3.7 Метод наименьших квадратов


x

0

1

2

3

4

5

y

2,1

5,9

12,2

19,8

30,3

41,6



3.7.1 Листинг

unit Unitmnk;, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,, StdCtrls, ExtCtrls, jpeg,Math;= class(TForm): TStringGrid;: TButton;: TImage;: TButton;: TButton;: TButton;: TButton;: TLabel;: TBevel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TImage;: TLabel;: TEdit;: TEdit;: TLabel;: TLabel;Button1Click(Sender: TObject);Button2Click(Sender: TObject);Button3Click(Sender: TObject);Button4Click(Sender: TObject);Image1MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);FormCreate(Sender: TObject);Button5Click(Sender: TObject);Button6Click(Sender: TObject);

{ Private declarations }f(m:extended; var Xmax,Xmin,Ymax,Ymin:extended):extended;f2(m:extended; var Xmax,Xmin,Ymax,Ymin:extended):extended;

{ Public declarations };: TForm1;kol,i,j,k,l,k1,n1,n,rcnt,check,check2:integer;,fk,t:array [1..50] of extended;,xsum,a,b,v,w:extended;,Xmin,Ymax,Ymin,summa,summa2:extended;: array [1..10,1..11] of extended;,s,xsumkv,xsumkub,xsum4,fksum1, fksum2, fksum3:extended;

{$R *.DFM}Tform1.f(m:extended; var Xmax,Xmin,Ymax,Ymin:extended):extended;i:=1 to kol do begin[i]:=StrToFloat(SG1.Cells[0,i-1]);[i]:=StrToFloat(SG1.Cells[1,i-1]);;:=0;:=0;i:=1 to kol do begin:=fksum+fk[i];:=xsum+x[i];;:=fksum/(kol);:=xsum/(kol);:=0;:=0;:=0;i:=1 to kol do begin:=v+(x[i]-xsum)*(fk[i]-fksum); //верхняя сумма:=w+sqr(x[i]-xsum); //нижняя сумма;:=v/w;:=fksum-b*xsum;:=a+b*m;;Tform1.f2(m:extended; var Xmax,Xmin,Ymax,Ymin:extended):extended;i:=1 to kol do begin[i]:=StrToFloat(SG1.Cells[0,i-1]);[i]:=StrToFloat(SG1.Cells[1,i-1]);;

{ФУНКЦИЯ!!!!}:=0;:=0;:=0;:=0;:=0;:=0;:=0;i:=1 to kol do begin:=xsum+x[i];:=xsumkv+sqr(x[i]);:=xsumkub+sqr(x[i])*x[i];:=xsum4+sqr(sqr(x[i]));:=fksum1+fk[i];:=fksum2+fk[i]*x[i];:=fksum3+fk[i]*sqr(x[i]);;[1,1]:=kol+1;[1,2]:=xsum;[1,3]:=xsumkv;[1,4]:=fksum1;[2,1]:=xsum;[2,2]:=xsumkv;[2,3]:=xsumkub;[2,4]:=fksum2;[3,1]:=xsumkv;[3,2]:=xsumkub;[3,3]:=xsum4;[3,4]:=fksum3;:=3;:=n+1;k:=1 to n do begin k1:=k+1;:=matrix[k,k];j:=k1 to n1 do matrix[k,j]:=matrix[k,j]/s;i:=k1 to n do begin r:=matrix[i,k];j:=k1 to n1 do matrix[i,j]:=matrix[i,j]-matrix[k,j]*r;;;i:=n downto 1 do begin s:=matrix[i,n1];j:=i+1 to n do s:=s-matrix[i,j]*t[j];[i]:=s;;:=t[1]+t[2]*m+t[3]*sqr(m);;TForm1.Button1Click(Sender: TObject);.Visible:=true;.Visible:=true;.Visible:=true;.Visible:=true;.rowcount:=kol;SG1 doi:=0 to RowCount do //очищаем еёj:=0 to ColCount do[j, i]:='';.height:=SG1.DefaultRowHeight*kol+10;;TForm1.Button2Click(Sender: TObject);x,y:real;,PY:longInt;:Integer;.Canvas.MoveTo(0,Image1.height div 2);.Canvas.LineTo(Image1.width,Image1.height div 2);.Canvas.MoveTo(Image1.width div 2,0);.Canvas.LineTo(Image1.width div 2,Image1.height);.Canvas.MoveTo(0,Image1.height);PX:=0 to Image1.Width do:=Xmin+PX*(Xmax-Xmin)/Image1.Width;:=F(x,Xmax,Xmin,Ymax,Ymin);o:=0 to SG1.RowCount-1 do begin(round(x)=round(StrToFloat(SG1.Cells[0,o]))) then begin:=summa2+Power((y-StrToFloat(SG1.Cells[1,o])),2);

// ShowMessage('Сумма квадратов отклонений для полинома 1 '+FloatToStr(summa2));

check2:=check2+1;check2=1 thencheck2=5 then check2:=0;;;:=round(Image1.Height-(y-Ymin)*Image1.height/(Ymax-Ymin));.Canvas.LineTo(PX,PY);

{image1.Canvas.Pixels[PX,PY]:=clRed; }

//Button2.Enabled:=FALSE;;('Сумма квадратов отклонений для полинома первой степени '+FloatToStr(summa2));.Text:=FloatToStr(summa2);;TForm1.Button3Click(Sender: TObject);y:extended;,PY:longInt;.Canvas.MoveTo(0,Image1.height div 2);.Canvas.LineTo(Image1.width,Image1.height div 2);.Canvas.MoveTo(Image1.width div 2,0);.Canvas.LineTo(Image1.width div 2,Image1.height);.Canvas.MoveTo(0,Image1.height);i:=1 to kol do begin[i]:=StrToFloat(SG1.Cells[0,i-1]);[i]:=StrToFloat(SG1.Cells[1,i-1]);;i:=1 to kol do begin:=round(Image1.width div 2+x[i]*Image1.width/(Xmax-Xmin));:=round(Image1.height div 2-fk[i]*Image1.width/(Xmax-Xmin));.Canvas.Ellipse(px-5, py-5, px+5, py+5);;;TForm1.Button4Click(Sender: TObject);x,y,m,b:real;:string;,PY:longInt;:Integer;

{image1.Canvas.MoveTo(0,Image1.height div 2);.Canvas.LineTo(Image1.width,Image1.height div 2);.Canvas.MoveTo(Image1.width div 2,0);.Canvas.LineTo(Image1.width div 2,Image1.height);.Canvas.MoveTo(0,Image1.height);}PX:=0 to Image1.Width do:=Xmin+PX*(Xmax-Xmin)/Image1.Width;:=F2(x,Xmax,Xmin,Ymax,Ymin);o:=0 to SG1.RowCount-1 do begin(round(x)=round(StrToFloat(SG1.Cells[0,o]))) then begin:=summa+Power((y-StrToFloat(SG1.Cells[1,o])),2);:=check+1;check=1 thencheck=5 then check:=0;;;:=round(Image1.Height-(y-Ymin)*Image1.height/(Ymax-Ymin));.Canvas.LineTo(PX,PY);

{image1.Canvas.Pixels[PX,PY]:=clRed; }

//Button4.Enabled:=FALSE;;('Сумма квадратов отклонений для полинома второй степени = '+FloatToStr(summa));.Text:=FloatToStr(summa);;TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);x1,y1:extended;,PY:longInt;.Visible:=True;:=Xmin+x*(Xmax-Xmin)/Image1.Width; //переводим из пикселей в наши координаты:=(Xmax-Xmin)*(Image1.Height div 2-y)/Image1.Width;rcnt<>0 then SG1.rowcount:=SG1.rowcount+1;.Cells[0,SG1.rowcount-1]:=FloatToStr(x1);.Cells[1,SG1.rowcount-1]:=FloatToStr(y1);.height:=SG1.DefaultRowHeight*SG1.rowcount+15;:=round(Image1.width div 2+x1*Image1.width/(Xmax-Xmin));:=round(Image1.height div 2-y1*Image1.width/(Xmax-Xmin));.Canvas.Ellipse(px-5, py-5, px+5, py+5);:=kol+1;:=1;;TForm1.FormCreate(Sender: TObject);.Canvas.MoveTo(0,Image1.height div 2);.Canvas.LineTo(Image1.width,Image1.height div 2);.Canvas.MoveTo(Image1.width div 2,0);.Canvas.LineTo(Image1.width div 2,Image1.height);.Canvas.MoveTo(0,Image1.height);

//SG1.Visible:=false;:=0;:=40;:=-40;:=40;:=-40;:=0;:=0;:=0;:=0;:=0;;TForm1.Button5Click(Sender: TObject);.visible:=true;.visible:=true;.visible:=true;.visible:=true;.Canvas.MoveTo(0,Image1.height div 2);.Canvas.LineTo(Image1.width,Image1.height div 2);.Canvas.MoveTo(Image1.width div 2,0);.Canvas.LineTo(Image1.width div 2,Image1.height);.Canvas.MoveTo(0,Image1.height);.Visible:=true;:=kol+1;.rowcount:=kol;.height:=SG1.DefaultRowHeight*kol+15;

//Button5.Enabled:=FALSE;;TForm1.Button6Click(Sender: TObject);.Canvas.FillRect(Rect(0,0,Width,Height));.Canvas.MoveTo(0,Image1.height div 2);.Canvas.LineTo(Image1.width,Image1.height div 2);.Canvas.MoveTo(Image1.width div 2,0);.Canvas.LineTo(Image1.width div 2,Image1.height);.Canvas.MoveTo(0,Image1.height);;

{procedure TForm1.Button8Click(Sender: TObject);.Text:=FloatToStr(xsumkv)

end;}.

3.8 Дифференцирование многочленами


 

 

3.8.1 Листинг

unit DifNiut;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Grids, ExtCtrls, jpeg;= class(TForm): TStringGrid;: TEdit;: TImage;: TButton;: TButton;: TMemo;: TLabel;: TEdit;: TButton;: TPanel;: TLabel;: TEdit;: TButton;: TLabel;: TButton;: TLabel;: TBevel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TImage;: TLabel;Button2Click(Sender: TObject);Button1Click(Sender: TObject);Button3Click(Sender: TObject);Button4Click(Sender: TObject);Image1Click(Sender: TObject);FormCreate(Sender: TObject);Button5Click(Sender: TObject);

{ Private declarations }

{ Public declarations };=array[1..100] of Extended;: TForm1;,Xmin,Ymax,Ymin,Fx:extended;,a,y:Mas;,j,n,k,kk: integer;,yy:real;

{$R *.dfm}TForm1.Button1Click(Sender: TObject);:=StrToInt(Edit1.text);.ColCount:=n;.Width:=(n)*67;.Visible:=true;;PH(x: Extended; a,y:Mas ; var Xmax,Xmin,Ymax,Ymin:extended):Extended;, Mng, Pn,Pr: extended;:=0;i:=1 to n do:=1;:=0;k:=1 to i doj:=1 to i dok<>j then:=1/(a[k]-a[j])*Fx;;:=Fx*y[k];:=Sum+Fx;:=1;;:=1;i>1 thenk:=1 to i-1 do:=Pr*(x-a[k]);:=sum*pr;:=Pn+Sum;;:=Pn;:=10;:=-10;:=10;:=-10;;TForm1.Button2Click(Sender: TObject);x,yy:real;,PY:integer;,Apx,Ypx: Integer;:=0;:=StrToInt(Edit1.text);:=10;:=-10;:=10;:=-10;j:=1 to n do[j]:=StrToFloat(StringGrid1.Cells[j-1,0]);[j]:=StrToFloat(StringGrid1.Cells[j-1,1]);j:=1 to n do:=trunc((a[j]-Xmin)*Image1.Width/(Xmax-Xmin));:=trunc(Image1.Height-(y[j]-Ymin)*Image1.height/(Ymax-Ymin));.Canvas.Pixels[Apx,Ypx]:=clBlack;;.Canvas.MoveTo(0,Image1.height div 2);.Canvas.LineTo(Image1.width,Image1.height div 2);.Canvas.MoveTo(Image1.width div 2,0);.Canvas.LineTo(Image1.width div 2,Image1.height);:=Xmin+0*(Xmax-Xmin)/Image1.Width;:=(PH(x,a,y,Xmax,Xmin,Ymax,Ymin));.Canvas.MoveTo(0,trunc(Image1.Height-(yy-Ymin)*Image1.height/(Ymax-Ymin)));PX:=0 to Image1.Width do:=Xmin+PX*(Xmax-Xmin)/Image1.Width;:=(PH(x,a,y,Xmax,Xmin,Ymax,Ymin));:=trunc(Image1.Height-(yy-Ymin)*Image1.height/(Ymax-Ymin));.Canvas.Pen.Color:=clRed;.Canvas.LineTo(PX,PY);;;Pr1(x,h:Extended):Extended;:extended;:=(PH(x+h,a,y,Xmax,Xmin,Ymax,Ymin)-PH(x,a,y,Xmax,Xmin,Ymax,Ymin))/h;:=pr;;Pr2(x,h:Extended):Extended;:extended;:=(Pr1(x+h,h)-Pr1(x,h))/h;:=pr;;Pr3(x,h:Extended):Extended;:extended;:=(Pr2(x+h,h)-Pr2(x,h))/h;:=pr;;Pr4(x,h:Extended):Extended;:extended;:=(Pr3(x+h,h)-Pr3(x,h))/h;:=pr;;TForm1.Button3Click(Sender: TObject);,Py: integer;:=StrToFloat(Edit2.text);:=(PH(x,a,y,Xmax,Xmin,Ymax,Ymin));.Lines.add('Значение функции в точке '+FloatToStr(x)+' = '+FloatToStr(yy));:=round(Image1.Width/2+x*Image1.width/(Xmax-Xmin));:=round(Image1.Height/2-yy*Image1.height/(Ymax-Ymin));.Canvas.Ellipse(px-5, py-5, px+5, py+5);;TForm1.Button4Click(Sender: TObject);,Sum:Extended;:integer;.text:='';:=0;:=1;i:=n-1 downto 2 do:=k*(i);p:=1 to n do:=1;i:=1 to n doi<>p then:=Pr/(a[p]-a[i]);;:=Sum+Pr*k*y[p];;.Memo1.Lines.add('Производная 1-ого порядка = '+FloatToStr(Pr1(StrToFloat(Edit4.text),0.1)));.Memo1.Lines.add('Производная 2-ого порядка = '+FloatToStr(Pr2(StrToFloat(Edit4.text),0.1)));.Memo1.Lines.add('Производная 3-ого порядка = '+FloatToStr(Pr3(StrToFloat(Edit4.text),0.1)));.Memo1.Lines.add('Производная 4-ого порядка = '+FloatToStr(Pr4(StrToFloat(Edit4.text),0.1)));.Memo1.Lines.add('Производная '+FloatToStr(n-1)+' ого порядка Многочлена степени :'+FloatToStr(n-1)+' ='+FloatToStr(sum));;TForm1.Image1Click(Sender: TObject);: TMouse;,py:integer;,xx: Extended;Edit1.Text='' then:=0:=StrToInt(Edit1.text);:=n+1;.ColCount:=n;.Width:=(n)*67;.Visible:=true;.text:=IntToStr(n);:=10;:=-10;:=10;:=-10;:=ScreenToClient(MyMouse.CursorPos).x-image1.left;:=(ScreenToClient(MyMouse.CursorPos).y-image1.top);

{ Memo1.Lines.add(inttostr(px) + 'Х ' + inttostr(py)); }:=(Ymax-(py*((Ymax-Ymin)/image1.height)));:=(Xmin+px*(Ymax-Ymin)/image1.width);.Cells[n-1,0]:=FloatToStrF(xx,ffFixed,4,2);.Cells[n-1,1]:=FloatToStrF(yy,ffFixed,4,2);.Lines.add('x: '+FloatToStrF(xx,ffFixed,4,2)+' y:'+FloatToStrF(yy,ffFixed,4,2));.Canvas.Ellipse(px-2,py-2,px+2,py+2);;TForm1.FormCreate(Sender: TObject);.Canvas.MoveTo(0,Image1.height div 2);.Canvas.LineTo(Image1.width,Image1.height div 2);.Canvas.MoveTo(Image1.width div 2,0);.Canvas.LineTo(Image1.width div 2,Image1.height);.Text:='';;TForm1.Button5Click(Sender: TObject);.text:='';i:=0 to StringGrid1.ColCount-1 do.Cols[i].Clear;.Picture:= nil;.Width:=StringGrid1.DefaultColWidth;:=0;.Canvas.MoveTo(0,Image1.height div 2);.Canvas.LineTo(Image1.width,Image1.height div 2);.Canvas.MoveTo(Image1.width div 2,0);.Canvas.LineTo(Image1.width div 2,Image1.height);.Clear;.ColCount:=0;;

end.

3.9 Метод Монте-Карло



 

3.9.1 Листинг

unit Unit1;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, jpeg, ExtCtrls;= class(TForm): TEdit;: TEdit;: TLabel;: TLabel;: TButton;: TEdit;: TLabel;: TEdit;: TEdit;: TLabel;: TLabel;: TMemo;: TLabel;: TBevel;: TLabel;: TImage;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TImage;: TLabel;Button1Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm1;

{$R *.dfm}TForm1.Button1Click(Sender: TObject);

var:integer; //Количество попавших точек

N,i:integer;,x,y,alfa,betta,S,a,Sigma,h:extended;:= StrToFloat(Edit2.text);:= StrToFloat(Edit3.text);:= StrToFloat(Edit4.text);:= StrToInt(Edit5.text); //Количество точек:= StrToFloat(Edit1.text);:= 1/(sqrt(2*3.14159265)*Sigma);:= (betta-alfa)*(1/(sqrt(2*3.14159265)*Sigma));:=0; Ver:=0;i:=1 to N do();:= alfa+(betta-alfa)*Random;:= Random*h;y <= (1/(sqrt(2*3.14159265)*Sigma))*exp((-1)*((x-a)*(x-a))/(2*Sigma*Sigma)) then:=Pop+1;;Pop <> 0 then:=((Pop/N)*S);.Lines.add(IntToStr(Pop)+' - Кол-во попавших точек '+FloatToStr(Ver)+' - Площадь под кривой');('Нет попавших точек');

end;.

3.10 Метод Рунге-Кутты


 

 

 


3.10.1 Листинг

unit UnitChInt11;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Grids, Math, ExtCtrls, TeeProcs, TeEngine, Chart,, jpeg;= class(TForm): TStringGrid;: TButton;: TLabel;: TEdit;: TLabel;: TLabel;: TEdit;: TLabel;: TEdit;: TEdit;: TLabel;: TEdit;: TChart;: TLineSeries;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TImage;: TLabel;: TBevel;: TStaticText;: TStaticText;: TStaticText;: TStaticText;: TStaticText;: TBevel;: TImage;Button1Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm1;

{$R *.dfm}f(x,y:double):double;:=x*x - y*y;;TForm1.Button1Click(Sender: TObject);i: integer;,Xb,Xe,h: double;,Xi: double;,Ki2,Ki3,Ki4,DeltaYi: double;,Yk: double;:=StrToFloat(Edit1.Text);:=StrToFloat(Edit4.Text); Xe:=StrToFloat(Edit3.Text);:=StrToFloat(Edit2.Text);.Cells[0,0]:='i'; SG1.Cells[1,0]:='Xi'; SG1.Cells[2,0]:='Xi+h/2';.Cells[3,0]:='Xi+1'; SG1.Cells[4,0]:='Yi';:=SG1.RowCount-2;.RowCount:=SG1.RowCount+1;:=Xb; Yi:=Y0;i=0 then begin.Cells[0,i+1]:=IntToStr(i); SG1.Cells[1,i+1]:=FloatToStr(Xb);.Cells[2,i+1]:=FloatToStr(Xb+h/2); SG1.Cells[3,i+1]:=FloatToStr(Xb+h);.Cells[4,i+1]:=FloatToStr(Y0);.AddXY(Xb,Y0,'',clRed);begin:=StrToFloat(SG1.Cells[1,i])+h; Yi:=StrToFloat(Edit6.Text);.Cells[0,i+1]:=IntToStr(i); SG1.Cells[1,i+1]:=FloatToStr(Xi);.Cells[2,i+1]:=FloatToStr(Xi+h/2); SG1.Cells[3,i+1]:=FloatToStr(Xi+h);.Cells[4,i+1]:=FloatToStr(Yi);;:=h*f(Xi,Yi);:=Xi+h/2; Yk:=Yi+Ki1/2;:=h*f(Xk,Yk);:=Yi+Ki2/2;:=h*f(Xk,Yk);:=Xi+h; Yk:=Yi+Ki3;:=h*f(Xk,Yk);:=(Ki1+2*Ki2+2*Ki3+Ki4)/6;:=Yi+DeltaYi;.Caption:='Y'+IntToStr(i); Edit6.Text:=FloatToStr(Yi);.AddXY(Xi,Yi,'',clRed);Xi=Xe then Button1.Enabled:=false;

end;.

 

3.11 Краевая задача


 

 

.11.1 Листинг

unit UnitKrZ11;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Grids, Math, ExtCtrls, TeeProcs, TeEngine, Chart,, jpeg, Menus;= class(TForm): TStringGrid;: TButton;: TEdit;: TLabel;: TLabel;: TLabel;: TEdit;: TChart;: TLineSeries;: TEdit;: TEdit;: TEdit;: TEdit;: TEdit;: TEdit;: TEdit;: TStringGrid;: TButton;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TImage;: TLabel;: TLabel;: TBevel;: TStaticText;: TStaticText;: TStaticText;: TStaticText;: TStaticText;: TStaticText;: TStaticText;: TStaticText;: TImage;bt2Click(Sender: TObject);bt1Click(Sender: TObject);

{ Private declarations }

{ Public declarations };max=50;vector=array[0..max] of double;,beta1,alfa2,beta2,c1,c2,h,x,y: double;,b,n,i,j: integer;,Bm,Cm,Dm,Pm,Qm,Xm: vector;: TForm1;

ShowMessage('Выбранный шаг не позволяет поделить заданный отрезок на четное колличество отрезков!');

h:=(b-a)/trunc((b-a)/h);:=round((b-a)/h);('Шаг изменнен на h = '+FloatToStr(h));;('Колличество отрезков n = '+IntToStr(n));.Text:=FloatToStr(h);.RowCount:=n+1; sg1.ColCount:=n+3;.RowCount:=n+2;.Cells[0,0]:='X'+IntToStr(0)+'='+IntToStr(a); sg1.Cells[0,n]:='X'+IntToStr(n)+'='+IntToStr(b);.Cells[1,0]:=FloatToStr(beta1*h-alfa1);.Cells[2,0]:=FloatToStr(alfa1);.Cells[n+2,0]:=FloatToStr(c1*h);.Cells[n,n]:=FloatToStr(-2*alfa2);.Cells[n+1,n]:=FloatToStr(beta2*(h*h)+alfa2);.Cells[n+2,n]:=FloatToStr(c2*(h*h));:=a+h;i:=1 to n-1 do begin.Cells[0,i]:='X'+IntToStr(i)+'='+FloatToStr(x);.Cells[n+2,i]:=FloatToStr(0);.Cells[i,i]:=FloatToStr(2);.Cells[i+1,i]:=FloatToStr((-4)-(x*h)-(2*h*h));.Cells[i+2,i]:=FloatToStr(2-(x*h));:=x+h;;i:=0 to sg1.ColCount-1 doj:=0 to sg1.RowCount-1 dosg1.Cells[i,j]='' then sg1.Cells[i,j]:='0';;TForm1.bt2Click(Sender: TObject); //Кнопка Решитьokr: double;.Visible:=true; ch1.Visible:=true;.Enabled:=false; i:=0 to n do begin //заполняем векторы исходными данными

Dm[i]:=StrToFloat(sg1.Cells[n+2,i]);:=i+1;j=1 then Am[i]:=0Am[i]:=StrToFloat(sg1.Cells[j-1,i]);[i]:=-(StrToFloat(sg1.Cells[j,i]));j=n+1 then Cm[i]:=0Cm[i]:=StrToFloat(sg1.Cells[j+1,i]);;i:=0 to sg1.RowCount-1 do.Rows[i].Clear;.FixedCols:=0; sg1.FixedRows:=1; sg1.ColCount:=8;.RowCount:=n+2;.Cells[0,0]:='i'; sg1.Cells[1,0]:='Ai'; sg1.Cells[2,0]:='Bi'; sg1.Cells[3,0]:='i';.Cells[4,0]:='Di'; sg1.Cells[5,0]:='Pi'; sg1.Cells[6,0]:='Qi'; sg1.Cells[7,0]:='Yi';

okr:=Cm[0]/Bm[0]; Pm[0]:=RoundTo(okr, -5); //подсчет прогоночных коэффициентов

okr:=-Dm[0]/Bm[0]; Qm[0]:=RoundTo(okr, -5);i:=1 to n do[i]:=Cm[i]/(Bm[i]-Am[i]*Pm[i-1]);:=Pm[i];[i]:=RoundTo(okr, -5);[i]:=(Am[i]*Qm[i-1]-Dm[i])/(Bm[i]-Am[i]*Pm[i-1]);:=Qm[i];[i]:=RoundTo(okr, -5);

end;[n]:=Qm[n];//вычисление корней

for i:=n-1 downto 0 do[i]:=Pm[i]*Xm[i+1]+Qm[i];:=Xm[i];[i]:=RoundTo(okr, -5);;i:=0 to n+1 do //печать таблицы.Cells[0,i+1]:=IntToStr(i);.Cells[1,i+1]:=FloatToStr(Am[i]);.Cells[2,i+1]:=FloatToStr(Bm[i]);.Cells[3,i+1]:=FloatToStr(Cm[i]);.Cells[4,i+1]:=FloatToStr(Dm[i]);.Cells[5,i+1]:=FloatToStr(Pm[i]);.Cells[6,i+1]:=FloatToStr(Qm[i]);.Cells[7,i+1]:=FloatToStr(Xm[i]);;:=a; Series1.Clear;.Cells[0,0]:='X'; sg2.Cells[1,0]:='Y';i:=0 to n+1 do begin //печать корней.Cells[0,i+1]:=FloatToStr(x);.Cells[1,i+1]:=FloatToStr(Xm[i]);.AddXY(x,Xm[i],'',clRed);:=x+h;;;.

 

4. Заключение


Поставленные задачи были успешно решены с помощью самостоятельно разработанного ПО. Конфликтов, сбоев, ошибок и противоречий в работе программ выявлено не было.

Похожие работы на - Численные методы решения математических задач

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!