80 likes | 222 Views
FATORAÇÃO LU. FATORAÇÃO LU - CÓDIGO. program LU; INICIO DO PROGRAMA {$APPTYPE CONSOLE} uses SysUtils ; Var VARIÁVEIS DO PROGRAMA NUMEROS INTEIROS E REAIS N,I,J,K,Linha,TROCAINT : integer ; M,PIVO,TROCA,SOMA : real;
E N D
FATORAÇÃO LU - CÓDIGO program LU; INICIO DO PROGRAMA {$APPTYPE CONSOLE} uses SysUtils; Var VARIÁVEIS DO PROGRAMA NUMEROS INTEIROS E REAIS N,I,J,K,Linha,TROCAINT : integer; M,PIVO,TROCA,SOMA : real; A,AInicial : array [1..50,1..50] of real; B,BInicial,Y,RAIZES : array [1..50] of real; ORDEM : array [1..50] ofinteger; OUTRA : string[3]; const UMReal = 1.00; TOL = 0.01;
FATORAÇÃO LU - CÓDIGO begin //clrscr; LIMPA A TELA writeln('Resolucao de sistemas lineares por Fatoracao LU'); repeatREPETE AS INSTRUCÕES writeln(' Forneca o numero de equacoes , tal que 0 < n < 51 '); readln(N) until (N > 0) and (N < 51); ATÉ QUE ESTAS CONDIÇÕES SEJAM SATISFEITAS writeln(' Forneca a matriz a ser fatorada (linha a linha)'); for I := 1 to N do begin for J := 1 to N do read(A[I,J]); ORDEM[I] := I ;writeln(' ') end; AInicial := A; writeln('Resolucao de sistemas lineares pela Fatoracao LU'); writeln(' Matriz fornecida ');
FATORAÇÃO LU - CÓDIGO for I := 1 to N do INICIO DO LAÇO begin for J := 1 to N do write(AInicial[I,J]:6:2,'X',J); writeln(' ') end; I := 1; repeat PIVO := abs(A[I,I]); Linha := I; for J := I+1 to N do begin ifabs(A[J,I]) > PIVO then begin PIVO := abs(A[J,I]); Linha := J end; end; if Linha <> I thenbegin for J := 1 to N do begin //Troca os coeficientes de linhas TROCA := A[LINHA,J]; A[LINHA,J] := A[I,J]; A[I,J] := TROCA; end;
FATORAÇÃO LU - CÓDIGO //reorganiza a numeraçao das linhas TROCAINT := ORDEM[Linha]; ORDEM[Linha] := ORDEM[I]; ORDEM[I] := TROCAINT end; if PIVO > TOL thenbegin for J := I+1 to N do begin M := A[J,I]/A[I,I]; for K := I+1 to N do A[J,K] := A[J,K] - M * A[I,K]; A[J,I] := M end; end; inc(I); until (PIVo <= TOL) or (I = N); if PIVO > TOL thenbegin { Executa Quando PIVO > TOL } writeln('Matrizes L e U'); for I := 1 to N do begin { Impressao da Matriz L } for K := 2 to I do write(A[I,K-1]:6:2); write(UMREAL:6:2); writeln(' ');end; { Fim da Impressao da Matriz L } writeln(' ');
FATORAÇÃO LU - CÓDIGO for I := 1 to N do begin { Impressao da Matriz U } for K := 2 to I do write(' '); for J := I to N do write(A[I,J]:6:2); writeln(' ') end; { Fim da Impressao da Matriz U } end; { Fim da Execucao de Quando PIVO > TOL } if (PIVO <= TOL) or (abs(A[N,N]) <= TOL) thenwriteln('Matriz Singular') elsebegin repeat writeln(' Forneca o Vetor B '); for I := 1 to N do read(BInicial[I]); for I := 1 to N do B[I] := BInicial[ORDEM[I]]; writeln(' Vetor B na Ordem Inicial'); for I := 1 to N do write(BInicial[I]:6:2,' '); writeln(' '); writeln(' Vetor B Reordenado'); for I := 1 to N do write(B[I]:6:2,' '); writeln(' ');
FATORAÇÃO LU - CÓDIGO for I := 1 to N do begin SOMA := 0.0; for J := 1 to I-1 do SOMA := SOMA + A[I,J] * Y[J]; Y[I] := B[I] - SOMA end; RAIZES[N] := Y[N] / A[N,N]; for I := N-1 downto 1 do begin SOMA := 0.0; for J := I + 1 to N do SOMA := SOMA + A[I,J]*RAIZES[J]; RAIZES[I] := (Y[I] - SOMA) / A[I,I] end;
FATORAÇÃO LU - CÓDIGO writeln('Raizes Calculadas'); for J := 1 to N do write('X',J,' = ',RAIZES[J]:6:2,' '); writeln(' '); writeln('Tecle SIM se Deseja Apresentar Outro Vetor B'); readln; read(OUTRA); until OUTRA <> 'SIM'; end; end.