Escolar Documentos
Profissional Documentos
Cultura Documentos
Juiz de Fora
Setembro de 2017
Conteúdo
1 Demonstrações 2
1.1 Precisão de Sistema Com Arredondamento Para o Mais Próximo 2
1.2 Usar eliminação de Gauss Para Fatorar Uma Matriz em A = LU 3
1.3 Teorema de Diferenças Divididas . . . . . . . . . . . . . . . . 5
1.4 Integração Numérica . . . . . . . . . . . . . . . . . . . . . . . 6
4 Interpolação Polinomial 12
4.1 Interpolação por Partes Com Polinômio de Segundo Grau . . . 13
4.2 Splines Cúbicas . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.2.1 Aplicação de Splines Cúbicas . . . . . . . . . . . . . . 15
1
1 Demonstrações
1.1 Precisão de Sistema Com Arredondamento Para o
Mais Próximo
Objetivo: Mostrar que em um sistema com arredondamento para o mais
próximo, a precisão é dada por,
|f l(x) − x| 1
≤ β 1−p (1)
|x| 2
x = xm β e + xr β e−p (2)
onde,
• β é a base;
• p é a precisão do sistema;
• e é o expoente do número x;
• xm e xr são mantissas.
2
Assim, pode-se escrever,
β e−p 1
mach = β
2 βe
O que leva à,
β 1−p
mach = (3)
2
aj,1
(Linha[j] − mj1 · Linha[j] → (Linha[j]), onde mj,1 = (4)
a1,1
−m_{n, 1} 0 . . . 0 1
Assim, a matriz A após multiplicada por M (1) apresenta todos os elemen-
tos da primeira coluna abaixo da primeira linha iguais a zero,
3
1 0 0 ... ... ... 0
0 1 0 0
.. . . ..
. . 1 0 .
. ..
. ... ...
M (k) = . 0 .
. .. . . .
.. . −mk+1,k . . . . ..
.. .. .. . . . 0
. . . 0
0 . . . 0 −mn,k 0 0 1
O processo finliza com a formação de uma matriz triangular superior A(n)
a1,1 a1,2 . . . a1,n
.. .. ..
(n) 0
. . .
A = . . .
.. .. . . an−1,n
0 ... 0 an,n
1 0 ... 0
... ... ..
m .
L = L(1) L(2) . . . L(n−1) = .2,1 .. ..
..
. . 0
mn,1 ... mn−1,n 1
Dessa forma tem-se que,
(1) (2) (n−1) (n−1) (n−2) (1)
LU = L L . . . L M M ...M A
4
Como L(k) = [M (k) ]−1 , então L(k) M (k) = M (k) [M (k) ]−1 = 1. Assim, tem-
se
LU = A (8)
Então, pode-se concluir que a matriz de multiplicadores provenientes da
eliminação de Gauss (L) e a matriz triangular superior resultante desse mé-
todo (U ), podem ser utilizadas para realizar uma fatoração LU de uma matriz
A.
f (n) (c)
= f [x0 , x1 , . . . , xn ] (9)
n!
5
g (n) (c) = f (n) (nx)− = f [x0 , . . . , xn ]n! = 0 (14)
Dessa forma, tem-se
f (n) (c)
= f [x0 , . . . , xn ] (15)
n!
6
w1 + w2 + w3 + w4 = 2
−w1 + w2 t2 + w3 t3 + w4 = 0
w + w t2 + w t2 + w = 2/3
1 2 2 3 3 4
3 3
(18)
−w1 + w2 t2 + w3 t3 + w4 = 0
w1 + w2 t42 + w3 t43 + w4 = 2/5
−w1 + w2 t52 + w3 t53 + w4 = 0
φ5 (x) = a5 x5 + a4 x4 + a3 x3 + a2 x2 + a1 x + a0 (20)
Integrando 20 tem-se,
Z 1
2 2
φ5 (x)dx = a4 + a2 + 2a0 (21)
−1 5 3
Pode-se também aplicar a regra de integração numérica 19, que resulta
em,
7
Z 1
φ5 (x)dx = 0.1666666666(φ5 (−1) + φ5 (1))+
−1
0.8333333333φ5 (0.4472135954) + 0.8333333333φ5 (−0.4472135954) =
(22)
0.399999999a4 + 0.666666666a2 + 2a0 =
2 2
a4 + a2 + 2a0
5 3
x2 x3
ex = 1 + x + + + ... (24)
2! 3!
A expressão 24 pode ser facilmente inserida no computador e o valor de ex
pode ser facilmente avaliado. No entanto, a série de Taylor é um somatório
infinito, levando à necessidade de truncamento da série, devido à limitações
computacionais. Esse truncamento pode ser feito levando em conta três
fatores:
• o termo xn /n! se torna tão pequeno que não é mais possível representa-
lo computacionalmente, então esse termo se torna zero;
8
• O valor de n! fica tão grande que não existe como representa-lo no
computador.
Os três casos acima são usados como pontos de parada para o algoritmo
que avalia a função exponencial, garantindo que a série seja truncada quando
nã é mais possível representar os próximos termos computacionalmente.
Para o cálculo de valores com x < 0 é mais acurado utilizar a equação 25.
A tabela 2 mostra resultados comparando valores de uma função exponencial
implementada utilizando expansão de Taylor apresentada (expo(x)) com uma
função nativa da linguagem (exp(x)). Podemos observar que as diferenças
são muito pequenas.
1
e−x = (25)
ex
9
a11 a12 a13 . . . a1n x1 b1
a21 a22 a23 . . . a2n x2 b2
.. .. = ..
.. .. .. . .
. . . . . . .
an1 an2 an3 . . . ann xn an
A solução de sistemas lineares, então, se resume a encontrar um vetor X
que satisfaça a igualdade 26.
10
2. Determinar o resíduoi inicial r(0) = b − AX (0) ;
3. Repitir
[r(k) ]T r(k)
(a) α = ;
[s(k) ]T As(k)
(b) X (k+1) = X (k) + αs(k) ;
(c) r(k+1) = r(k) − αAs(k) ;
(d) Verifique se o resíduo é suficientemente pequeno;
[r(k+1) ]T r(k+1)
(e) α = ;
[r(k) ]T r(k)
(f) s(k+1) = s(k) + βs(k) ;
11
Podemos observar que devido ao mal condicionamento da matriz, a eli-
minação de Gauss leva a resultados muito errados a medida que a dimensão
cresce. Por outro lado, devido ao método de gradientes conjugados ser itera-
tivo, ele fornece resultados mais precisos mesmo que para grandes dimensões
da matriz de Hilbert.
4 Interpolação Polinomial
O objetivo é aplicar uma técnica de interpolação polinômial a um conjunto
de pontos mostrados nas tabelas 4 e 5 e plotado na figura 1, de forma a obter
o resultado da figura 2.
12
Figura 2: Objetivo de se aplicar interpolação.
Pk (x) = f (Xk,1 )Lk,1 (x) + f (xk,2 )Lk,2 (x) + f (xk,3 )Lk,3 (x) (29)
3
Y (x − xj )
Lk,i = (30)
j=1,j6=i
xi − xj
13
Figura 3: Conjunto de polinômios de segundo grau interpolando pontos.
14
Onde,
• hi = ti+1 − ti , i = 1...n − 1;
1
• bi = f (xi+1 ) − f (xi ) , i = 1...n − 1;
hi
• vi = 2(hi−1 − hi ), i = 1...n − 2;
• z1 = zn = 0.
∂fi (x)
{Jf (x)}ij = (34)
∂xj
15
Na prática, a matriz Jacobiana Jf (x) não é invertida, o seguinte sistema
linear é resolvido e utilizado para encontrar a próxima iteração,
xk+1 = xk − sk (36)
O Jacobiano do sistema pode ser calculado numericamente utilizando
diferenças finitas. O método de Newton é aplicado nos sistemas não-lineares
abaixo,
2 2 2 2
x
1
+ x 2 + x 3 = 1 x1 + x1 − 2x2 x3 = 0.1
(1) 2x21 + x22 − 4x3 = 0 (2) x2 − x22 + 3x1 x3 = −0.2
2
3x1 − 4x2 + x23 = 0
2
3x1 − 4x2 + x23 = 0.3
2 2
10x1 − 2x2 + x2 − 2x3 − 5 = 0
x1 + x2 − 37 = 0
(3) 8x22 + 4x23 − 9 = 0 (4) x1 − x22 − 5 = 0
8x3 x2 + 4 = 0 x1 + x2 + x3 − 3 = 0
x1 + 2x22 − x2 − 2x3 = 0 3x − cos(x2 x3 ) − 0.5 = 0
1
2
(5) x1 − 8x22 + 10x3 = 0 (6) x21 − 81(x2 − 0.1)2 + sen(x3 ) + 1.06 = 0
2
x1 − 1 = 0 e−x1 x2 + 20x3 + 10π − 3 = 0
7x2 x3 3
x1 + 10x2 = 0
x1 + cos(x1 x2 x3 ) − 1 = 0 √5(x − x ) = 0
3 4
(7) (1 − x1 )1/4 0.05x23 − 0.15x3 − 1 = 0 (8) 2
(x2 − x3 ) = 0
√
2
−x1 − 0.1x22 0.01x2 + x3 − 1 = 0
10(x1 − x4 )2 = 0
x1 + x2 = 2
4x1 − x2 + x3 = x1 x4
x x + x x = 0
−x + 3x − 2x = x x
1 3 2 4 1 2 3 2 4
(9) 2 2
(10)
x x
1 3 + x 2 x4 = 2/3
x 1 − 2x 2 + 3x 3 = x x
3 4
x1 x33 + x2 x34 = 0
2 2 2
x1 + x2 + x3 = 1
16
As soluções dos sistemas acima são dadas a seguir,
x1
x1 0.016798055859590
0.785196933062355
(2) x2 = −0.211775320104744
(1) x2 = 0.496611392944656
x3 0.369922830745872 x3 0.230954842219084
x1 5.999999999999992
x1 0.5000000000000
(3) x2 = 1.0000000000000 (4) x2 = 1.000000000000097
x3 −0.5000000000000 x3 −4.000000000000089
x1 0.500000000137425
x1 0.749273637078407
(5) x2 = 0.514726831687997 (6) x2 = 0.000000015026585
x3 0.155813859970018 x3 −0.523598775967385
x1
x1 −0.000000000000000 x2
(8)1 =
(7) x2 = 0.099999999040639 x3
x3 0.999999980796400 x4
x1 0.869271122258328
x1 x2 −0.488859511009560
x2 (10)
(9)1 x3 = −0.073376389276397
=
x3
x4 x4 4.477967243009013
1
Os sistemas 8 e 9 são matrizes quase singulares com det(A) ≈ 0, o que implica em o
sistema conter infinitas ou nenhuma solução.
17
A Implementação de Função Exponencial Por
Expansão de Taylor
Implentação em C da função exponencial utilizando expansão de Taylor.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <float.h>
double fat(int a)
{
if ((a == 1) || (a == 0))
{
return 1;
}
else
{
return fat(a-1)*a;
}
}
double expo(double x)
{
double ex = 1;
double inc = 1;
int i;
if(x >= 0)
{
ex = 1+x;
}
else
{
ex = 1-x;
}
for(i = 2; (inc > 0.0) && (fat(i) < DBL_MAX) && (pow(abs(x),i) <
DBL_MAX);i++)
{
18
inc = pow(abs(x),i)/fat(i);
ex = ex + inc;
}
if(x < 0)
{
ex = 1/ex;
}
return ex;
}
int main()
{
int i, nums[] = {1, 5, 10, 15 , 20, -1, -5, -10, -15 , -20};
return 0;
}
19
B Implementação da Matriz de Hilbert
Código desenvolvido em MATLAB para criar uma matriz de Hilbert N xN .
1 % Gera uma m a t r i z de H i l b e r t nxn .
2
5 a = zeros (n) ;
6
7 for i = 1:n
8 for j = 1:n
9 a ( i , j ) = 1/ ( i+j −1) ;
10 end
11 end
12
13 A = a;
14 end
20
C Implementação da Elimininação de Gauss
Código desenvolvido em MATLAB para encontrar solução de um sistema
linear utilizando eliminação de Gauss.
1 f u n c t i o n x = g a u s s (A, b )
2
3 [ n , n ] = s i z e (A) ;
4
5 f o r k =1:( n−1)
6 f o r i =(k+1) : n
7 m = A( i , k ) /A( k , k ) ;
8 f o r j=k : n
9 A( i , j ) = A( i , j ) − m∗A( k , j ) ;
10 end
11 b ( i ) = b ( i ) − m∗b ( k ) ;
12 end
13 end
14 x = subTriSup (A, b ) ;
15 end
3 f u n c t i o n x = subTriSup (U, b )
4
5 [ n , n ] = s i z e (U) ;
6
7 x = zeros (n , 1 ) ;
8
9 x ( n ) = b ( n ) /U( n , n ) ;
10
11 f o r i = ( n−1) : −1:1
12 x( i ) = b( i ) ;
13 f o r j =( i +1) : n
14 x ( i ) = x ( i ) − x ( j ) ∗U( i , j ) ;
15 end
16 x ( i ) = x ( i ) /U( i , i ) ;
17 end
18 end
21
D Implementação do Método dos Gradientes
Conjugados
IMplementação em MATLAB do método dos gradientes conjugados.
1 f u n c t i o n x = gradConj (A, b )
2
3 [ n , n ] = s i z e (A) ;
4
5 t o l = 0 . 0 0 0 0 0 1 ; % T o l e r a n c i a do r e s i d u o
6
7 x = zeros (n , 1 ) ;
8 s0 = b ; % Chute i n i c i a l e x = 0
9 r 0 = b ; % Chute i n i c i a l e x = 0 , p o i s r = b − A∗x
10 s1 = s0 ;
11 r1 = r0 ;
12
13 f o r k =1:100
14 alpha = ( ( r 1 . ’ ) ∗ r 1 ) / ( ( s1 . ’ ) ∗A∗ s1 ) ;
15 x = x + alpha ∗ s0 ;
16 r 1 = r 0 − alpha ∗A∗ s0 ;
17 i f ( norm ( r1 , I n f ) <= t o l )
18 break ;
19 else
20 beta = ( ( r 1 . ’ ) ∗ r 1 ) / ( ( r 0 . ’ ) ∗ r 0 ) ;
21 s1 = r 1 + b eta ∗ s0 ;
22 s0 = s1 ;
23 r0 = r1 ;
24 end
25 end
26 end
22
E Implementação de interpolação por partes
Com Polinômio de Segundo Grau
Código desenvolvido em MATLAB interpolar um conjunto de pontos utili-
zando um polinômio de segundo grau por partes.
1 function plotPoly2 (x , fx )
2
3 n=l e n g t h ( x ) ;
4
5 inner_points = 20;
6
7 f o r k=1: f l o o r ( n /2 )
8 z = l i n s p a c e ( x (2∗ k−1) , x (2∗ k+1) , i n n e r _ p o i n t s ) ;
9 L = zeros (1 , inner_points ) ;
10 f o r m=1: i n n e r _ p o i n t s
11 f o r i =(2∗k−1) : ( 2 ∗ k+1)
12 c = 1;
13 d = 1;
14 f o r j =(2∗k−1) : ( 2 ∗ k+1)
15 i f ( i ~= j )
16 c = c ∗( z (m)−x ( j ) ) ;
17 d = d ∗( x ( i )−x ( j ) ) ;
18 end
19 end
20 L(m) = L(m) + f x ( i ) ∗( c /d ) ;
21 end
22 end
23 hold on ;
24 plot (z ,L, ’b ’ ) ;
25 end
26
27 end
23
F Implementação de Splines Cúbicas
Código desenvolvido em MATLAB interpolar um conjunto de pontos utili-
zando o método de splines cúbicas.
1 function a = cubicSplineCoefficients (x , fx )
2
3 n = length (x) ;
4
5 % pre−c a l c u l o s
6 h = x ( 2 : n ) − x ( 1 : n−1) ;
7 b = ( f x ( 2 : n )−f x ( 1 : n−1) ) . / h ;
8 v = 2∗( h ( 1 : n−2)+h ( 2 : n−1) ) ;
9 u = 6∗( b ( 2 : n−1)−b ( 1 : n−2) ) ;
10
11 % Cria m a t r i z t r i d i a g o n a l para e n c o n t r a r as d e r i v a d a s
segundas
12 A = d i a g ( h ( 2 : n−2) , −1) + d i a g ( v ) + d i a g ( h ( 2 : n−2) , 1 ) ;
13
17 % I n c l u s a o das c o n d i c o e s n a t u r a i s no v e t o r de
d e r i v a d a s segunda
18 z = [0; z; 0];
19
20 % C a l c u l o dos c o e f i c i e n t e s a1 , a2 , a3 e a4
21 % S i ( x ) = a1 ∗( x−x ( i ) ) ^3 + a2 ∗( x ( i +1)−x ) ^3 + a3 ∗( x−x ( i
) ) + a4 ∗( x ( i +1)−x )
22 a1 = z ( 2 : n ) . / ( ( h ( 1 : n−1) ) ∗6) ;
23 a2 = z ( 1 : n−1) . / ( ( h ( 1 : n−1) ) ∗6) ;
24 a3 = f x ( 2 : n ) . / h ( 1 : n−1)−z ( 2 : n ) . ∗ ( h ( 1 : n−1) ) / 6 ;
25 a4 = f x ( 1 : n−1) . / h ( 1 : n−1)−z ( 1 : n−1) . ∗ ( h ( 1 : n−1) ) / 6 ;
26
27 a = [ a1 a2 a3 a4 ] ;
28
29 end
24
1 function plotSpline (x , fx )
2
3 n = length (x) ;
4
5 a = cubicSplineCoefficients (x , fx ) ;
6
7 inner_points = 20;
8
9 f o r i =1:n−1
10 x_sp = l i n s p a c e ( x ( i ) , x ( i +1) , i n n e r _ p o i n t s ) ;
11 x i = repmat ( x ( i ) , 1 , i n n e r _ p o i n t s ) ;
12 x i 1 = repmat ( x ( i +1) , 1 , i n n e r _ p o i n t s ) ;
13 y_sp = a ( i , 1 ) ∗( x_sp−x i ) .^ 3 + a ( i , 2 ) ∗( xi1−x_sp ) . ^ 3
+ a ( i , 3 ) ∗( x_sp−x i ) + a ( i , 4 ) ∗( xi1−x_sp ) ;
14
15 hold on ;
16 p l o t ( x_sp , y_sp , ’ b ’ )
17 end
18 s c a t t e r ( x , fx , ’ r ’ ) ;
19
20 end
25
G Implementação do Método de Newton para
Sistemas Não-Lineares
Implementação do método de Newton em MATLAB para resolver sistemas
não lieares.
1 f u n c t i o n x = SolveNonLinearSystem ( f , x , t o l )
2
4 w h i l e ( norm ( f ( x ) ) > t o l )
5 j = JacobianNum ( f , x ) ;
6 s = g a u s s ( j ,− f ( x ) ) ;
7
8 x = x + s;
9 end
10
11 end
1 f u n c t i o n j = JacobianNum ( f , x )
2
3 n = length (x) ;
4
5 h = 1e −6;
6
7 j = zeros (n) ;
8
9 H = zeros (n , 1 ) ;
10
11 f o r i =1:n
12 H( i ) = h ;
13 j ( : , i ) = ( f ( x + H) − f ( x − H) ) /(2∗ h ) ;
14 H = zeros (n , 1 ) ;
15 end
16
17 end
26