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

МОСКОВСКИЙ АВИАЦИОННЫЙ ИНСТИТУТ

(национальный исследовательский университет)

Факультет №8 «Прикладная математика и физика»

Кафедра 806 «Вычислительная математика и программирование»

ОТЧЕТ

по

расчетно-графической работе

по дисциплине

«Вычислительная математика»

Выполнил:

Студент группы 03-325

Игнатенко А.В.

Преподаватель:

Кринецкий О.Е.

Москва 2012

ОГЛАВЛЕНИЕ

1. Постановка задачи 3

2. Формулировка заданий РГР 3

3. Выполнение расчетно-графической работы 4

3.1 Метод Гаусса 4

3.1.1 Листинг 5

3.2 Метод прогонки 7

3.2.1 Листинг 8

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

3.3.1 Листинг 11

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

3.4.1 Листинг 12

3.5. Интерполяционный многочлен 25

3.5.1 Интерполяционный многочлен Лагранжа 25

3.5.2 Интерполяционный многочлен Ньютона 28

3.6 Интерполяция сплайнами 31

3.6.1 Листинг 31

3.7 Метод наименьших квадратов 33

3.7.1 Листинг 34

3.8 Дифференцирование многочленами 37

3.8.1 Листинг 38

3.9 Метод Монте-Карло 41

3.9.1 Листинг 41

3.10 Метод Рунге-Кутты 43

3.10.1 Листинг 43

3.11 Краевая задача 44

3.11.1 Листинг 45

4. Заключение 90

1. Постановка задачи

Выполнить задания 1-11 расчетно-графической работы в соответствии с вариантом. При выполнении заданий разрешается пользоваться различным программным обеспечением, учитывая следующие требования:

1) Алгоритм работы и листинг используемого программного обеспечения должен быть понятен студенту. Студент должен предоставить необходимые разъяснения по требованию преподавателя, либо усовершенствовать/дополнить программу, если это необходимо;

2) ПО не должно использовать никаких сторонних программ для проведения математических вычислений, построения графиков и т.д. Весь функционал ПО должен быть заключен в его собственном коде;

3) При предоставлении собственноручно написанного ПО, студенту следует разместить на носителе, содержащем ПО, дистрибутив той среды программирования, в которой было написано ПО.

2. Формулировка заданий ргр

Расчетно-графическая работа состоит из нескольких заданий, для успешного решения которых необходимо продемонстрировать владение численными методами решения математических задач.

Формулировка всех заданий приведена ниже.

1) Методом Гаусса с точностью ε=0,01 решить СЛАУ;

2) Методом прогонки решить СЛАУ, ε=0,01;

3) Методом простой итерации (или любым другим) с ε=0,01 уточнить один из корней уравнения;

4) Методом вращения с ε=0,01 вычислить собственные значения и собственные вектора симметрической матрицы А;

5) Выписать интерполяционные многочлены Лагранжа и Ньютона для узловых значений {xi, yi}, заданных функцией y=f(x);

6) Для таблицы задания 5 выписать кубические сплайны дефекта 1 на каждом отрезке x∈[xi-1, xi], i=1..4;

7) Методом наименьших квадратов аппроксимировать линейным и квадратичным многочленом заданную таблицу.

8) Используя таблицу задания 5 найти значение 1-й и 2-й производной в заданной точке.

9)

10) Методом Рунге-Кутты с шагом h=0,1 и ε=0,01 решить задачу Коши.

11) Методом прогонки с шагом h=0,1 и 0(h2) решить краевую задачу для ОДУ.

3. Выполнение расчетно-графической работы

Все задания, представленные в РГР, были выполнены с использованием собственноручно разработанного ПО и в соответствии с требуемым вариантом. Описание метода, описание алгоритма, скриншоты работы и листинг прилагаются.

3.1 Метод Гаусса

В ходе работы программы были подсчитаны корни СЛАУ:

Определитель введенной матрицы:

3.1.1 Листинг

unit Gauss;

interface

uses

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

Dialogs, StdCtrls, Grids, ExtCtrls, jpeg;

type

TForm1 = class(TForm)

StringGrid1: TStringGrid;

Button1: TButton;

Edit1: TEdit;

Label3: TLabel;

Button2: TButton;

mmo1: TMemo;

Label8: TLabel;

lbl1: TLabel;

lbl2: TLabel;

lbl3: TLabel;

lbl4: TLabel;

lbl5: TLabel;

lbl6: TLabel;

lbl7: TLabel;

bvl1: TBevel;

bvl2: TBevel;

Label1: TStaticText;

Button3: TButton;

StringGrid2: TStringGrid;

Edit2: TEdit;

Button4: TButton;

lbl8: TLabel;

Edit3: TEdit;

Image1: TImage;

lbl9: TLabel;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

type

MAT=array [1..20,1..20] of extended;

Vec=array [1..20] of extended;

Tmass=array of Real;

Tmatrix=array of Tmass;

var

f: TextFile;

Form1: TForm1;

