Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Решение системы Ах=в и определитель А 
:(
    Опции темы
Annaz111
Дата 22.2.2010, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 22.2.2010

Репутация: нет
Всего: нет



Помогите найти ошибку в программе,
задача состоит в нахождение решения системы Ах=в (где А-матрица 4 на 4) методом Гаусса,+  подсчет невязки е=Ах-в и + нахождение определителя матрицы А. 
У меня возникли проблемы с вычислением определителя...По идее после приведения к треуг.виду det=произведению элементов диагонали, но у меня почему-то он "не вычисляется"(а точнее он =0, что не верно)
Код

Uses CRT;
Const

maxn = 4;

Type

Data = Real;

Matrix = Array[1..maxn, 1..maxn] of Data;

Vector = Array[1..maxn] of Data;

{ vvedenie rasshirennoy matricy }

Procedure ReadSystem(n: Integer; var a: Matrix; var b: Vector);

Var

i, j, r: Integer;

Begin

r := WhereY;

GotoXY(2, r);

Write('A');

For i := 1 to n do begin

GotoXY(i*6+2, r);

Write(i);

GotoXY(1, r+i+1);

Write(i:2);

end;

GotoXY((n+1)*6+2, r);

Write('b');

For i := 1 to n do begin

For j := 1 to n do begin

GotoXY(j * 6 + 2, r + i + 1);

Read(a[i, j]);

end;

GotoXY((n + 1) * 6 + 2, r + i + 1);

Read(b[i]);

end;

End;





{ Metod Gaussa }

Function Gauss(n: Integer; a: Matrix; b: Vector; var x:Vector): Boolean;

Var

t,d: real;
i, j, k,p,z,f, l: Integer;

q, m: Data;

Begin
p:=0;z:=1;d:=1;
For k := 1 to n - 1 do begin

{ poisk stroku s max elementon v k-om stoldce}

l := 0;

m := 0;

For i := k to n do

If Abs(a[i, k]) > m then begin

m := Abs(a[i, k]);

l := i;

end;

{ я }

If l = 0 then begin

Gauss := false;

Exit;

end;

{ menyaem stroki}

If l <> k then begin

For j := 1 to n do begin

t := a[k, j];

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

a[l, j] := t;

end; z:=-z;

t := b[k];

b[k] := b[l];

b[l] := t;

end;

{ preobrazuem matricu }

For i := k + 1 to n do begin

q := a[i, k] / a[k, k];

For j := 1 to n do

If j = k then

a[i, j] := 0

else

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

b[i] := b[i] - q * b[k];
end;
end;


{ reshenie }

x[n] := b[n] / a[n, n];

For i := n - 1 downto 1 do begin

t := 0;

For j := 1 to n-i do

t := t + a[i, i + j] * x[i + j];

x[i] := (1 / a[i, i]) * (b[i] - t);


end;
{determinant}
 for i:=1 to n do d:=d*a[i,i];
 d:=d*z;


Gauss := true;

End;


Var
d:real;
n, i,j,k: Integer;

a: Matrix ;

b, x,e: Vector;



Begin
clrscr;

Writeln('Programma resheniy po metodu Gaussa');

Writeln;

Writeln('vvedite porydok matricy');

Repeat

Write('>');

Read(n);

Until (n > 0) and (n <= maxn);

Writeln;

Writeln('vvedite rashirennuy matricy');

ReadSystem(n, a, b);

Writeln;

If Gauss(n, a, b, x) then begin

Writeln('Rezultat'); write('x=');
for i:=1 to n do
Write( x[i]:3:12,' ');
writeln; write('e='); for i:=1 to n do
e[i]:=a[i,1]*x[1]+a[i,2]*x[2]+a[i,3]*x[3]+a[i,4]*x[4]-b[i];

for i:=1 to n do
write (e[i]:3:12,' '); writeln;

end

else

Writeln('nelzy reshit');

Writeln;

 writeln('det=',d);


{Writeln('det=',det:10:2); }
End.

PM MAIL   Вверх
ФедосеевПавел
Дата 22.2.2010, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 2
Всего: 10



Определитель ты вычисляешь в процедуре Gauss, а на экран выводишь в основной программе. Но в основную программу вычисленное значение никак не передаёшь.
Кроме того, то что ты вычисляешь не определитель матрицы A, а определитель другой матрицы, полученной из A.
Sorry, это я глупость сморозил.

Это сообщение отредактировал(а) ФедосеевПавел - 23.2.2010, 08:16
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0382 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.