LU decomposição
//Funções método LU 2.3
function [x, L, U]=Ludecomp(a, b, n, tol, x, er) global ('o', 's') //declarados vetores o e s de ordem n er=0 //er é o sinal de parada dos calculos [a, o, s, er]=Decompose(a,n,tol,o,s,er) if er -1 then //er=-1 significa um número próximo de zero [a, o, b, x]=Substitute(a,o,n,b,x) end L=[1, 0, 0; a(o(2),1), 1, 0; a(o(3),1), a(o(3),2), 1] U=[a(o(1),1),a(o(1),2),a(o(1),3);0,a(o(2),2),a(o(2),3);0,0,a(o(3),3)] //Os ajustes feitos no programa nessa parte calculam as matrizes 'L' e 'U' montadas de forma a ficarem com maior destaque. endfunction function [a, o, s, er]=Decompose(a, n, tol, o, s, er) for i=1:n o(i)=i //O vetor 'o' ajuda a manter as linhas mesmo com as alterações da função pivot s(i)=abs(a(i,1)) //O vetor 's' atua escolhendo o maior número da matriz como pivot for j=2:n if abs(a(i,j)) > s(i) then s(i) = abs(a(i,j)) end end end for k=1:(n-1) [a, o, s]=pivot(a, o, s, n, k) if abs(a(o(k),k)/s(o(k)))[x, l, u]=Ludecomp(A1, B1, 3, 0.01, 1, 0) u = 1. 1. 1. 0. - 1. 1. 0. 0. 1.
l = 1. 0. 0. 2. 1. 0. 3. 2. 1. x = 19. - 7. - 8. -->[L,U]=lu(A1) U = 3. 1. 6. 0. 0.6666667 - 1. 0. 0. - 0.5 L = 0.3333333 1. 0. 0.6666667 0.5 1. 1. 0. 0.
Como visto, as matrizes ‘l’ e ‘u’ são diferentes das (‘L’ e ‘U’) formadas pela função nativa do Scilab. Mas a multiplicação ‘L*U’
-->inv(U)*inv(L)*B1
ans = 19. - 7. - 8.
A matriz permutação altera a organização de matrizes e vetores, por exemplo, ela pode atuar permutando linhas e/ou