|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Ilya Rogov 2:5030/1334.1024 22 Jan 2003 02:29:05 To : Juriy Tikhomirov Subject : решение системы уравнений -------------------------------------------------------------------------------- Давным-давно, 20 Jan 03 02:54, когда земля была ещё тёпленькая и по ней бегали мамонты, Juriy Tikhomirov и All говорили про решение системы уравнений: JT> никто не может рассказать о способе решения системы линейных уравнений JT> от Гаусса-Зейдера (или как-то так). что такое "метод Гаусса", я знаю, JT> меня интереснует именно вышеприведенная фигня. если есть экзампель JT> проги - это кул, но желательно пояснить. (пс: а если есть эффективная JT> реализация метода Гаусса - тоже давайте!:) JT> заранее большое фидошное спасибо :) Я знаю про метод Гаусса-Зейделя. Вот он: === Как писал великий Я в zeid.pas === program zeidel; uses crt; const n = 4; A : array [1..n,1..n] of real = ((50,2,3,4), (2,40,6,8), (3,6,90,2), (5,0,5,10)); err = 1.0e-07; B : array [1..4] of real = (1, 1, 1, 1); outname = 'zeid.out'; var i,j : integer; sum,zzz : real; out : text; flag : boolean; Al : array [1..n,1..n] of real; Be : array [1..n] of real; x : array [1..n] of real; xp : array [1..n] of real; Begin clrscr; assign(out,outname); rewrite(out); flag:=false; for i:= 1 to n do if (A[i,i]=0) then begin writeln('Error!!! Diagonal element is equal to zero !!'); close(out); halt; end; for i:=1 to n do for j:=1 to n do begin if i<>j then Al[i,j]:=-A[i,j]/A[i,i] else Al[i,j]:=0; end; for i:=1 to n do begin Be[i]:=B[i]/A[i,i]; x[i] :=B[i]; end; repeat begin for i:=1 to n do begin xp[i]:=x[i]; write(out,x[i]:12:9,' '); end; writeln(out); for i:=1 to n do begin sum:=0; for j:=1 to n do sum:=sum+Al[i,j]*x[j]; x[i]:=Be[i]+sum; end; zzz:=abs(x[1]-xp[1]); for i:=2 to n do if (abs(x[i]-xp[i])>zzz) then zzz:=abs(x[i]-xp[i]); if zzz<err then flag:=true; end; until flag; close(out); end. === (загробным голосом) ЭТО КОЕЦ !!! === Только вот писал давно, поэтому математики метода не помню, но помню, что прога рабочая, ибо была сдана. JT> pps: какие однозначные признаки есть для ситуаций "корней дофига" и JT> "корней нет"? Простой признак Ax=B, A - NxN матрица. if detA=0 then корней бесконечно много. if detA<>0 and B=0 then единственное решение - X=0 Во всех остальных случаях есть ровно N корней (возможно одинаковых). Ilya Rogov ... Бредить помогали вопли моих соседей --- * Origin: Когда Бог делал время - он сделал его достаточно (2:5030/1334.1024) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/207143e2df4e0.html, оценка из 5, голосов 10
|