Anda di halaman 1dari 8

Mtodos Numricos e Estatsticos Exerccios para o Matlab

Departamento de Matemtica.
Universidade de Aveiro
1
Equaes Lineares em MatLab


1. Escreva um programa em Matlab para resolver o sistema de equaes da Folha Prtica 5,
exerccio 1

2. Escreva um programa em Matlab para resolver o sistema de equaes da Folha Prtica 5,
exerccio 1, usando o mtodo de factorizao LU
Nota: utilizar a funo LU do Matlab

3. Escreva em Matlab a funo X=residuo (A,b,X0,n) que implementa o mtodo
dos resduos para melhorar uma aproximao da soluo do sistema de
equaes lineares Ax=b. O parmetro n indica o nmero mximo de iteraes.

4. Escreva um programa em Matlab para resolver o exerccio 2 da Folha Prtica 5 utilizando
o mtodo dos resduos
Nota: utilizar a funo residuo do exerccio 3

5. Escreva em Matlab a funo M=majorrx(A,b,delta) que determina um
majorante do erro relativo (em norma) da soluo X do sistema de equaes
lineares AX=b quando o vector b dos termos independentes ligeiramente
perturbado segundo um delta dado.

6. Escreva um programa em Matlab para resolver o exerccio 3 da Folha Prtica 5 para
determinar um majorante do erro relativo (em norma) quando o termo independente b
ligeiramente perturbado.
Nota: utilizar a funo majorrx do exerccio 5

7. Escreva em Matlab a funo jacobi(A,b, X0, eps, max) que implementa o
mtodo iterativo de Jacobi para determinar a soluo aproximada de Ax=b,
dada uma soluo inicial X0, e tal que ||x
k
-

x
k-1
|| < eps. Alm disso um
nmero max de iteraes tambm dado, para terminar o processo iterativo
quando no se verificar ||x
k
-

x
k-1
|| < eps.

8. Escreva em Matlab a funo gseidel(A,b, X0, eps, max) que implementa o
mtodo iterativo de Gauss-Seidel para determinar a soluo aproximada de
Ax=b, dada uma soluo inicial X0, e tal que ||x
k
-

x
k-1
|| < eps. Alm disso um
nmero max de iteraes tambm dado, para terminar o processo iterativo
quando no se verificar ||x
k
-

x
k-1
|| < eps.

9. Partindo da aproximao inicial X0=[5/4,-1/4]' aproxime a soluo do sistema

2x
1
+ 0.5 x
2
= 2.5
x
1
+ 3 x
2
= 0.5

aplicando o mtodo de Jacobi e o mtodo de Gauss-Seidel com o nmero de iteraes
suficientes por forma a que ||x
k
-

x
k-1
|| < 0.5 x 10
-1
Nota: utilizar a funo jacobi do exerccio 7 e gseidel do exerccio 8






Mtodos Numricos e Estatsticos Exerccios para o Matlab

Departamento de Matemtica.
Universidade de Aveiro
2

Notas sobre as funes do Matlab:

Resoluo de Equaes Lineares

! Como determinar a soluo de um sistema de equaes lineares AX = B ?

A=[4 1 2 % introduza a matriz A
0 1 0
8 4 5]
A =
4 1 2
0 1 0
8 4 5

b=[1 % introduza o vector b
0
2]
b =
1
0
2
X=A\b % resolve o sistema de equaes lineares AX = B.
X =

0.2500
0
0
A*X % verifique que X a soluo do sistema
ans =
1
0
2

! funo LU: factoriza uma matriz
(Esta funo encontram-se no Matrix Functions, numerical linear algebra toolbox)

[L,U]=LU(A) factoriza a matriz A=L*U, onde L uma matriz triangular
inferior e U uma matriz triangular superior.

Como determinar a soluo de um sistema de equaes lineares AX = B usando o
mtodo de factorizao LU?

A=[4 1 2 %introduza a matriz A
0 1 0
8 4 5]
A =
4 1 2
0 1 0
8 4 5

b=[1 % introduza o vector b
0
2]
b =
1
0
2
[L,U]=lu(A) % factorize a matriz A
L =
0.5000 -1.0000 1.0000
0 1.0000 0
Mtodos Numricos e Estatsticos Exerccios para o Matlab

Departamento de Matemtica.
Universidade de Aveiro
3
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
obtm-se a mesma soluo do sistema


! funo NORM: determina a norma de uma matriz ou um vector

Para as matrizes:
NORM(A,1)= max(sum(abs((X)))-
determina ||A||
1
- o mximo das somas por coluna dos valores absolutos
dos elementos de A
NORM(A,inf) =max(sum(abs((X')))
determina ||A||

- o mximo das somas por linha dos valores absolutos
dos elementos de A
Para os vectores:
NORM(X,1) = max(sum(abs((X))). Determina ||X||
1
- norma absoluta
NORM(X,inf) = max(abs(X)). Determina ||X||

- norma de mximo
NORM(X,-inf) = min(abs(X)). Determina ||X||
-
- norma de mnimo

For exemplo:

A=[1 2 4
4 -1 1
2 5 2]
A =

1 2 4
4 -1 1
2 5 2

norm(A,1) % o mximo das somas por coluna dos valores absolutos dos
elementos de A
ans =

8

norm(A,inf) % o mximo das somas por linha dos valores absolutos dos
elementos de A
ans =

9
Mtodos Numricos e Estatsticos Exerccios para o Matlab

Departamento de Matemtica.
Universidade de Aveiro
4

b=[11 8 3]'

b =

11
8
3

norm(b,1) % a soma dos valores absolutos dos elementos de b
ans =

22

norm(b,inf) % o mximo em valor absoluto dos elementos de b
ans =

11

norm(b,-inf) % o mnimo em valor absoluto dos elementos de b
ans =

3

! funo COND: determina o nmero de condio de uma matriz
cond(A)= ||A
-1
|| ||A||

COND(A,P) devolve o nmero de condio de X na P-norma, P=1,2, inf:

For exemplo:

A=[1 2 4
4 -1 1
2 5 2]
A =
1 2 4
4 -1 1
2 5 2


cond(A,inf)

ans =

4.17391304347826





Mtodos Numricos e Estatsticos Exerccios para o Matlab

Departamento de Matemtica.
Universidade de Aveiro
5
Resolues dos exerccios

3. Escreva em Matlab a funo X=residuo (A,b,X0,n) que implementa o mtodo
dos resduos para melhorar uma aproximao da soluo do sistema de
equaes lineares Ax=b. O parmetro n indica o nmero mximo de iteraes.




















5. Escreva em Matlab a funo M=majorrx(A,b, delta) que determina um
majorante do erro relativo (em norma) da soluo X do sistema de equaes
lineares AX=b quando o vector b dos termos independentes ligeiramente
perturbado segundo um delta dado.




















function M=majorrx(A,b,delta);
%--------------------------------------------------------------
% Esta funo determina um majorante do erro relativo
%(em norma)da soluo X do sistema de equaes lineares 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
% frmula: rx=||deltax||/||x||<=cond(A)* (||delta||/||b||)
% Para executar chamar:
% MX = majorrx(A,b,delta)
% Parmetros de entrada
% A - a matriz A do sistema
% b - o vector com os termos independentes
% X - a soluo que vai ser perturbada
% delta - o majorante para a perturbao do vector b
% Parmetros de sada
% M - o majorante do erro relativo
%--------------------------------------------------------------
echo on;
format long;
% O majorante do erro relativo em norma calculado pela
frmula: rx<=cond(A)* (||delta||/||b||)
cA=cond(A,inf) % determina o nmero de condio da matriz
pela norma inf
nb=norm(b,inf) % determina a norma inf de b
M=cA / nb * delta % determina o majorante
function X=residuo(A,b,X0,n)
%--------------------------------------------------------------
% Esta funo implementa o mtodo dos resduos para melhorar
% uma aproximao da soluo do sistema de equaes lineares
% Ax=b
% Para executar chamar:
% X = residuo(A,b,X0,n)
% Parmetros de entrada
% A - a matriz A do sistema
% b - o vector com os termos independentes
% X0 - a soluo que se pretende melhorar
% n - numero mximo de iteraes
% Parmetros de sada
% X - a aproximao da soluo
%--------------------------------------------------------------
echo on;
format long;
X=X0;
for k=1:n;
disp(['Iterao n:',num2str(k)]);
r = b - A*X
erro=A\r
X=X+erro
end;
Mtodos Numricos e Estatsticos Exerccios para o Matlab

Departamento de Matemtica.
Universidade de Aveiro
6
7. Escreva em Matlab a funo jacobi(A,b, X0, eps, max) que implementa o
mtodo iterativo de Jacobi para determinar a soluo aproximada de Ax=b,
dada uma soluo inicial X0, e tal que ||x
k
-

x
k-1
|| < eps. Alm disso um
nmero max de iteraes tambm dado, para terminar o processo iterativo
quando no se verificar ||x
k
-

x
k-1
|| < eps.

































8. Escreva em Matlab a funo gseidel(A,b, X0, eps, max) que implementa o
mtodo iterativo de Gauss-Seidel para determinar a soluo aproximada de
Ax=b, dada uma soluo inicial X0, e tal que ||x
k
-

x
k-1
|| < eps. Alm disso um
nmero max de iteraes tambm dado, para terminar o processo iterativo
quando no se verificar ||x
k
-

x
k-1
|| < eps.

















function [X,delta,Z] = jacobi(A,b,X0,eps,max)
%-----------------------------------------------------------------------
% Implementa o mtodo iterativo de Jacobi para determinar uma soluo
% aproximada de Ax=b
% Executar
% [X,delta] = jacobi(A,B,P,delta,max1)
% [X,delta,Z] = jacobi(A,B,P,delta,max1)
% Entrada
% A a matriz A do sistema
% b o vector dos termos independentes
% X0 a soluo inicial
% eps se abs(X(k)-X(k-1))< eps FIM !!!
% max nmero mximo de iteraes
% Devolve
% X o vector com a soluo
% delta a norma do vector abs(X(k)-X(k-1))
% Z Matrix com todas as solues (uma por linha)
%-----------------------------------------------------------------------
n = length(b);
Xant = X0; % inicializa Xant
X=X0; % inicializa X
Z = X0'; % inicializa Z
for k=1:max, % iterar at max vezes
for j = 1:n, % para cada equao
% X(j)= (b(j)-a(j,1)*Xant(1)-...-a(j,j-1)*Xant(j-1)-
a(j,j+1)*Xant(j+1)-...-a(n,n)*Xant(n))/ ajj
Sum = b(j) - A(j,[1:j-1,j+1:n])*Xant([1:j-1,j+1:n]);
X(j) = Sum/A(j,j);
end
Z = [Z;X']; % armazena a histria
delta = norm(abs(X-Xant),1);
if (delta<eps) break, end
Xant = X;
end
function [X,delta,Z] = gseidel(A,b,X0,eps,max)
%--------------------------------------------------------------------------
% Implementa o mtodo iterativo de Gauss-Seidel para determinar uma soluo
aproximada de Ax=b
% Executar
% [X,delta] = gseidel(A,B,P,delta,max1)
% [X,delta,Z] = gseidel(A,B,P,delta,max1)
% Entrada
% A a matriz A do sistema
% b o vector dos termos independentes
% X0 a soluo inicial
% eps se abs(X(k)-X(k-1))< eps FIM !!!
% max nmero mximo de iteraes
% Devolve
% X o vector com a soluo
% delta a norma do vector abs(X(k)-X(k-1))
% Z Matrix com todas as solues (uma por linha)
%--------------------------------------------------------------------------
Mtodos Numricos e Estatsticos Exerccios para o Matlab

Departamento de Matemtica.
Universidade de Aveiro
7
(continuao)



























9. Partindo da aproximao inicial X0=[5/4,-1/4]' aproxime a soluo do sistema

2x
1
+ 0.5 x
2
= 2.5
x
1
+ 3 x
2
= 0.5

aplicando o mtodo de Jacobi e o mtodo de Gauss-Seidel com o nmero de iteraes
suficientes por forma a que ||x
k
-

x
k-1
|| < 0.5 x 10
-1




























% -------------------------------------------------------------------------
% Este programa partindo da aproximao inicial X0=[5/4,-1/4]
% aproxime a soluo do sistema
% 2x1 + 0.5 x2= 2.5
% x1 + 3 x2= 0.5
% aplicando o mtodo de Jacobi e o mtodo de Gauss-Seidel por forma a que
% ||xk - xk-1 || < 0.5 x 10-1
% -------------------------------------------------------------------------
A=[2 0.5 % introduzir a matriz A
1 3]
b=[2.5 0.5]' % introduzir o vector b
X0=[5/4,-1/4]' % introduzir a soluo inicial
[X,dX,Z]=jacobi(A,b,X0,0.05,2);
m=length(Z);
k=1:m;
disp('');
disp('---------------------Mtodo de Jacobi --------------------');
disp(' Iterao x(1) x(2) ');
disp('--------------------------------------------------------------');
disp([k',Z])
disp('--------------------------------------------------------------');
disp(' ');
disp(['A soluo: ','x1= ',num2str(Z(m,1),8),' x2= ',num2str(Z(m,2),8)]);


n = length(b);
Xant = X0; % inicializa Xant
X=X0; % inicializa X
Z = X0'; % inicializa Z
for k=1:max, % iterar at max vezes
for j = 1:n, % para cada equao
% X(j)= (b(j)-a(j,1)*X(1)-...-a(j,j-1)*X(j-1)- a(j,j+1)*Xant(j+1)-...-
a(n,n)*Xant(n))/ ajj
if j==1
Sum = b(1) - A(1,2:n)*Xant(2:n);
elseif j==n
Sum = b(n) - A(n,1:n-1)*X(1:n-1);
else
Sum = b(j)-A(j,1:j-1)*X(1:j-1)-A(j,j+1:n)*Xant(j+1:n);
end
X(j) = Sum/A(j,j);
end
Z = [Z;X']; % armazena a histria
delta = norm(abs(X-Xant),1);
if (delta<eps) break, end
Xant = X;
end
Mtodos Numricos e Estatsticos Exerccios para o Matlab

Departamento de Matemtica.
Universidade de Aveiro
8
(continuao)















ex9
A =

2.00000000000000 0.50000000000000
1.00000000000000 3.00000000000000
b =

2.50000000000000
0.50000000000000
X0 =

1.25000000000000
-0.25000000000000

---------------------Mtodo de Jacobi --------------------
Iterao x(1) x(2)
--------------------------------------------------------------
1.00000000000000 1.25000000000000 -0.25000000000000
2.00000000000000 1.31250000000000 -0.25000000000000
3.00000000000000 1.31250000000000 -0.27083333333333

--------------------------------------------------------------

A soluo: x1= 1.3125 x2= -0.27083333

-------------------Mtodo de Gauss-Seidel --------------------
Iterao x(1) x(2)
--------------------------------------------------------------
1.00000000000000 1.25000000000000 -0.25000000000000
2.00000000000000 1.31250000000000 -0.27083333333333
3.00000000000000 1.31770833333333 -0.27256944444444

--------------------------------------------------------------

A soluo: x1= 1.3177083 x2= -0.27256944

[X,dX,Z]=gseidel(A,b,X0,0.05,2);
m=length(Z);
k=1:m;
disp(' ');
disp('-------------------Mtodo de Gauss-Seidel --------------------');
disp(' Iterao x(1) x(2) ');
disp('--------------------------------------------------------------');
disp([k',Z])
disp('--------------------------------------------------------------');
disp(' ');
disp(['A soluo: ','x1= ',num2str(Z(m,1),8),' x2= ',num2str(Z(m,2),8)]);