Você está na página 1de 5

CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS

MÉTODOS NUMÉRICOS COMPUTACIONAIS

João Vítor M. Cardoso


Leonardo Batista

ATIVIDADE PRÁTICA

Professor (a): Michelle

Belo Horizonte
2018
A) X = [4.9999, 1, -2.0000]’
O sistema converge em 12 interações
B) O algoritimo usa como critério de para a obtenção de um valor de erro menor ou igual
ao passado como parâmetro na função ou atingir o número máximo de iterações, que
também é passado como parâmetro. É um bom critério, pois se adequa à necessidade
do usuário, já que o erro e o número máximo de iterações é passado como parâmetro
na função. Além disso o critério contempla além de um número definido de erro, um
máximo de vezes de execução, para um sistema que demora mais que o aceitável para
chegar no erro aceitável.
C)
function [x, err, niter]=jacobi(A, b, x0, tol, maxiter)
err = %inf ;
niter = 1;
D = diag ( diag (A) );
T = A - D;
while err >= tol & niter < maxiter ,
x = D \(b -T * x0 );
err = max ( abs (x - x0 ))/ max(x);
x0 = x;
niter = niter +1;
end
if niter == maxiter then
disp ('Numero maximo de iteracoes atingido ');
disp ('iteracoes ', niter , 'Condicao max_k |x(k) - x0(k)| nao atingida apos ');
break ;
end
endfunction

D)A chamada da função com esses parametros [x, relerr , niter ] = jacobirel (A, b, [1, 1, 1]',
0.00001 , 50) retorna os valores de número iterações = 19 erro = 0,0000099 e os valores
de x = [1.0833306, 1.3888871, 1.8888883]’

A chamada da função com esses parametros [x, err , niter ] = jacobi (A, b, [0, 0, 0]', 0.0001 , 5)
não atinge o erro menor do que o passado como parâmetro porque atinge o máximo de
iterações antes disso, então o programa retorna os valores do erro = 0.3277778 e os
valores de x = [1.0794444, 1.1833333, 1.9877778]’

A chamada da função com esses parametros [x, err , niter ] = jacobi (A, b, [ -1000 , 0, 1000] ' ,
0.00001 , 50) número iterações = 29 com um erro de 0,0000099 e os valores de x =
[1.0833306, 1.3888871, 1.8888883]’

e) A chamada da função com esses parametros [x, relerr , niter ] = jacobirel (A, b, [1, 1, 1]',
0.00001 , 50) retorna os valores de número iterações = 18 erro = 0.0000078 e os valores
de x = [1.0833307, 1.388897, 1.8888835]’

A chamada da função com esses parametros [x, err , niter ] = jacobi (A, b, [0, 0, 0]', 0.0001 , 5)
não atinge o erro menor do que o passado como parâmetro porque atinge o máximo de
iterações antes disso, então o programa retorna os valores do erro = 0.1648966 e os
valores de x = [1.0794444, 1.1833333, 1.9877778]’
A chamada da função com esses parametros [x, err , niter ] = jacobi (A, b, [ -1000 , 0, 1000] ' ,
0.00001 , 50) número iterações = 28 com um erro de 0.0000098 e os valores de x =
[1.0833321, 1.3888789, 1.8888932]’

2-
function [x, err, niter]=jacobi(A, b, x0, tol, maxiter)
err = %inf ;
niter = 1;;
T = tril (A, 0);
F = A - T;
while err >= tol & niter < maxiter
x = T\(b - F*x0);
err = max ( abs (x - x0 ));
x0 = x;
niter = niter +1;
end
if niter == maxiter then
disp ('Numero maximo de iteracoes atingido ');
disp ('iteracoes ', niter , 'Condicao max_k |x(k) - x0(k)| nao atingida apos ');
break ;
end
endfunction

A) X = [5.0000001, 1, -2]’
O sistema converge em 8 interações
D)
A chamada da função com esses parametros [x, relerr , niter ] = jacobirel (A, b, [1, 1, 1]', 0.00001
, 50) retorna os valores de número iterações = 10, erro = 0.0000064 e os valores de x =
[1.0833344, 1.3888896, 1.8888883]’

A chamada da função com esses parametros [x, err , niter ] = jacobi (A, b, [0, 0, 0]', 0.0001 , 5)
não atinge o erro menor do que o passado como parâmetro porque atinge o máximo de
iterações antes disso, então o programa retorna os valores do erro = 0.056 e os valores
de x = [1.074, 1.3826667, 1.8938667]’

A chamada da função com esses parametros [x, err , niter ] = jacobi (A, b, [ -1000 , 0, 1000] ' ,
0.00001 , 50) número iterações = 14 com um erro de 0.0000061 e os valores de x =
[1.0833323, 1.3888882, 1.8888894]’

3-
function [x, err, niter]=jacobi(A, b, x0, tol, maxiter)
exec("diagdomina.sci");
if diagdomina(A) then
err = %inf ;
niter = 1;
T = tril (A, 0);
F = A - T;
while err >= tol & niter < maxiter
x = T\(b - F*x0);
err = max ( abs (x - x0 ));
x0 = x;
niter = niter +1;
end
if niter == maxiter then
disp ('Numero maximo de iteracoes atingido ');
disp ('iteracoes ', niter , 'Condicao max_k |x(k) - x0(k)| nao atingida apos ');
break ;
end
end
endfunction

4-
A) X = [0.0862069, 0.0689655, 0.9310345, 0.0172414, -0.2758621]’
O algoritimo não executa pivotação, e faz substituição retroativa
B) O algoritimo não retorna os valores de X, a provável razão é um valor nulo na
diagonal, que gera uma divisão por zero. É possível que isso ocorra, já que o
método não realiza pivotação.
5-
[ L, U, P ] = lu(A)

P =

0. 1. 0. 0.
1. 0. 0. 0.
0. 0. 0. 1.
0. 0. 1. 0.

U =

3. 2. 0. 1.
0. 1.3333333 3. 3.6666667
0. 0. 4.5 3.5
0. 0. 0. -0.1111111

L =

1. 0. 0. 0.
0.3333333 1. 0. 0.
0.3333333 -0.5 1. 0.
-0.3333333 0.5 -0.1111111 1.

O método realiza a decomposição retornando valores de P, U e L


function x=Lu(A, b)
[L, U, P] = lu(A);
n = size(A,"r");
aux = P*b;
y(1) = aux(1)/L(1,1);
for i = 2:n
soma = 0;
for j = 1: i-1
soma = soma + L(i, j)*y(j);
end
y(i) = (aux(i) - soma)/L(i,i);
end
x(n) = y(n)/U(n,n);
for i = n-1:-1:1
soma = 0;
for j = n:-1:i+1
soma = soma + U(i, j)*x(j);
end
x(i) = (y(i) - soma)/U(i,i);
end
endfunction