Equ a çõe s Lin e a r e s e m M a t La b
Fu n çõe s do M a t la b
Re solu çã o de Equ a çõe s Lin e a r e s
Com o det er m inar a solução de um sist em a de equações lineares AX = B ?
1º . I nt roduza a m at riz A
» A= [ 4 1 2 ; 0 1 0 ; 8 4 5 ] A =
4 1 2 0 1 0 8 4 5
2º . I nt roduza o vect or dos t em os independent es b
» b= [ 1 0 2 ]
'
← n ã o e squ e ce r qu e é t r a n spost ob = 1 0 2
3º . Resolva o sist em a de equações lineares Ax = b ( o Mat lab im plem ent a o m ét odo de elim inação de Gauss para resolver est e sist em a)
» x = A\ b x =
0.2500 0 0
4º . Verifique que x é a solução do sist em a Ax = b
» A* x ans = 1 0 2
fu n çã o LU
: fact oriza um a m at riz
( Est a função encont ram - se no Mat rix Funct ions, num erical linear algebra t oolbox)
[ L,U]
= LU( A)
– fact oriza a m at riz A= L* U, onde L – um a m at riz t riangular
inferior e U – um a m at riz t riangular superior.
Com o det erm inar a solução de um sist em a de equações lineares Ax = B usando o m ét odo de fact orização LU?
» A= [ 4 1 2 ; 0 1 0 ; 8 4 5 ]
A =
4 1 2 0 1 0 8 4 5
b = 1 0 2
» [ L,U] = lu( A) % fact orize a m at riz A usando o com ando lu
L =
0.5000 -1.0000 1.0000 0 1.0000 0 1.0000 0 0 U =
8.0000 4.0000 5.0000 0 1.0000 0 0 0 -0.5000
» L* U % verifique que A= L* U
ans =
4 1 2 0 1 0 8 4 5
» y= L\ b % resolva Ly= b
y = 2 0 0
» x= U\ y % resolva Ax= y
x = 0.2500 0 0
obtém-se a mesma solução do sistema
Utilizando o método de factorização LU com matriz de permutação:
A = [ 1 2 3; 2 4 7; 3 5 3] ;
A =
1 2 3 2 4 7 3 5 3
Factorizando a matriz A na forma LU sem matriz de permutação
» [ L,U] = lu( A)
L =
0.3333 0.5000 1.0000 0.6667 1.0000 0 1.0000 0 0 U =
3.0000 5.0000 3.0000 0 0.6667 5.0000 0 0 -0.5000
Verificando se L* U = A ans =
As linhas 1 e 3 estão trocadas
Factorizando a matriz A na forma LU com matriz de permutação
» [ L,U,P] = lu( A)
L =
1.0000 0 0 0.6667 1.0000 0 0.3333 0.5000 1.0000
U =
3.0000 5.0000 3.0000 0 0.6667 5.0000 0 0 -0.5000
P =
0 0 1 0 1 0 1 0 0
Obtemos a matriz de permutação que corresponde à permutação das linhas 1 e 3.
Resolver o sistema de equaçoes Ax= b usando a factorizaçao LU com a matriz de permutação P
1º : Aplicar a permutação P ao vector b
» b= [ 1, - 1, 0.5] '
b = 1.0000
-1.0000 0.5000
» pb= P* b
pb = 0.5000 -1.0000 1.0000
2º : Resolver o sistema de equações Ly= pb
» y= L\ pb
y =
0.5000 -1.3333 1.5000
3º : Resolver o sistema de equações Ux= y
»
x= U\ y
x =
fu n çã o N ORM
: det erm ina a norm a de um a m at riz ou um vect or
Para as m at rizes:
N ORM ( A,1 )= m ax( sum ( abs( ( X) ) ) -
det erm ina | | A| |1 - o m áxim o das som as por coluna dos valores absolut os
dos elem ent os de A N ORM ( A,in f) = m ax( sum ( abs( ( X') ) )
det erm ina | | A| |∞ - o m áxim o das som as por linha dos valores absolut os
dos elem ent os de A Para os vect ores:
NORM( X,1) = m ax( sum ( abs( ( X) ) ) . Det erm ina | | X| |1 - norm a absolut a
NORM( X,inf) = m ax( abs( X) ) . Det erm ina | | X| |∞ - norm a de m áxim o
NORM( X,- inf) = m in( abs( X) ) . Det erm ina | | X| |-∞ - norm a de m ínim o
For exem plo:
» A= [ 1 2 4 ; 4 - 1 1 ; 2 5 2 ]
A =
1 2 4 4 - 1 1 2 5 2
» n or m ( A,1 ) % o m áxim o das som as por coluna dos valores absolut os dos elem ent os de A
ans =
8
» n or m ( A,in f) % o m áxim o das som as por linha dos valores absolut os dos elem ent os de A
ans =
9
» b= [ 1 1 8 3 ] '
b =
11 8 3
» n or m ( b,1 ) % a som a dos valores absolut os dos elem ent os de b ans =
22
» n or m ( b,inf) % o m áxim o em valor absolut o dos elem ent os de b ans =
11
» n or m ( b,- in f) % o m ínim o em valor absolut o dos elem ent os de b ans =
3
fu n çã o CON D
: det erm ina o núm ero de condição de um a m at riz
cond( A) = | | A- 1| | | | A| |
For exem plo:
» A= [ 1 2 4 ; 4 - 1 1 ; 2 5 2 ] A =
1 2 4 4 - 1 1 2 5 2
» con d( A,in f)
ans =
4.17391304347826
Ex e r cícios e m M a t la b
1. Escreva em Mat lab a função
X= r e sidu os ( A,b,X 0 ,e ps,m a x it )
que im plem ent a
o m ét odo dos resíduos para m elhorar um a aproxim ação da solução do sist em a
de equações lineares
A
x=
b
dada um a solução inicial
X 0
, e t al que | | b
-
Ax
k| | <
eps. Alem disso um núm ero m áx im o de it erações,
m a x it ,
t am bém é dado, para
t erm inar o processo it erat ivo quando não se verificar | | b- Ax
k| | < eps.
function [X,error, k, Z]=residuos(A,b,X0,eps,maxit)
%--- % Esta função implementa o método dos residuos para melhorar uma % aproximação da solução de um sistema de equações lineares Ax=b % Para executar chamar:
% X = residuo(A,b,X0,eps,maxit) % [X,error,k, Z] = residuo(A,b,X0,eps,maxit) % Parâmetros de entrada
% A - a matriz do sistema
% b - o vector com os termos independentes % X0 - a solução que se pretende melhorar
% eps - a tolerancia para o criterio de paragem ||b-A*X||<eps % maxit - numero máximo de iterações
% Parâmetros de saída
% X - a aproximação da solução % error - a norma do residuo % k - o número de iterações
% Z - Matrix com todas as soluções (uma por linha)
%---
echo on; format long; X =X0;
Z =X0'; % inicializo Z (armazena a historia) for k=1:maxit;
r = b - A*X;
if (norm(r,inf)<eps) k=k-1;
break, end; e=A\r;
X=X+e;
Z = [Z;X']; % armazeno a historia end;
2. Escreva em Mat lab a função
M = m a j or r x ( A,b, de lt a )
que det erm ina um
m aj orant e do erro r elat ivo ( em norm a infinit a) da solução x do sist em a de
equações lineares Ax= b quando o vect or
b
dos t erm os independent es é
ligeiram ent e pert urbado segundo um
de lt a
dado.
function M=majorrx(A,b,delta);
%---% Esta função determina um majorante do erro relativo
%( em norma infinito)da solução x do sistema Ax=b
% quando o vector b dos termos independentes é ligeiramente % perturbado segundo um delta definido: ||b-b'||<= delta
% O majorante do erro relativo em norma pode ser calculado pela % fórmula: rx=||delta_x||/||x||<= cond(A)* (||delta_b||/||b||) % Para executar chamar:
% M = majorrx(A,b,delta) % Parâmetros de entrada
% A - a matriz A do sistema
% b - o vector com os termos independentes
% delta - o majorante para a perturbação do vector b % Parâmetros de saída
% M - o majorante do erro relativo da solução para o % sistema perturbado
%---echo on; format long;
cA=cond(A,inf) % número de condição da matriz (norma inf)
nb=norm(b,inf) % norma inf de b
3. Escreva em Mat lab a função
j a cobi( A,b, X0 , e ps, m a x )
que im plem ent a o
m ét odo it erat ivo de Jacobi para det erm inar a solução aproxim ada de
A
x=
b
,
dada um a solução inicial
X 0
t al que | | x
k-
x
k- 1| | < eps. Alem disso um núm ero
m áxim o de it erações,
m a x it ,
t am bém é dado, para t erm inar o processo
it erat ivo quando não se verificar | | x
k-
x
k- 1| | < eps.
function [X,deltaX,k,Z] = jacobi(A,b,X0,eps,maxit)
%---% Implementa o método iterativo de Jacobi para determinar uma solução % aproximada de Ax=b:
% X(k)(i)= (b(i)-A(i,1)*X(k-1)(1)-...-A(i,i-1)*X(k-1)(i-1)- % A(i,i+1)*X(k-1)(i+1)-...-A(n,n)*X(k-1)(n))/ Aii % Executar
% [X,deltaX,k] = jacobi(A,B,P,eps,maxit) % [X,deltaX,k,Z] = jacobi(A,B,P,eps,maxit) % Entrada
% A a matriz A do sistema
% b o vector dos termos independentes % X0 a solução inicial
% eps tolerância de convergência para critério de paragem % maxit número máximo de iterações para critério de paragem % Devolve
% X o vector com a aproximação da solução % error a norma do vector abs(X(k)-X(k-1)) % k o número de iterações
% Z matriz com todas as soluções (uma por linha)
%---n = le%---ngth(b);
Xant = X0; % armazena a solução anterior X(k-1)
X=X0; % inicializo X
Z = X0'; % inicializo Z
for k=1:maxit, % iterar até max veces
for i = 1:n, % para cada equação
X(i) = (b(i) - A(i,[1:i-1,i+1:n])*Xant([1:i-1,i+1:n]) ) / A(i,i); end
Z = [Z;X']; % armazeno a historia
deltaX = norm(X-Xant,inf); if (deltaX <eps) break, end
Xant = X;
4. Escreva em Mat lab a função
gse ide l( A,b, X0 , e ps, m a x )
que im plem ent a o
m ét odo it er at ivo de Gauss- Seidel para det erm inar a solução aproxim ada de
A
x=
b
, dada um a solução inicial
X 0
, e t al que | | x
k-
x
k- 1| | < eps. Alem disso um
núm ero m áxim o de it er ações,
m a x it ,
t am bém é dado, para t erm inar o processo
it erat ivo quando não se verificar | | x
k-
x
k- 1| | < eps.
function [X,deltaX, k, Z] = gseidel(A,b,X0,eps,maxit)
%---% Implementa o método iterativo de Gauss-Seidel para determinar uma solução aproximada de Ax=b
% X(k)(i)= (b(i)-A(i,1)*X(k)(1)-...-A(i,i-1)*X(k)(i-1)
% -A(j,j+1)*X(k-1)(j+1)-...-A(n,n)*X(k-1)(n))/ Aii % Executar
% [X, deltaX, k] = gseidel(A,B,P,delta,maxit) % [X, deltaX, k, Z] = dseidel(A,B,P,delta,maxit) % Entrada
% A a matriz A do sistema
% b o vector dos termos independentes % X0 a solução inicial
% eps tolerancia de convergencia do criterio de paragem % maxit número máximo de iterações
% Devolve
% X o vector com a aproximação da solução % deltaX a norma do vector abs(X(k)-X(k-1)) % k o número de iterações
% Z Matrix com todas as soluções (uma por linha)
%---n = le%---ngth(b);
Xant = X0; % armazena a solução anterior X(k-1) X = X0; % inicializo X
Z = X0'; % inicializo Z
for k=1:maxit, % iterar até max veces
for i = 1:n, % para cada equação
if i==1
X(i) =(b(1) - A(1,2:n)*Xant(2:n))/ A(i,i); elseif i==n
X(i) = (b(n) - A(n,1:n-1)*X(1:n-1) )/ A(i,i); else
X(i) = (b(j)-A(i,1:i-1)*X(1:i-1)-A(i,i+1:n)*Xant(i+1:n))/ A(i,i); end
end
Z = [Z;X']; % armazeno a historia
deltaX = norm(X-Xant,inf); if (deltaX < eps) break, end
Xant = X;
5. Part indo da aproxim ação inicial X0= [ 5/ 4,- 1/ 4] ' apr oxim e a solução do sist em a
2x1 + 0.5 x2= 2.5
x1 + 3 x2= 0.5
aplicando o m ét odo de Jacobi e o m ét odo de Gauss- Seidel com o núm ero de it erações suficient es por form a a que | | xk
-
x
k- 1| | < 0.5 x 10
- 1» ex5 A =
2.00000000000000 0.50000000000000 1.00000000000000 3.00000000000000 b =
2.50000000000000 0.50000000000000 X0 =
1.25000000000000 - 0.25000000000000
- - - Mét odo de Jacobi - - - I t eração x( 1) x( 2) - - -
1.00000000000000 1.25000000000000 - 0.25000000000000 2.00000000000000 1.31250000000000 - 0.25000000000000 3.00000000000000 1.31250000000000 - 0.27083333333333
- - -
A solução: x1= 1.3125 x2= - 0.27083333
% ---% Este programa partindo da aproximação inicial X0=[5/4,-1/4]
% aproxima a solução do sistema % 2x1 + 0.5 x2= 2.5
% x1 + 3 x2= 0.5
% aplicando o método de Jacobi e o método de Gauss-Seidel por forma a que % ||x(k) – x(k-1) || < 0.5 x 10-1
%
---A=[2 0.5; 1 3] % introduzir a matriz A
b=[2.5 0.5]' % introduzir o vector b
X0=[5/4,-1/4]' % introduzir a solução inicial
[X,dX,k,Z]=jacobi(A,b,X0,0.05,2); m=length(Z);
k=1:m; disp('');
disp('---Método de Jacobi ---'); disp(' Iteração x(1) x(2) ');
disp('---'); disp([k',Z])
disp('---'); disp(' ');
disp(['A solução: ','x1= ',num2str(Z(m,1),8),' x2= ',num2str(Z(m,2),8)]); [X,dX,k,Z]=gseidel(A,b,X0,0.05,2);
m=length(Z); k=1:m;
disp(' '); disp('---Método de Gauss-Seidel ---'); disp(' Iteração x(1) x(2) ');
disp('---'); disp([k',Z])
disp('---'); disp(' ');
- - - Mét odo de Gauss- Seidel - - - I t eração x( 1) x( 2)
- - -
1.00000000000000 1.25000000000000 - 0.25000000000000 2.00000000000000 1.31250000000000 - 0.27083333333333 3.00000000000000 1.31770833333333 - 0.27256944444444
- - -