Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Решение СНАУ методом Ньютона(Delphi)

15K
10 октября 2007 года
Фесс
14 / / 11.10.2006
Нужно решить систему нелинейных уравнений неявным методом Ньютона

sinh (x1 + 0,2x2 + tg (0,1x1x2)) = 0,8
sinh (0,6x1 − 0,1x2 + tg (0,2x1x2)) = 0,1
Код:
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.

Подскажите пожалуйста где у меня ошибка.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог