Você está na página 1de 16

Aula 6 – Cálculo Numérico:

Para calcular a norma de um vetor:


1º) Aplica no Scilab v = [a b c d]
2º) norm (v) ou norm(v,%inf) 🡪 Este último para contar todos os elementos de um vetor

Norma de uma matriz:


Norma 1 🡪 Máximo da soma das colunas EM MÓDULO
Norma 2 🡪 Aplicar no Scilab :
1º) A = [a b c; d e f; g h i]
2º) norm(A,2)
Norma infinito 🡪 Máximo da soma das linhas EM MÓDULO

Para poder utilizar o método de Gauss Jacobi e Gauss Seidel: A soma dos elementos da
mesma linha deve ser maior ou igual ao elemento da diagonal principal.

Número de Condicionamento de uma Matriz Não Singular A: Multiplica a norma da


matriz A pela norma da matriz inversa
O número de condicionamento da matriz identidade é 1
O número de condicionamento de qualquer matriz inversível é maior ou igual a 1
Aplicar no Scilab:
cond(A,1)
cond(A,2)
cond(A,’inf’)

Código Scilab – Método de Jacobi:

function [x,deltax]=jacobi(A,b,x,tol,N)  
n=size(A,1)  
xnew     =x  
convergiu=%F                //FALSE;  
 
k=1  
while k<=N & ~convergiu  
  xnew(1)=(b(1) - A(1,2:n)*x(2:n))/A(1,1)  
  for i=2:n-1  
    xnew(i)=(b(i) -A(i,1:i-1)*x(1:i-1) ...  
                  -A(i,i+1:n)*x(i+1:n) )/A(i,i)  
  end  
  xnew(n)=  (b(n) -A(n,1:n-1)*x(1:n-1) )/A(n,n)  
 
  deltax=max( abs(x-xnew) )  
  if deltax<tol then  
     convergiu=%T       //TRUE  
  end  
  k=k+1  
  x=xnew                 // atualiza x  
  disp([k,x’,deltax])    // depuracao  
end  
if ~convergiu then  
    error(’Nao convergiu’)  
end  
 
endfunction 
Código Scilab – Método de Gauss Seidel:

function [x,deltax]=gauss_seidel(A,b,x,tol,N)  
n=size(A,1)  
xnew     =x  
convergiu=%F                //FALSE;  
 
k=1  
while k<=N & ~convergiu  
  xnew(1)=(b(1) - A(1,2:n)*x(2:n))/A(1,1)  
  for i=2:n-1  
    xnew(i)=(b(i) -A(i,1:i-1)*xnew(1:i-1) ...  
                  -A(i,i+1:n)*x(i+1:n) )/A(i,i)  
  end  
  xnew(n)=(b(n) -A(n,1:n-1)*xnew(1:n-1) )/A(n,n)  
 
  deltax=max( abs(x-xnew) )  
  if deltax<tol then  
     convergiu=%T       //TRUE  
  end  
  k=k+1  
  x=xnew                 // atualiza x  
  disp([k,x’,deltax])    // depuracao  
end  
if ~convergiu then  
    error(’Nao convergiu’)  
end  
 
endfunction  

Matriz A = D + L + U
D = Matriz diagonal
L = Matriz triangular inferior
U = Matriz triangular superior
Iteração de Jacobi:

Iteração de Gauss Seidel:

Condições de Convergência:

Condição Suficiente porém não necessária 🡪 Se a matriz A for diagonal dominante, então
os métodos de Jacobi e Gauss Seidel serão convergentes independente da escolha inicial
x.
Questionário T6:

Apliquei no Scilab:
A = [12 1 4; 8 -1 0; 12 6 13]
norm (A,1)
norm (A,%inf)
//ans = 32 e 31

Apliquei no Scilab:
x = [1321,246544,312134]
y = [1320,246545,312100]
norm(x-y,1)
norm(x-y,2)
norm(x-y,%inf)
//ans = 36, 34.029399, 34
Dúvida kkk - Raio Espectral da Matriz o que significa?
Linha 1: 2 > 1+ 1.1
Linha 2: 2> 2 + 2
Linha 3: 2 NÃO É MAIOR QUE 1+ 1.1
Portanto, a diagonal não é estritamente dominante.
Aplicar no Scilab:
format (25)
A = [4 4;3 4] //Do enunciado
b = [1;1] //Do enunciado
x = [1;0] //Do enunciado
D = eye(A).*A; // Descobrir D
D
L = tril(A)-D; // Descobrir L
L
U=triu(A)-D; // Descobrir U
U

D = [4 0;0 4]
L = [0 0;3 0]
U = [0 4;0 0]
TJ = -inv(D)*(L+U);
TJ
cJ = inv(D)*b;
cJ
for k =1:5
x = TJ*x + cJ
end

//ans x2 = -0.171875

Apliquei no Scilab:
format(25)
A = [4 4;3 4] //Do enunciado
x = [1;0] //Do enunciado
b = [1;1]//Do enunciado
D = eye(A).*A; // Descobrir D
D
L = tril(A)-D; // Descobrir L
L
U=triu(A)-D; // Descobrir U
U

TJ = -inv(D)*(L+U);
TJ
cJ = inv(D)*b;
cJ
for k =1:50
x = TJ*x + cJ
end
//Último x2 = 0.2498118641354587499137
//Penúltimo x2 = 0.2492474565418349996548
//Antepenúltimo x2 = 0.2497491521806116665516
//3 casas decimais

Aplicar no Scilab:
format (25)
A = [4 4;3 4] //Do enunciado
b = [1;1] //Do enunciado
x = [1;0] //Do enunciado
D = eye(A).*A; // Descobrir D
D
L = tril(A)-D; // Descobrir L
L
U=triu(A)-D; // Descobrir U
U

D = [4 0;0 4]
L = [0 0;3 0]
U = [0 4;0 0]
TG = -inv(L+D)*U;  
TG
cG = inv(L+D)*b;
cG
for k =1:50
x = TG*x + cG
end
//Último x2 = 0.249999858419585885283
//Penúltimo x2 = 0.2499998112261145322144
//Antepenúltimo x2 = 0.249999748301486024449
//6 casas decimais

J1 J2 J3 J4 J5 J6 J7 J8
I1 2 1 0 0 0 0 0 0
I2 1 2 1 0 0 0 0 0
I3 0 1 2 1 0 0 0 0
I4 0 0 1 2 1 0 0 0
I5 0 0 0 1 2 1 0 0
I6 0 0 0 0 1 2 1 0
I7 0 0 0 0 0 1 2 1
I8 0 0 0 0 0 0 1 2
Apliquei no Scilab:
format(25)
A = [ 2 1 0 0 0 0 0 0; 1 2 1 0 0 0 0 0; 0 1 2 1 0 0 0 0; 0 0 1 2 1 0 0 0; 0 0 0 1 2 1 0 0;
0 0 0 0 1 2 1 0; 0 0 0 0 0 1 2 1; 0 0 0 0 0 0 1 2] //Do enunciado
x = [0;0;0;0;0;0;0;0] //Do enunciado
b = [1;1;1;1;1;1;1;1] //Do enunciado
N = 25 //Do enunciado
D = eye(A).*A; // Descobrir D
D
L = tril(A)-D; // Descobrir L
L
U=triu(A)-D; // Descobrir U
U

TG = -inv(L+D)*U;  
TG
cG = inv(L+D)*b;
cG
for k =1:25
x = TG*x + cG
end
norm(x,%inf)
//ans = 0.446242963195357944528

Apliquei no Scilab:
format(25)
A = [ 2 1 0 0 0 0 0 0; 1 2 1 0 0 0 0 0; 0 1 2 1 0 0 0 0; 0 0 1 2 1 0 0 0; 0 0 0 1 2 1 0 0;
0 0 0 0 1 2 1 0; 0 0 0 0 0 1 2 1; 0 0 0 0 0 0 1 2] //Do enunciado
x = [0;0;0;0;0;0;0;0] //Do enunciado
b = [1;1;1;1;1;1;1;1]//Do enunciado
D = eye(A).*A; // Descobrir D
D
L = tril(A)-D; // Descobrir L
L
U=triu(A)-D; // Descobrir U
U

TJ = -inv(D)*(L+U);
TJ
cJ = inv(D)*b;
cJ
for k =1:100
x = TJ*x + cJ
end
norm(b-A*x,2)
//ans = 0.0053168770349003536754
Ir testando cada valor de n para que se encaixe na condição de <10^(-7)
Para n = 195: Aplicar no Scilab:

format(25)
A = [ 2 1 0 0 0 0 0 0; 1 2 1 0 0 0 0 0; 0 1 2 1 0 0 0 0; 0 0 1 2 1 0 0 0; 0 0 0 1 2 1 0 0;
0 0 0 0 1 2 1 0; 0 0 0 0 0 1 2 1; 0 0 0 0 0 0 1 2] //Do enunciado
x = [0;0;0;0;0;0;0;0] //Do enunciado
b = [1;1;1;1;1;1;1;1]//Do enunciado
n=8
D = eye(A).*A; // Descobrir D
D
L = tril(A)-D; // Descobrir L
L
U=triu(A)-D; // Descobrir U
U

TG = -inv(L+D)*U;  
TG
cG = inv(L+D)*b;
cG
for k =1:195
x = TG*x + cG
end

//Último x2 = 0.4444444444436837504675
//Penúltimo x2 = 0.444444444443582997728
//Antepenúltimo x2 = 0.4444444444434688668011
//0.4444444444436837504675 - 0.444444444443582997728 =
//0.0000000000001007527395 = 1,007527395*10^(-13)
// |expoente| - 1 = 13 – 1 = 12

Para n = 95: Aplicar no Scilab:


format(25)
A = [ 2 1 0 0 0 0 0 0; 1 2 1 0 0 0 0 0; 0 1 2 1 0 0 0 0; 0 0 1 2 1 0 0 0; 0 0 0 1 2 1 0 0;
0 0 0 0 1 2 1 0; 0 0 0 0 0 1 2 1; 0 0 0 0 0 0 1 2] //Do enunciado
x = [0;0;0;0;0;0;0;0] //Do enunciado
b = [1;1;1;1;1;1;1;1]//Do enunciado
n=8
D = eye(A).*A; // Descobrir D
D
L = tril(A)-D; // Descobrir L
L
U=triu(A)-D; // Descobrir U
U

TG = -inv(L+D)*U;  
TG
cG = inv(L+D)*b;
cG
for k =1:95
x = TG*x + cG
end

//Último x2 = 0.444444252111593218757
//Penúltimo x2 = 0.4444442266324273305145
//Antepenúltimo x2 = 0.4444441977779259866921
//0.444444252111593218757 - 0.4444442266324273305145
//0.0000000254791658882425 = 2,54791658882425*10^(-8)
//|expoente| - 1 = 8 – 1 = 7

Para n = 45: Aplicar no Scilab:


format(25)
A = [ 2 1 0 0 0 0 0 0; 1 2 1 0 0 0 0 0; 0 1 2 1 0 0 0 0; 0 0 1 2 1 0 0 0; 0 0 0 1 2 1 0 0;
0 0 0 0 1 2 1 0; 0 0 0 0 0 1 2 1; 0 0 0 0 0 0 1 2] //Do enunciado
x = [0;0;0;0;0;0;0;0] //Do enunciado
b = [1;1;1;1;1;1;1;1]//Do enunciado
n=8
D = eye(A).*A; // Descobrir D
D
L = tril(A)-D; // Descobrir L
L
U=triu(A)-D; // Descobrir U
U

TG = -inv(L+D)*U;  
TG
cG = inv(L+D)*b;
cG
for k =1:45
x = TG*x + cG
end

//Último x2 = 0.4443477343425890624395
//Penúltimo x2 = 0.4443349227345820828816
//Antepenúltimo x2 = 0.4443204139160172316814
// 0.4443477343425890624395 - 0.4443349227345820828816 =
// 0.0000128116080069795579= 1,28116080069795579*10^(-5)
// |expoente| - 1 = 5 – 1 = 4

Para n = 295: Aplicar no Scilab:


format(25)
A = [ 2 1 0 0 0 0 0 0; 1 2 1 0 0 0 0 0; 0 1 2 1 0 0 0 0; 0 0 1 2 1 0 0 0; 0 0 0 1 2 1 0 0;
0 0 0 0 1 2 1 0; 0 0 0 0 0 1 2 1; 0 0 0 0 0 0 1 2] //Do enunciado
x = [0;0;0;0;0;0;0;0] //Do enunciado
b = [1;1;1;1;1;1;1;1]//Do enunciado
n=8
D = eye(A).*A; // Descobrir D
D
L = tril(A)-D; // Descobrir L
L
U=triu(A)-D; // Descobrir U
U

TG = -inv(L+D)*U;  
TG
cG = inv(L+D)*b;
cG
for k =1:295
x = TG*x + cG
end
//Último x2 = 0.4444444444444444197728
//Penúltimo x2 = 0.4444444444444444197728
//Antepenúltimo x2 = 0.4444444444444444197728
//0.4444444444444444197728 - 0.4444444444444444197728 =
//0

Questionário M6:

Apliquei no Scilab:
A = [1 2 3; 4 5 0; -1 -5 5] //Do enunciado
norm (A,1)
Resposta: 12
J1 J2 J3 J4 J5 J6 J7 J8
I1 1/2 1/4 0 0 0 0 0 0
I2 1/4 1/2 1/4 0 0 0 0 0
I3 0 1/4 1/2 1/4 0 0 0 0
I4 0 0 1/4 1/2 1/4 0 0 0
I5 0 0 0 1/4 1/2 1/4 0 0
I6 0 0 0 0 1/4 1/2 1/4 0
I7 0 0 0 0 0 1/4 1/2 1/4
I8 0 0 0 0 0 0 1/4 1/2
wtf

Apliquei no Scilab:
format (25)
A = [6 1;-1 4] //Do enunciado
b = [1;2] //Do enunciado
x = [2;0] //Do enunciado
D = eye(A).*A; // Descobrir D
D
L = tril(A)-D; // Descobrir L
L
U=triu(A)-D; // Descobrir U
U

TJ = -inv(D)*(L+U);
TJ
cJ = inv(D)*b;
cJ
for k =1:4
x = TJ*x + cJ
end
//ans x1 = 0.083333333333333328707

Apliquei no Scilab:
format (25)
x = [3141592, 1414213]
y = [%pi,sqrt(2)]*10^6
norm(x-y,2)
//ans = 0.862231474564454036802

Apliquei no Scilab:
format (25)
A = [6 1;-1 4] //Do enunciado
b = [1;2] //Do enunciado
x = [2;0] //Do enunciado
D = eye(A).*A; // Descobrir D
D
L = tril(A)-D; // Descobrir L
L
U=triu(A)-D; // Descobrir U
U
TG = -inv(L+D)*U;  
TG
cG = inv(L+D)*b;
cG
for k =1:10
x = TG*x + cG
end
//Último x2 = 0.5199999999999918021132
//Penúltimo x2 = 0.5200000000001967492835
//Antepenúltimo x2 = 0.519999999995275907771
//0.5199999999999918021132-0.5200000000001967492835
//ans = -0.0000000000002049471703= 2,049471703*10^(-13)
//|expoente| - 1 = 13 – 1 = 12

Apliquei no Scilab:
format (25)
A = [6 1;-1 4] //Do enunciado
b = [1;2] //Do enunciado
x = [2;0] //Do enunciado
D = eye(A).*A; // Descobrir D
D
L = tril(A)-D; // Descobrir L
L
U=triu(A)-D; // Descobrir U
U
TJ = -inv(D)*(L+U);
TJ
cJ = inv(D)*b;
cJ
for k =1:10
x = TJ*x + cJ
end
//Último x2 = 0.520000065305105452218
//Penúltimo x2 = 0.5200014467592593003786
//0.520000065305105452218 - 0.5200014467592593003786 =
//-0.0000013814541538481606 = 1,3814541538481606*10^(-6)
//|expoente| - 1 = 6 – 1 = 5

Você também pode gostar