Você está na página 1de 27

UNIVERSIDADE FEDERAL DE JUIZ DE FORA

Programa de Pós-graduação em Modelagem


Computacional

Filipe Fernandes de Paula

Trabalhos de Métodos Numéricos

Trabalho apresentado à disci-


plina de métodos numéricos do
PGMC na Universidade Federal
de Juiz de Fora.

Professores: Heder e Hélio

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

2 Aproximação da Função Exponencial por Expansão de Tay-


lor 8

3 Solução Numérica de Sistemas Lineares 9


3.1 Eliminaçao de Gauss . . . . . . . . . . . . . . . . . . . . . . . 10
3.2 Método dos Gradientes Conjugados . . . . . . . . . . . . . . . 10
3.3 Sistema Linear Com Matriz de Hilbert . . . . . . . . . . . . . 11

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

5 Solução Numérica de Sistemas Não-Lineares 15

A Implementação de Função Exponencial Por Expansão de Tay-


lor 18

B Implementação da Matriz de Hilbert 20

C Implementação da Elimininação de Gauss 21

D Implementação do Método dos Gradientes Conjugados 22

E Implementação de interpolação por partes Com Polinômio


de Segundo Grau 23

F Implementação de Splines Cúbicas 24

G Implementação do Método de Newton para Sistemas Não-


Lineares 26

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

Um número x pode ser escrito como,

x = xm β e + xr β e−p (2)
onde,

• xm β e parte representável em máquina;

• xr β e−p parte não representável em máquina;

• β é a base;

• p é a precisão do sistema;

• e é o expoente do número x;

• xm e xr são mantissas.

Pode-se, então, aplicar a definição de precisão (equação 1),

|f l(x) − x| |xm β e − (xm β e + xr β e−p )| | − xr β e−p | | − xr β e−p | xr β e−p


= = ≤ ≤
|x| |xm β e + xr β e−p | |xm β e + xr β e−p | |xm β e | xm β e

Pode-se escolher valores para xm e xr para o pior caso,

• O menor valor que xm pode apresentar é 1 (o sistema é normalizado);

• O maior valor que xr pode apresentar é quando x está exatamente à


mesma distância de dois números representáveis em máquina. Para
esse caso, xr = β/2, o que significa, que o máximo erro que pode ser
β
cometido devido ao arredondamento é β e−p
2

2
Assim, pode-se escrever,
β e−p 1
mach = β
2 βe
O que leva à,

β 1−p
mach = (3)
2

1.2 Usar eliminação de Gauss Para Fatorar Uma Matriz


em A = LU
Objetivo: Mostrar que a eliminação de Gauss pode ser usada para fazer
uma fatoração LU de uma matriz (A = LU ).

A eliminação de Gauss consiste em operações que transformam a matriz


A em uma matriz triangular superior U equivalente. O primeiro passo do
método é dado por,

