unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Math;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit6: TEdit;
Edit7: TEdit;
Label6: TLabel;
Label7: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
nw = array[1..2,1..2] of real;
vek = array[1..2] of real;
var
Form1: TForm1;
p,x,x1,f:vek;
Af:nw;
i:integer;
implementation
procedure MatrXvek(a:nw;b:vek);
begin
p[1]:=-a[1,1]*b[1]+a[1,2]*b[2];
p[2]:=-a[2,1]*b[1]+a[2,2]*b[2];
end;
procedure VekXvek(a,b:vek);
begin
x[1]:=a[1]+b[1];
x[2]:=a[2]+b[2];
end;
procedure Fx;
begin
{if (x[1] <0) or (x[2]<0) then
begin
if x[1]<0 then x[1]:=-x[1];
if x[2]<0 then x[2]:=-x[2];
end;}
f[1]:={round}(sinh(x[1]+0.2*x[2]+(sin(0.1*x[1]*x[2])/cos(0.1*x[1]*x[2])))-0.8);
f[2]:={round}(sinh(0.6*x[1]-0.1*x[2]+(sin(0.2*x[1]*x[2])/cos(0.2*x[1]*x[2])))-0.1);
end;
procedure Matr;
var a11,a12,a21,a22,c:real;
begin
a11:=cosh(x[1]+0.2*x[2]+(cos(0.1*x[1]*x[2])/sin(0.1*x[1]*x[2])))*1/cos(0.1*x[1]*x[2])*0.1;
a12:=cosh(x[1]+0.2*x[2]+(cos(0.1*x[1]*x[2])/sin(0.1*x[1]*x[2])))*0.2*1/cos(0.1*x[1]*x[2]);
a21:=cosh(0.6*x[1]-0.1*x[2]+(cos(0.2*x[1]*x[2])/sin(0.2*x[1]*x[2])))*0.6*1/cos(0.2*x[1]*x[2])*0.1*0.2;
a22:=cosh(0.6*x[1]-0.1*x[2]+(cos(0.2*x[1]*x[2])/sin(0.2*x[1]*x[2])))*1/cos(0.2*x[1]*x[2])*(-0.1);
c:=a11*a22-a12*a21;
if c<>0 then begin
Af[1,1]:=a22/c;
Af[1,2]:=a21/c;
Af[2,1]:=a12/c;
Af[2,2]:=a11/c;
end;
end;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
x[1]:=strtofloat(edit4.Text);
x[2]:=strtofloat(edit5.Text);
i:=0;
Fx;
{while (abs(f[1])>0.001) or (abs(f[2])>0.001) do}
while (abs(x[1]-x1[1])>0.001) or (abs(x[2]-x1[2])>0.001) do
begin
matr;
MatrXvek(Af,f);
x1:=x;
VekXvek(x,p);
inc(i);
Fx;
end;
edit1.Text:=floattostr(x[1]);
edit2.Text:=floattostr(x[2]);
edit3.Text:=floattostr(i);
edit6.Text:=floattostr(f[1]);
edit7.Text:=floattostr(f[2]);
end;
end.
Решение СНАУ методом Ньютона(Delphi)
sinh (x1 + 0,2x2 + tg (0,1x1x2)) = 0,8
sinh (0,6x1 − 0,1x2 + tg (0,2x1x2)) = 0,1
Код:
Подскажите пожалуйста где у меня ошибка.