for i := 0 to Count - 1 do
for j := 0 to Count - 1 do
FData [i, j] := A[i, j + Count] / A[i, i];
(Дельфи) Приведение матрицы к диагональному виду
надо прогу для приведения матрицы к диагональному виду.
заранее благодарю
http://ru.wikipedia.org/wiki/%D0%94%D0%B8%D0%B0%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B0, то да. Есть такая прога. Вот это глянь - http://sources.codenet.ru/file/1595/TMatrix1.1.rar. Там нет метода получения диагональной матрицы, но можно сделать исправив одну строку кода в методе получения обратной матрицы. Метод Ret глянь.
В конце этого метода вот такой код
Если ты заменишь этот кусок на такой
то вместо обратной матрицы получишь как раз диагональную, полученную из исходной. Если будут вопросы, то пиши на e-mail. Он указан вверху исходника Matrixes.pas, или на icq 509550. Ну или тут.
Если ты имеешь ввиду вот это -
В конце этого метода вот такой код
Код:
Если ты заменишь этот кусок на такой
Код:
for i := 0 to Count - 1 do
for j := 0 to Count - 1 do
FData [i, j] := A[i, j];
for j := 0 to Count - 1 do
FData [i, j] := A[i, j];
то вместо обратной матрицы получишь как раз диагональную, полученную из исходной. Если будут вопросы, то пиши на e-mail. Он указан вверху исходника Matrixes.pas, или на icq 509550. Ну или тут.
Код:
program MOI_MAV;
uses crt;
var
i,j,k,l,n : integer;
m,z : real;
a:array[1..99,1..100]of real;
procedure Out;
begin
for i:=1 to n do
begin
for j:=1 to n+1 do write(a[i,j]:4:4,' ');
writeln;
end;
end;
begin
clrscr;
write('Razmer matrix N = ');readln(n);
writeln('Vvodite po strokam');
for i:=1 to n do
begin
writeln(i,'-ia stroka');
for j:=1 to n+1 do readln(a[i,j]);
end;
clrscr;
writeln('Nachal6naia matrix : ');out;
for i:=1 to n do
begin
z:=a[i,i];
for j:=i to n+1 do a[i,j]:=a[i,j]/z;
for l:=i+1 to n do
begin
z:=a[l,i];
for j:=i+1 to n+1 do a[l,j]:=a[l,j]-a[i,j]*z;
a[l,i]:=0;
end;
for l:=i-1 downto 1 do
begin
z:=a[l,i];
for j:=i+1 to n+1 do a[l,j]:=a[l,j]-a[i,j]*z;
a[l,i]:=0;
end;
end;
writeln;
writeln('Konechnaia matrix : ');out;
writeln;
writeln('Korni : ');
for i:=1 to n do
writeln ('x', i, '=', a[i,n+1]:3:3);
readkey;
end.
uses crt;
var
i,j,k,l,n : integer;
m,z : real;
a:array[1..99,1..100]of real;
procedure Out;
begin
for i:=1 to n do
begin
for j:=1 to n+1 do write(a[i,j]:4:4,' ');
writeln;
end;
end;
begin
clrscr;
write('Razmer matrix N = ');readln(n);
writeln('Vvodite po strokam');
for i:=1 to n do
begin
writeln(i,'-ia stroka');
for j:=1 to n+1 do readln(a[i,j]);
end;
clrscr;
writeln('Nachal6naia matrix : ');out;
for i:=1 to n do
begin
z:=a[i,i];
for j:=i to n+1 do a[i,j]:=a[i,j]/z;
for l:=i+1 to n do
begin
z:=a[l,i];
for j:=i+1 to n+1 do a[l,j]:=a[l,j]-a[i,j]*z;
a[l,i]:=0;
end;
for l:=i-1 downto 1 do
begin
z:=a[l,i];
for j:=i+1 to n+1 do a[l,j]:=a[l,j]-a[i,j]*z;
a[l,i]:=0;
end;
end;
writeln;
writeln('Konechnaia matrix : ');out;
writeln;
writeln('Korni : ');
for i:=1 to n do
writeln ('x', i, '=', a[i,n+1]:3:3);
readkey;
end.