ошибки в программе
не понятно, в чем ошибка 
мною написана прога, компилирую, ошибок нет, а вот при нажатии на кнопку, происходит ошибка и отладка идет бесконечно(((
PHP код:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, Grids, TAGraph, TASeries, Math;
const MaxDimension = 9;
type
{ TForm1 }
Vector = array[0..MaxDimension] of Double;
Matrix = array[0..MaxDimension,0..MaxDimension] of Double;
FunctionType = function(x: double ): double;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Chart1: TChart;
Chart1LineSeries1: TLineSeries;
Chart1LineSeries2: TLineSeries;
Chart1LineSeries3: TLineSeries;
ListBox1: TListBox;
ListBox2: TListBox;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
function g( x: double): double;
var
Form1: TForm1;
implementation
{$F+}
function g( x: double): double;
begin
g := exp(2*x) ;
end;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var betta, z, F, s,s1, x, y,h,t : double;
a,mas: Matrix;
b,mas2,FB,x1,resh,resh1,Fb1: Vector;
i,j,k,l,c,d,n:integer;
x3, x2, epsilon,alpha: double;
begin
// подсчет интеграла
betta:=0;
i := 0;
While (i <=9) do
begin
betta := betta + 0.01;
z:=0;
j:=0;
While (j <= 9) do
begin
z:= z + 0.01;
F := (-2*betta*z+sinH(2*betta*(z-1))+sinH(2*betta))/(4*betta);
mas[i, j] := F;
j := j + 1;
end;
i := i + 1;
end;
// определение готового решения
x := 0;
i := 0;
While (i <= 9)and (x<=1) do begin
x := x + 0.1;
y := exp(2*x);
mas2[i]:= y;
i := i + 1;
end;
// получение свободного члена
for i:=0 to MaxDimension do
begin
s:=0;
for j:=0 to MaxDimension do s := s + mas[i,j]*mas2[i];
Fb[i] := s;
end;
//Метод Гаусса для решения системы линейных уравнений
if (n > MaxDimension+1) then n := MaxDimension+1;
for i := 0 to n do
begin
for j:= i+1 to n+1 do
begin
mas [j,i]:=-mas[j,i]/mas[i,i];
for k := i+1 to n do
mas[j,k]:=mas [j,k]+mas[j,i]*mas[i,k];
Fb[j]:=Fb[j]+mas[j,i]*Fb[i]
end;
resh[n]:=Fb[n]/mas[n,n];
end;
//Обратный ход - нахождение корней
for i:=n-1 downto 0 do
begin
h:=Fb[i];
for j:=i+1 to n do h:=h-resh[j]*mas[i,j];
resh[i]:=h/mas[i,i]
end;
// применение регуляризации
a[i,j]:=mas[i,j];
for i:=0 to MaxDimension do
begin
alpha:= Power(10,-3);
a[i,i]:= a[i,i]-alpha;
s1:=0;
for j:=0 to MaxDimension do s1 := s1 + a[i,j]*mas2[i];
Fb1[i] := s1;
end;
//Метод Гаусса для решения системы линейных уравнений для регуляризации
if (n > MaxDimension) then n := MaxDimension;
for i := 0 to n-1 do
begin
for j:= i+1 to n do
begin
a [j,i]:=-a[j,i]/a[i,i];
for k := i+1 to n do
a[j,k]:=a[j,k]+a[j,i]*a[i,k];
Fb1[j]:=Fb1[j]+a[j,i]*Fb1[i]
end;
resh1[n]:=Fb1[n]/a[n,n];
end;
//Обратный ход - нахождение корней
for i:=n-1 downto 0 do
begin
h:=Fb1[i];
for j:=i+1 to n do h:=h-resh1[j]*a[i,j];
resh1[i]:=h/a[i,i]
end;
// вывод результата
for i:=0 to MaxDimension do
ListBox1.Items.Append( FloatToStr(Fb[i]));
for i:=0 to MaxDimension do
ListBox2.Items.Append( FloatToStr(resh1[i]));
x3 := 0;
x2 := 1;
epsilon := 0.001;
Chart1LineSeries1.Clear;
Chart1LineSeries2.Clear;
Chart1LineSeries3.Clear;
while x3 <= x2 do
begin
Chart1LineSeries2.Add(resh[i],'',clRed);
Chart1LineSeries1.AddXY(x3, g(x3));
Chart1LineSeries3.Add(resh1[i],'',clGreen);
x3 := x3 + epsilon;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Close
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
end;
initialization
{$I unit1.lrs}
end.
Последний раз редактировалось studentftf, 02.04.2011 в 22:41.
|