Естественные науки
метод Гаусса, мать его
при отсутствии компутера под рукой возникают сложности в практическом применении его использованиятаким образом, все сводится к многократным повторениям (умножения строки матрицы+операция сложения на ряд требующий изменений) и, надо сказать, повторения все бесплодны, и образуют замкнутый круг не достигая конечной цели "элементарных" преобразований. доходит до того, что меня ацки начинают раздражать онлайн калькуляторы, которые и рассчитаны для вычисления по методу Гаусса за считанные секунды. вот серьезно
Сынок, мы на ВычМате обходились калькулятором с четырьмя действиями. К зачету нужно было «провернуть» систему из 15 уравнений.
Бумага, ручка, калькулятор и мозги.
Бумага, ручка, калькулятор и мозги.
круг-то откуда? После каждого шага должен появиться столбец из нулей, когда все столбцы под диагональью нули - все. Где тут возможны круги? Чай не Зельделя считаешь.
Не нравится Гаусс - ну попробуй решить систему 5*5 методом Крамера. Намм в 9-м классе это на контрольной давали, считали на арифмометрах.
Не нравится Гаусс - ну попробуй решить систему 5*5 методом Крамера. Намм в 9-м классе это на контрольной давали, считали на арифмометрах.
доска с мелом удообна для этого метода
Следуйте алгоритму и всё получится.
unit Unit1; // Метод Гаусса
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
slau = array [0..15,0..15] of double;
line = array [0..15] of double;
TForm1 = class(TForm)
Button1: TButton; // если хотите, чтобы программа работала, не забудьте создать все необходимые объекты на форме :)
Roots: TStringGrid;
StringGrid1: TStringGrid;
Label1: TLabel;
Label2: TLabel;
StringGrid2: TStringGrid;
Label3: TLabel;
Label4: TLabel;
StringGrid3: TStringGrid;
StringGrid4: TStringGrid;
Label5: TLabel;
procedure Button1Click(Sender: TObject);
procedure change(step:integer);
procedure forth(step:integer);
procedure back();
private
{ Private declarations }
public
{ Public declarations }
end;
const n=4;
var
Form1: TForm1;
a, a0: slau;
b,b0,x : line;
implementation
{$R *.dfm}
procedure TForm1.change(step:integer);
var p,pp:integer;
pmax, dop: double;
begin
pp:=step;
pmax:=a[step,step];
for p:=(step+1) to n do // поиск наибольшего в кусочке матрицы,
if (a[p,step]>pmax) then // начинающемся с числа [step,step]
begin
pmax:=a[p,step];
pp:=p;
end;
for p:=step to n do // замена строк
begin
dop:=a[step,p];
a[step,p]:=a[pp,p];
a[pp,p]:=dop;
end;
dop:=b[step]; // замена элемента в столбце свободных членов
b[step]:=b[pp];
b[pp]:=dop;
end;
procedure TForm1.forth(step:integer); // прямой ход
var p,q:integer;
mm: double;
begin
for p:=(step+1) to n do
begin
mm:=a[p,step]/a[step,step];
b[p]:=b[p]-mm*b[step];
for q:=step to n do
a[p,q]:=a[p,q]-mm*a[step,q];
end;
end;
procedure TForm1.back(); // поиск корней (обратный ход)
var p,q :integer;
sum: double;
begin
for p:=n downto 0 do
begin
q:=p;
sum:=0;
while (q<n) do
begin
sum:=sum+a[p,q+1]*x[q+1];
q:=q+1;
end;
x[p]:=(b[p]-sum)/a[p,p];
Roots.Cells[p,0]:=FloatToStrF(x[p],ffGeneral,4,3);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var k,i,j:integer;
sum: double;
text: string;
begin
randomize;
for i:=0 to n do // заполнение массива
begin
for j:=0 to n do
begin
a[i,j]:=random(20);
a0[i,j]:=a[i,j]
end;
b[i]:=random(20);
b0[i]:=b[i];
end;
for i:=0 to n do // вывод первоначального массива
begin
for j:=0 to n do
begin
Str(a0[i,j]:5:2, text);
StringGrid3.Cells[j,i]:= text;
end;
Str(b0[i]:5:2, text);
StringGrid4.Cells[0,i]:=text;
end;
for k:=0 to (n-1) do // пошаговое решение
begin
change(k);
forth(k);
end;
for i:=0 to n do
begin
for j:=0 to n do
begin
Str(a[i,j]:5:2, text);
StringGrid1.Cells[j,i]:=text;
end;
Str(b[i]:5:2, text);
StringGrid2.Cells[0,i]:=text;
end;
back();
sum:=0; // проверка
for j:=0 to n do
sum:=sum+a0[0,j]*x[j];
if (abs(sum-b0[0])<0.001) then
begin
Label4.Visible:=true;
Label4.Font.Color:=clBlue;
Label4.Caption:=’Верное решение’;
end
else
begin
Label4.Visible:=true;
Label4.Font.Color:=clRed;
Label4.Caption:=’Неверное решение’;
end;
end;
end.
Удачи!
unit Unit1; // Метод Гаусса
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
slau = array [0..15,0..15] of double;
line = array [0..15] of double;
TForm1 = class(TForm)
Button1: TButton; // если хотите, чтобы программа работала, не забудьте создать все необходимые объекты на форме :)
Roots: TStringGrid;
StringGrid1: TStringGrid;
Label1: TLabel;
Label2: TLabel;
StringGrid2: TStringGrid;
Label3: TLabel;
Label4: TLabel;
StringGrid3: TStringGrid;
StringGrid4: TStringGrid;
Label5: TLabel;
procedure Button1Click(Sender: TObject);
procedure change(step:integer);
procedure forth(step:integer);
procedure back();
private
{ Private declarations }
public
{ Public declarations }
end;
const n=4;
var
Form1: TForm1;
a, a0: slau;
b,b0,x : line;
implementation
{$R *.dfm}
procedure TForm1.change(step:integer);
var p,pp:integer;
pmax, dop: double;
begin
pp:=step;
pmax:=a[step,step];
for p:=(step+1) to n do // поиск наибольшего в кусочке матрицы,
if (a[p,step]>pmax) then // начинающемся с числа [step,step]
begin
pmax:=a[p,step];
pp:=p;
end;
for p:=step to n do // замена строк
begin
dop:=a[step,p];
a[step,p]:=a[pp,p];
a[pp,p]:=dop;
end;
dop:=b[step]; // замена элемента в столбце свободных членов
b[step]:=b[pp];
b[pp]:=dop;
end;
procedure TForm1.forth(step:integer); // прямой ход
var p,q:integer;
mm: double;
begin
for p:=(step+1) to n do
begin
mm:=a[p,step]/a[step,step];
b[p]:=b[p]-mm*b[step];
for q:=step to n do
a[p,q]:=a[p,q]-mm*a[step,q];
end;
end;
procedure TForm1.back(); // поиск корней (обратный ход)
var p,q :integer;
sum: double;
begin
for p:=n downto 0 do
begin
q:=p;
sum:=0;
while (q<n) do
begin
sum:=sum+a[p,q+1]*x[q+1];
q:=q+1;
end;
x[p]:=(b[p]-sum)/a[p,p];
Roots.Cells[p,0]:=FloatToStrF(x[p],ffGeneral,4,3);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var k,i,j:integer;
sum: double;
text: string;
begin
randomize;
for i:=0 to n do // заполнение массива
begin
for j:=0 to n do
begin
a[i,j]:=random(20);
a0[i,j]:=a[i,j]
end;
b[i]:=random(20);
b0[i]:=b[i];
end;
for i:=0 to n do // вывод первоначального массива
begin
for j:=0 to n do
begin
Str(a0[i,j]:5:2, text);
StringGrid3.Cells[j,i]:= text;
end;
Str(b0[i]:5:2, text);
StringGrid4.Cells[0,i]:=text;
end;
for k:=0 to (n-1) do // пошаговое решение
begin
change(k);
forth(k);
end;
for i:=0 to n do
begin
for j:=0 to n do
begin
Str(a[i,j]:5:2, text);
StringGrid1.Cells[j,i]:=text;
end;
Str(b[i]:5:2, text);
StringGrid2.Cells[0,i]:=text;
end;
back();
sum:=0; // проверка
for j:=0 to n do
sum:=sum+a0[0,j]*x[j];
if (abs(sum-b0[0])<0.001) then
begin
Label4.Visible:=true;
Label4.Font.Color:=clBlue;
Label4.Caption:=’Верное решение’;
end
else
begin
Label4.Visible:=true;
Label4.Font.Color:=clRed;
Label4.Caption:=’Неверное решение’;
end;
end;
end.
Удачи!
Яна Шереметьева
уважаемый, жаль что ваш исходник на экзамене не применим
А карандашом на бумажке? А еще такая штука есть - арифмометр, вещь!!..
Алена Осипова
Нам в 9-м классе на контрольной давали систему 5*5 методом Крамера, считали на арифмометрах ВК1. Так что Гаусс потом был как подарок!
Похожие вопросы
- пмогите решить систему методом Гаусса
- Есть ли какая-то закономерность в линейном преобразовании матрицы методом Гаусса?
- Поведайте о Методе Гаусса
- почему Метод Гаусса решения матриц такой запутанный?
- Почему математик Гаусс решил, что полусферическую поверхность нельзя проецировать на привычную нам плоскость ?
- Нормальный закон распределения Гаусса
- Как проверили теорему Гаусса практически? Никак? В чём проблема ?
- Гаусс пушка. Какие законы на нее есть?
- Кто более выдающийся учёный-русский Лобачевский или немец Гаусс? Почему? Мне кажется Лобачевский, а Вам?
- Как вписать прямоугольник максимальной площади в кривую Гаусса (нормальное распределение) ?