aj,1
(Linha[j] − mj1 · Linha[j] → (Linha[j]), onde mj,1 = (4)
a1,1

As operações acima podem ser representadas por uma matriz, chamada


de matriz de transformação gaussiana, que é dada por,
 
1 0 ... ... 0
. .. 
 −m_{2, 1} 1 . . .

(1)
 .
M =  −m_{3, 1} 0 . . . . .. 
 . . 


 .
.. . . .
.. . . . . 0

−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,

A(2) = M (1) A (5)


Generalizando o método acima, tem-se

A(k+1) = M (k) A(k) = M (k) M (k−1) . . . M (1) A (6)


Onde M (k) é da segunte forma,

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

A(n) = M (n−1) M (n−2) . . . M (1) A = U (7)


Para reverter a eliminação de Gauss é preciso anular os efeitos da matriz
gaussiana. isso pode ser feito multiplicando A(n) = U pelas inversas de M (k) ,
 
1 0 0 ... ... ... 0
0 1 0 0

 .. . . .. 

. . 1 0 .
. .. 
(k) (k) −1 . . . . . . .
L = [M ] =  . 0 .
 
. .. . . .
 .. . mk+1,k . . . . .. 
 
.. .. .. . . . 0
. . . 0 
0 . . . 0 mn,k 0 0 1

 
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.

1.3 Teorema de Diferenças Divididas


Objetivo: Demonstrar a seguinte equivalência,

f (n) (c)
= f [x0 , x1 , . . . , xn ] (9)
n!

Seja f ∈ [a, b] e x0 , x1 , . . . , xn números distintos em [a, b]. Pode-se escrever


uma aproximação polinomial de f da seguinte forma,
n
X i−1
Y
Pn (x) = f [x0 ] + f [x0 , xi ] (x − xj ) (10)
i=1 j=0

Uma função g(x) pode ser definida de forma que g(xi ) = 0, i = 0, 1, 2, . . . , n,

g(x) = f (x) − Pn (x) (11)


ou seja, g(x) tem n + 1 raízes distintas em [a, b]. Dessa forma, pode-se
utilizar o teorema generalizado de Rolle, o qual segue o enunciado,

Teorema Generalizado de Rolle. Para g ∈ C n [a, b], se g(x) = 0 em


n + 1 pontos distintos em [a, b], então existe um número c ∈ [a, b], tal que
g (n) (c) = 0.

Derivando g(x) n vezes, tem-se

g (n) (x) = f (n) (x) − Pn(n) (x) (12)


(n)
Usando a equação 10 para calcular Pn (x), tem-se,

P (n) (x) = f [x0 , . . . , xn ]n! (13)


Substituindo 12 em 13 e usando o Teorema Generalizado de Rolle, chega-
se a,

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!

1.4 Integração Numérica


Objetivo: Montar uma regra de integração numérica na forma
Z 1
f (x)dx = w1 f (−1) + w2 f (t2 ) + w3 f (t3 ) + w4 f (1) (16)
−1

que seja exata para polinômios do mais alto grau possível.


Avalie a regra elaborada num polinômio do maior grau possível e que pos-
sua todos os coeficientes diferentes de zero e mostre que a integral numérica
é exata.

A regra de integração 16 é semelhante à quadratura de Gauss, sendo que


a diferença está no fato de que t0 = −1 e t3 = 1. O polinômio de maior grau
possível é 5.
Pode-se então escrever uma aproximação para função f (t) como,

f (t) = c0 φ0 (x) + c1 φ1 (x) + c2 φ2 (x) + c3 φ3 (x) + c4 φ4 (x) + c5 φ5 (x) (17)

Com φi (x) = ti , t1 = −1 e t4 = 1. De acordo com o método dos coefici-


entes indeterminados, podemos escrever,
R1
φ0 =1 ⇒ w1 + w2 + w3 + w4 = −1 dt = 2
R1
φ1 =t ⇒ −w1 + w2 t2 + w3 t3 + w4 = −1 tdt = 0
R1
φ2 = t2 ⇒ w1 + w2 t22 + w3 t23 + w4 = −1 t2 dt = 2/3
R1
φ3 = t3 ⇒ −w1 + w2 t32 + w3 t33 + w4 = −1 t3 dt = 0
R1
φ4 = t4 ⇒ w1 + w2 t42 + w3 t43 + w4 = −1 t4 dt = 2/5
R1
φ5 = t5 ⇒ −w1 + w2 t52 + w3 t53 + w4 = −1 t5 dt = 0

Dessa forma, tem-se o sistema de equações não-lineares 18, que ao ser


resolvido fornece: wi e ti necessários para definir a regra de integração sendo
desenvolvida.

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

Para resolver o sistema 18 é preciso simplifica-lo, assumindo que t2 = −t3 .


Assim, é possível desconsidera última equação do sistema e aplicar o método
de Newton, então encontrando o seguinte resultado,

Tabela 1: Resultado obtidos na resolução do sistema 18.


w1 0.1666666666
w2 0.8333333333
w3 0.8333333333
w4 0.1666666666
t2 0.4472135954
t3 = −t2 -0.4472135954

I = 0.1666666666(f (−1) + f (1)) + 0.8333333333f (0.4472135955)+


(19)
0.8333333333f (−0.4472135955)

Para verificar que a fórmula 19 é exata para polinômios de grau 2n −


3, vamos comparar o resultado dado pela regra encontrada e a integração
convencional. Parra isso, utiliza-se o polinômio genérico 20 de grau 5 (para
n = 4).

φ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

Dessa forma, podemos verificar que a integração numérica utilizando qua-


dratura de Lobatto é exata para um polinômio de grau ≤ 2n − 3.

2 Aproximação da Função Exponencial por Ex-


pansão de Taylor
Série de Taylor (equação 23) é uma ferrementa que permite representar fun-
ções em uma série de potência. Esse fato é extremamente útil, e é amplamente
utlizada para várias aplicaçoes em diversas áreas.

X f (n) (x0 )
f (x) = (x − x0 )n (23)
n=0
n!
A expansão de Taylor pode ser usada para avaliar funções de difícil repre-
sentação em um computador, como função exponencial. Expandido a função
exponencial em série de Taylor com x0 = 0, tem-se,

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;

• O valor de xn cresce excessivamento, não havendo representação para


tal número;

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

Tabela 2: Resultados obtidos.


x expo(x) exp(x) expo(x) − exp(x)
1 2.718282 2.718282 2.994566e-016
5 1.484132e+002 1.484132e+002 3.191891e-014
10 2.202647e+004 2.202647e+004 5.902834e-012
15 3.269017e+006 3.269017e+006 3.092282e-011
20 4.851652e+008 4.851652e+008 1.199078e-007
-1 3.678794e-001 3.678794e-001 4.306993e-017
-5 6.737947e-003 6.737947e-003 1.639432e-018
-10 4.539993e-005 4.539993e-005 9.423242e-021
-15 3.059023e-007 3.059023e-007 2.481542e-024
-20 2.061154e-009 2.061154e-009 4.564034e-025

3 Solução Numérica de Sistemas Lineares


Sistemas lineares são conjuntos de equações acopladas. Essas equações são
provenientes da modelagem matemática de um problema multivariável. A
solução do sistema fornece os valores das n varáveis independentes,
Os sistemas lineares são frequentemente escritos em formato de matrizes,
como a seguir,

[A]{X} = {B} (26)

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.

3.1 Eliminaçao de Gauss


Eliminação de Gauss é um método utilizado encontrar solução de sistemas
lineares. Este método consiste em aplicar sucessivas operações elementares
em um sistema linear, para transforma-lo em um sistema triangular superior,
deforma que ambos sistemas tenham as mesmas soluções.
Com a matriz A transformada em uma matriz U triagular superior equiva-
lente, é possível encontrar o vetor de soluções X facilmente apenas utilizando
retrosubstituições.
   
a11 a12 a13 . . . a1n u11 u12 u13 . . . u1n
 a21 a22 a23 . . . a2n   0 u22 u23 . . . u2n 

   
 .. .. .. ... ..   .. .. .. . . .. 
 . . . .   . . . . . 
an1 an2 an3 . . . ann 0 0 0 . . . unn

3.2 Método dos Gradientes Conjugados


O método do gradiente conjugado é um método iterativo, utilizado para so-
lução de sistemas lineares com matriz simétrica e positiva definida. Esse
método é indicado para solução de sistemas com matrizes esparsas, que fre-
quentemente aparecem em aplicações.
O algoritmo se baseia em reduzir o resíduo (r = b−Ax) a cada iteração, de
forma que o vetor solução X convirja. Para isso é definida uma função f (x)
(equação 27), de tal forma que 5f (x) = Ax − b. Assim, fazendo 5f (x) = 0
tem-se a solução do sistema, ou seja, a solução de Ax = B é igual ao ponto
de minímo de 5f (x).
1
f (x) = X T AX − X T b (27)
2
Assim, o método dos gradientes conjugados tem os seguintes passos,

1. Estimativa inicial de X (0) ;

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) ;

