Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет Расчетка ВЫЧМАТ.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
3.19 Mб
Скачать

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

3.3.1 Листинг

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls,Math, jpeg;

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

pnl1: TPanel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Button1: TButton;

Edit1: TEdit;

pnl2: TPanel;

Label4: TLabel;

img1: TImage;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var x:real;

begin

Label1.Caption:='Результат Вычислений:';

x:=StrToFloat(Edit1.Text);

x:= x - ( ((Cos(x)/sin(x)) - 2*x) / ( (-1*(1/sqr(sin(x))) - 2 )) );

Edit1.Text:=FloatToStr(x);

end;

end.

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

A =

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

3.4.1 Листинг

unit Unitmv;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Grids, jpeg, ExtCtrls, Math;

type

TForm1 = class(TForm)

matrix: TStringGrid;

Button1: TButton;

Edit1: TEdit;

Button2: TButton;

Edit2: TEdit;

Label2: TLabel;

Label3: TLabel;

Memo1: TMemo;

Button3: TButton;

lbl7: TLabel;

bvl1: TBevel;

bvl2: TBevel;

lbl10: TLabel;

lbl1: TLabel;

lbl2: TLabel;

lbl3: TLabel;

lbl4: TLabel;

lbl5: TLabel;

lbl6: TLabel;

Image1: TImage;

lbl9: TLabel;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

uses Unit2;

var

e:extended;

n,i,j,i1,j1,l:integer;

a,pov,new,rez,povtr:array [1..20,1..20] of extended;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

var

i,j:integer;

begin

e:=StrToFloat(Edit2.text);

n:=StrToInt(Edit1.text);

matrix.RowCount:=n; //устанавливаем размерность матрицы

matrix.ColCount:=n;

with matrix do

for i:=0 to RowCount do //очищаем её

for j:=0 to ColCount do

Cells[j, i]:='';

matrix.width:=matrix.DefaultColWidth*n+20;

matrix.height:=matrix.DefaultRowHeight*n+20;

end;

procedure TForm1.Button2Click(Sender: TObject);

var sum,max,x,k:extended;

st:string;

begin

for i:=1 to n do

begin

for j:=1 to n do

begin

a[i,j]:=StrToFloat(matrix.Cells[j-1, i-1]);

end;

end;

repeat

k:=k+1;

sum:=0;

for i:=1 to n do

for j:=1 to n do

if i<>j then

sum:=sum+a[i,j]*a[i,j];

sum:=sqrt(sum);

max:=abs(a[1,2]);

i1:=1;

j1:=2;

for i:=1 to n do

for j:=1 to n do begin

pov[i,j]:=0;

if (i<>j) and (abs(A[i,j])>max) then

begin

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

i1:=i;

j1:=j;

end;

end;

if max=0 then

begin

for i:=1 to n do

Memo1.Lines.Add('Диагональный эл-т на позиции ['+IntToStr(i)+','+IntToStr(i)+']= '+FloatToStr(a[i,i]));

break;

end;

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

// showmessage(FloatToStr(a[i1,j1]));

x:=0.5*arctan(2*(a[i1,j1]/(a[i1,i1]-a[j1,j1])));

Memo1.Lines.Add('tg(2Phi)='+FloatToStr(tan(2*x)));

for i:=1 to n do

pov[i,i]:=1;

pov[i1,i1]:=cos(x);

pov[j1,j1]:=cos(x);

pov[i1,j1]:=-sin(x);

pov[j1,i1]:=sin(x);

for i:=1 to n do

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

for i:=1 to n do

for j:=1 to n do

begin

new[i,j]:= 0;

for l:= 1 to n do //умножаем транспонированную м-цу поворота на исходную

new[i,j]:= new[i,j] + povtr[i,l]*a[l,j];

end;

for i:=1 to n do

for j:=1 to n do

begin

rez[i,j]:= 0;

for l:= 1 to n do //то что получилось умножаем на м-цу поворота

rez[i,j]:= rez[i,j] + new[i,l]*pov[l,j];

end;

for i:=1 to n do

for j:=1 to n do begin

a[i,j]:=rez[i,j];

end;

Form2.memo1.Lines.add('Матрица после '+FloatToStr(k)+'-го преобразования');

for i:=1 to n do

begin

st:='';

for j:=1 to n do

st:=st+FloatToStrF(a[i,j],fffixed,3,2)+' ';

Form2.memo1.Lines.add(st);

end;

Form2.memo1.Lines.add('------------------');

until sum<=e;

for i:=1 to n do

Memo1.Lines.Add('Диагональный эл-т на позиции ['+IntToStr(i)+','+IntToStr(i)+']= '+FloatToStr(rez[i,i]));

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

Memo1.text:='';

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

Form2.Show;

end;

end.