k,m,n,i,j,p,l: integer;

lol, znak: integer;

Mas1: Mat;

st: string;

a:Mat;

x,b:Vec;

S:real;

tempstr: string;

tempint: Integer;

tempfloat: Real;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

n:=StrToInt(Edit1.text);

if n>8 then begin showmessage('Слишком большой размер'); Exit; end;

StringGrid2.ColCount:=n;

StringGrid2.RowCount:=n;

st:='';

for i:=1 to n do

for j:=1 to n+1 do

StringGrid1.Cells[j-1,i-1]:='';

st:='';

StringGrid1.ColCount:=n+1;

StringGrid1.RowCount:=n;

StringGrid1.Height:=n*26+1;

StringGrid1.Width:=(n+1)*66+1;

StringGrid1.Visible:=true;

Button2.Enabled:=true;

mmo1.Enabled:=True;

end;

procedure TForm1.Button2Click(Sender: TObject);

Var i,j,k,l,k1,n1,prov: integer;

st:string;

a:Mat;

x,b:vec;

S,R:real;

f:TextFile;

Begin

n:=StrToInt(Edit1.text);

for i:=1 to n do

for j:=1 to n+1 do

if StringGrid1.Cells[j-1,i-1]='' then

begin

ShowMessage('Заполните все поля матрицы');

exit;

end;

for i:=0 to StringGrid2.RowCount do

for j:=0 to StringGrid2.ColCount do begin

StringGrid2.Cells[i,j]:=StringGrid1.Cells[i,j];

end;

for i:=1 to n do

for j:=1 to n+1 do

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

n1:=n+1;

for k:=1 to n do

Begin

k1:=k+1;

s:=A[k,k];

j:=k;

for i:=k1 to n do

begin

R:=a[i,k];

if abs(R)>abs(S)then

Begin

S:=R;

j:=I

end;

end;

if s=0.0 then

begin

ShowMessage('Определитель равен нулю!');

Exit;

end;

if j<>k then

for i:=k to n1 do

Begin

R:=A[k,i];

A[k,i]:=A[j,i];

A[j,i]:=R;

end;

for j:=k to n1 do {k}

A[k,j]:=A[k,j]/S;

for i:=k1 to n do

Begin

R:=A[i,k];

for j:=k to n1 do {k}

A[i,j]:=A[i,j]-A[k,j]*R;

end;

end;

if s<>0.0 then

begin

for i:=n downto 1 do

begin

s:=a[i,n1];

for j:=i+1 to n do

s:=s-a[i,j]*x[j];

x[i]:=s;

end;

mmo1.Text:='';

for i:=1 to n do

mmo1.lines.Add('X['+FloatToStr(i)+']= '+FloatToStr(x[i]));

Exit;

end

else

begin

ShowMessage('Det[A]=0');

Exit;

end;

Button2.Visible:=True;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

mmo1.text:='';

end;

procedure TForm1.Button3Click(Sender: TObject);

procedure Per(k,n:integer;var a:Tmatrix; var p:integer);

var z:Real;j,i:integer;

begin

z:=abs(a[k,k]);i:=k;p:=0;

for j:=k+1 to n-1 do

begin

if abs(a[j,k])>z then

begin

z:=abs(a[j,k]);i:=j;

p:=p+1;

end;

end;

if i>k then

for j:=k to n-1 do

begin

z:=a[i,j];

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

a[k,j]:=z;

end;

end;

function Znak(p:integer):integer;

begin

if p mod 2=0 then

result:=1 else result:=-1;

end;

procedure Opr(n:integer;var a:tmatrix;var det:real);

var k,i,j,p:integer;r:real;

begin

det:=1.0;

for k:=0 to n-1 do

begin

if a[k,k]=0 then Per(k,n,a,p);

det:=znak(p)*det*a[k,k];

for j:=k+1 to n-1 do

begin

r:=a[j,k]/a[k,k];

for i:=k to n-1 do

a[j,i]:=a[j,i]-r*a[k,i];

end;

end;

end;

var k,j,i:integer;

a:Tmatrix;

det:real;

begin

n:=strtoint(edit1.Text);

SetLength(a,n,n);

for k:=0 to n-1 do

for j:=0 to n-1 do

a[k,j]:=strtofloat(StringGrid2.Cells[j,k]);

Opr(n,a,det);

Edit2.Text:=FloatToStrF(det,ffFixed,5,0);

end;

procedure TForm1.Button4Click(Sender: TObject);

var lol: Integer;

begin

lol:=StrToInt(Edit3.Text);

Randomize;

for p:= 0 to StringGrid1.RowCount do

for l:= 0 to StringGrid1.ColCount do

begin

znak:=Random(2);

if znak=1 then znak:=-1 else znak:=1;

tempint:=Random(100);

tempstr:=IntToStr(tempint);

tempfloat:=StrToFloat(tempstr);

StringGrid1.Cells[p,l]:=FloatToStr(znak*(Random(lol+1)+tempfloat*0.01));

end;

end;

end.