3.3 Sistema Linear Com Matriz de Hilbert


A matriz de Hilbert é uma matriz quadrada simétrica e positiva definida, em
que os elementos são dados por,
1
Hij = (28)
i+j−1
Essa matriz tem a característica de ter seu condicionamento piorado a
medida que que sua dimensão aumenta. Dado um problema em que é pre-
ciso resolver um sistema linear que a matriz A é de Hilbert e o vetor B é
encontrado de forma que Xi = 1.25, tem-se os resultados da tabela 3.

Tabela 3: Resultado para Solução de sistemas lineares utilizando a matriz de


Hilbert.
||X||∞
n
Eliminação Método dos
de Gauss Gradientes Conjugados
4 1.250000000000679 1.250000001670359
6 1.250000000087363 1.256009367443071
8 1.250000115977172 1.261276188350049
10 1.250055470573613 1.253891076485558
12 1.550152442330903 1.256435408724752
14 30.227263386454485 1.259068385005129
16 29.922353243087652 1.261638930057563
18 30.861495154512276 1.264065814000261
20 50.482156771860183 1.253480007600434

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.

Tabela 4: Pontos a serem interpolados (parte 1).


x 0.9 1.3 1.9 2.1 2.6 3.0 3.9 4.4 4.7 5.0 6.0
f (x) 1.3 1.5 1.85 2.1 2.6 2.7 2.4 2.15 2.05 2.1 2.25

