
- •1. Постановка задачи
- •2. Формулировка заданий ргр
- •3. Выполнение расчетно-графической работы
- •3.1 Метод Гаусса
- •3.1.1 Листинг
- •3.2 Метод прогонки
- •3.2.1 Листинг
- •3.3 Нелинейное уравнение
- •3.3.1 Листинг
- •3.4 Метод вращения Якоби
- •3.4.1 Листинг
- •3.5. Интерполяционный многочлен
- •3.5.1 Интерполяционный многочлен Лагранжа
- •3.5.1.1 Листинг
- •3.5.2 Интерполяционный многочлен Ньютона
- •3.5.2.1 Листинг
- •3.6 Интерполяция сплайнами
- •3.6.1 Листинг
- •3.7 Метод наименьших квадратов
- •3.7.1 Листинг
- •3.8 Дифференцирование многочленами
- •3.8.1 Листинг
- •3.9 Метод Монте-Карло
- •3.9.1 Листинг
- •3.10 Метод Рунге-Кутты
- •3.10.1 Листинг
- •3.11 Краевая задача
- •3.11.1 Листинг
- •4. Заключение
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.