Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marcusp

decomposição lu de matriz

Recommended Posts

olá alguem pode me ajudar pra fazer o calculo da decomposição LU de uma matriz em PASCALuma matriz 20x20 , fazendo pivotação , depois calcula-se LY=PB (aonde achasse os y ) e depois calcula-se UX=Y pra acharmos os x .nao estou conseguido fazer esse trabalho de jeito nehum.c alguem puder ajudar...ficarei grato!OBRIGADO PELA ATENÇÃO!

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara ñ entendi mta coisa desse treco q você pssou ai cara explica melhor oq seria esse lance de Pivotação!?explique melhor cara!?:D abraços e aguardo resposta!

Compartilhar este post


Link para o post
Compartilhar em outros sites

program calculo;

uses wincrt;

const

n = 2;

type

tpmatriz = array [1..n,1..n] of real;

tpvetor = array [1..n] of real;

var

ma,ml,mc : tpmatriz;

vb,vy,vx : tpvetor;

 

{##### SUBPROGRAMA #####}

 

PROCEDURE ler_matriz (var a: tpmatriz; var b: tpvetor);

var

i,j: integer;

begin

write ('Digite a matriz a: Digite a matriz b:');

writeln;

for i:=1 to n do

begin

for j:=1 to n do

begin

gotoxy (j*5,i*2);

readln (a[i,j]);

end;

end;

for i:=1 to n do

begin

gotoxy (50,i*2);

readln (b);

end;

 

end;

 

PROCEDURE copia (var a,c: tpmatriz);

var

i,j:integer;

begin

for i:=1 to n do

begin

for j:=1 to n do

begin

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

end;

end;

end;

 

 

PROCEDURE calculo_lu (var a,b : tpmatriz);

var

i,j,k : integer;

passa : boolean;

m : tpvetor;

begin

j:=1;

passa:=true;

repeat

for i:=1 to n do

begin

m:=0;

end;

if (a[j,j]=0) then

begin

writeln ('Pivo i zero, logo nco i possivel resolver.');

passa:=false;

end

else

begin

for i:= (j+1) to n do

begin

m:=(a[i,j]/a[j,j]);

end;

for i:=(j+1) to n do

begin

for k:= j to n do

begin

a[i,k]:=(a[i,k]-(m*a[j,k]));

end;

end;

for i:= 1 to n do

begin

b[i,j]:=m;

b[i,i]:=1;

end;

end;

j:=j+1;

until ((j=n) or (passa=false));

end;

 

 

PROCEDURE achar_y (var a,b : tpvetor; var c: tpmatriz);

var

i,j : integer;

soma: real;

begin

a[1]:=b[1];

for i:= 2 to n do

begin

soma:=0;

for j:= 1 to n do

begin

if (i>j) then

begin

soma:=soma+(c[i,j]*a[j]);

end;

end;

a:=b-soma;

end;

end;

 

PROCEDURE achar_x (var a,b: tpvetor; var c: tpmatriz);

var

i,j,k : integer;

soma: real;

begin

k:=n;

i:=n;

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

while (i>0) do

begin

soma:=0;

for j:= 1 to n do

begin

if (i<j) then

begin

soma:=soma+(c[i,j]*a[i+1]);

end;

end;

a:=(b-soma)/c[k,k];

k:=k-1;

i:=i-1;

end;

end;

 

PROCEDURE imprimir (a : tpmatriz);

var

i,j : integer;

begin

for i:=1 to n do

begin

for j:=1 to n do

begin

gotoxy (j*10,i*2);

write (a[i,j]:5:2);

end;

end;

end;

 

PROCEDURE imprimir_v (a : tpvetor);

var

i,j : integer;

begin

for i:=1 to n do

begin

gotoxy (10,i*2);

write (a:5:2);

end;

end;

 

 

{##### PROGRAMA PRINCIPAL #####}

begin

ler_matriz (ma,vb);

copia (ma,mc);

calculo_lu (ma,ml);

achar_y (vy,vb,ml);

achar_x (vx,vy,ma);

readkey;

clrscr;

imprimir (ml);

readkey;

clrscr;

imprimir (ma);

readkey;

clrscr;

imprimir_v (vy);

readkey;

clrscr;

imprimir_v (vx);

readkey;

clrscr;

end.

 

 

consegui issu...mas tem algumas coisas erradas...

 

alguem pode ajudar?

 

CONSEGUI ISSU ...MAS TEM ALGUMAS COISAS ERRADAS

ALGUEM PODE AJUDAR??

 

 

program calculo;

uses wincrt;

const

n = 2;

type

tpmatriz = array [1..n,1..n] of real;

tpvetor = array [1..n] of real;

var

ma,ml,mc : tpmatriz;

vb,vy,vx : tpvetor;

 

{##### SUBPROGRAMA #####}

 

PROCEDURE ler_matriz (var a: tpmatriz; var b: tpvetor);

var

i,j: integer;

begin

write ('Digite a matriz a: Digite a matriz b:');

writeln;

for i:=1 to n do

begin

for j:=1 to n do

begin

gotoxy (j*5,i*2);

readln (a[i,j]);

end;

end;

for i:=1 to n do

begin

gotoxy (50,i*2);

readln (b);

end;

 

end;

 

PROCEDURE copia (var a,c: tpmatriz);

var

i,j:integer;

begin

for i:=1 to n do

begin

for j:=1 to n do

begin

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

end;

end;

end;

 

 

PROCEDURE calculo_lu (var a,b : tpmatriz);

var

i,j,k : integer;

passa : boolean;

m : tpvetor;

begin

j:=1;

passa:=true;

repeat

for i:=1 to n do

begin

m:=0;

end;

if (a[j,j]=0) then

begin

writeln ('Pivo i zero, logo nco i possivel resolver.');

passa:=false;

end

else

begin

for i:= (j+1) to n do

begin

m:=(a[i,j]/a[j,j]);

end;

for i:=(j+1) to n do

begin

for k:= j to n do

begin

a[i,k]:=(a[i,k]-(m*a[j,k]));

end;

end;

for i:= 1 to n do

begin

b[i,j]:=m;

b[i,i]:=1;

end;

end;

j:=j+1;

until ((j=n) or (passa=false));

end;

 

 

PROCEDURE achar_y (var a,b : tpvetor; var c: tpmatriz);

var

i,j : integer;

soma: real;

begin

a[1]:=b[1];

for i:= 2 to n do

begin

soma:=0;

for j:= 1 to n do

begin

if (i>j) then

begin

soma:=soma+(c[i,j]*a[j]);

end;

end;

a:=b-soma;

end;

end;

 

PROCEDURE achar_x (var a,b: tpvetor; var c: tpmatriz);

var

i,j,k : integer;

soma: real;

begin

k:=n;

i:=n;

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

while (i>0) do

begin

soma:=0;

for j:= 1 to n do

begin

if (i<j) then

begin

soma:=soma+(c[i,j]*a[i+1]);

end;

end;

a:=(b-soma)/c[k,k];

k:=k-1;

i:=i-1;

end;

end;

 

PROCEDURE imprimir (a : tpmatriz);

var

i,j : integer;

begin

for i:=1 to n do

begin

for j:=1 to n do

begin

gotoxy (j*10,i*2);

write (a[i,j]:5:2);

end;

end;

end;

 

PROCEDURE imprimir_v (a : tpvetor);

var

i,j : integer;

begin

for i:=1 to n do

begin

gotoxy (10,i*2);

write (a:5:2);

end;

end;

 

 

{##### PROGRAMA PRINCIPAL #####}

begin

ler_matriz (ma,vb);

copia (ma,mc);

calculo_lu (ma,ml);

achar_y (vy,vb,ml);

achar_x (vx,vy,ma);

readkey;

clrscr;

imprimir (ml);

readkey;

clrscr;

imprimir (ma);

readkey;

clrscr;

imprimir_v (vy);

readkey;

clrscr;

imprimir_v (vx);

readkey;

clrscr;

end.

 

 

consegui issu...mas tem algumas coisas erradas...

 

alguem pode ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

antes de mais a identação ....pergunto me se alguem se deu ao trabalho de ler este ultimo tópico da maneira que se encontra !!!XD axo que não !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.