Tabela 5: Pontos a serem interpolados (parte 2).


x 7.0 8.0 9.2 10.5 11.3 11.6 12.0 12.6 13.0 13.3
f (x) 2.3 2.25 1.95 1.4 0.9 0.7 0.6 0.5 0.4 0.25

Figura 1: Pontos a serem interpolados

12
Figura 2: Objetivo de se aplicar interpolação.

4.1 Interpolação por Partes Com Polinômio de Segundo


Grau
Uma maneira de abordar o problema é interpolar o conjunto de pontos uti-
lizando vários polinômios de segundo grau. Cada polinômio Pk (x) interpola
um total de três pontos, de forma que são necessários um conjunto de polinô-
mios para interpolar os pontos. Aplicando essa técnica não há continuidade
da primeira derivada ao longo dos polinômios.
Para encontrar os polinômios de segundo grau pode-se utilizar a forma
de Lagrange (equação 29) em cada subconjunto de três pontos.

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

Aplicando o método descrito, o resultado pode ser observado na figura 3.


Pode-se observar a descontinuidade da derivada primeira entre os polinômios.

4.2 Splines Cúbicas


Interpolação por spline é uma técnica que utiliza polinômios de grau k con-
tínuo por partes e derivável k − 1 vezes. No caso de uma spline cúbica, o
polinômio é de grau 3 e duas vezes continuamente diferenciável. pode-se
definir a spline como,

Si (x) = ai x3 + bi x2 + ci x + di , ti ≤ x ≤ ti+1 , i = 1...n (31)

13
Figura 3: Conjunto de polinômios de segundo grau interpolando pontos.

Onde ti são os pontos a serem interpolados e x um ponto que pode ser


obtido através da interpolação. Para uma interpolação suave, é preciso que
os polinômios dados por 31 satisfaçam as seguintes condições,
1. Si (xi ) = f (xi ) e Si (xi+1 ) = f (xi+1 );
2. Si+1 (xi+1 ) = Si (xi+1 );
0
3. Si+1 (xi+1 ) = Si0 (xi+1 );
00
4. Si+1 (xi+1 ) = Si00 (xi+1 );
Escolhendo uma spline cúbica natural, tem-se as seguintes condições adi-
cionais,
5. S 00 (x1 ) = S 00 (xn ) = 0;
Manipulando algebricamente os plolinômios Si (x) e aplicando as condi-
ções 1 a 5, tem-0se os seguintes resultados,
   
zi+1 3 zi 3 f (xi+1 ) zi+1 f (xi ) zi
Si (x) = (x−ti ) + (ti+1 −x) + − hi (x−ti )+ − hi (ti+1 −x)
6hi 6hi hi 6 hi 6
(32)
Onde hi = ti+1 − ti . O termo zi = S 00 (xi ) pode ser encontrado resolvendo
o seguinte sistema,
    
v1 h2 z2 u2
h2 v2 h3   z3   u3 
.. .. ..
    
. . .   z4   u4 
=

  
. .   ..   .. 
.. . . hn−3   .   . 


hn−3 vn−2 zn−1 un−1

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;

• ui = 6(bi − bi−1 ), i = 1...n − 2;

• z1 = zn = 0.

4.2.1 Aplicação de Splines Cúbicas


Aplicando splines cúbicos no conjunto de pontos tem-se o resultado mostrado
na figura 4.

Figura 4: Splines cúbicas.

5 Solução Numérica de Sistemas Não-Lineares


A solução de sistemas não-lineares consiste em linearizar o sistema, e então
resolver o sistema linear resultante. A linearização, em geral, é feita pelo
cálculo da matriz Jacobiana. utilizando o método de Newton é possivel
encontrar a solução de sistemas lineares como a seguir,

xk+1 = xk − Jf−1 (xk )f (xk ) (33)

∂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,

Jf (xk )sk = −f (xk ) (35)

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};

for(i = 0; i <= 8; i++)


{
printf("%lf \t\t %lf \t\t %e\n\n", expo(nums[i]), exp(nums[i
]), fabs(expo(nums[i]) - exp(nums[i])));
}

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

3 function A = createHilbert (n)


4

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

1 % C a l c u l a a s o l u c a o X de um s i s t e m a Ax=b , para A sendo


uma m a t r i z t r i a n g u l a r s u p e r i o r .
2

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

14 % z e o v e t r o de d e r i v a d a s segundas em cada ponto


15 z = g a u s s (A, u ) ;
16

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

Você também pode gostar