Você está na página 1de 77

Introdução à Física Computacional

Klaus Cozzolino

Professor Associado da Faculdade de Física


Instituto de Ciências Exatas e Naturais
da Universidade Federal do Pará - PA

Belém 27 de outubro de 2014


ii

Editor:
Capa
Impressão

Cozzolino, Klaus
Introdução à Física Computacional / Klaus Cozzolino –
1.ed. – Pará: Editora....., 2014
Bibliografia
1. Física – Métodos Computacionais I. Título

Índices para catálogo sistemático

Física: Física Computacional

ISBN:

Editora
Telefone
Fax
Endereço eletrônico:
Sumário

Prefácio v

1 Introdução 1
1.1 Ementa e Objetivo da disciplina . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Conceitos iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3 Fluxogramas e Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4 Comandos, estruturas e scripts no ambiente Octave/Matlab . . . . . . . . . . . . 4
1.5 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2 Integração e Diferenciação Numéricas 11


2.1 Integrais definidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.1 Regra do Trapézio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.2 Regra de Simpson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2 Quadratura Guassiana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.1 Quadratura Gauss-Legendre . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3 Integrais Impróprias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3.1 Quadratura Gauss-Laguerre . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.4 Diferenciação Numérica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4.1 Aproximações de primeira e segunda ordem para f 0 (x) . . . . . . . . . . . 20
2.4.2 Aproximações de primeira e segunda ordem para f 00 (x) . . . . . . . . . . . 21
2.4.3 Aproximações de f 0 (x) e f 00 (x) cúbicas e quárticas . . . . . . . . . . . . . 21
2.5 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3 Raízes de Funções de uma Variável 25


3.1 Método da Iteração Linear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.1.1 Convergência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.2 Método de Newton-Raphson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2.1 Convergência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.3 Método da Secante (Régula Falsi) . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.4 Método da Bisseção . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.5 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

iii
iv SUMÁRIO

4 Ajuste de Curvas 31
4.1 Mínimos Quadrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.1.1 Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.1.2 Mínimos Quadrados Ponderados . . . . . . . . . . . . . . . . . . . . . . . 34
4.2 Ajuste por uma função qualquer (Newton e Gauss-Newton) . . . . . . . . . . . . 36
4.3 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

5 Sistema de Equações Lineares 45


5.1 Definições . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.2 Método de Gauss (Eliminação Gaussiana) . . . . . . . . . . . . . . . . . . . . . . 46
5.3 Método de Gauss-Jordan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.4 Decomposição LU (ou Fatoração LU) . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.5 Método Iterativo de Jacobi-Richardson . . . . . . . . . . . . . . . . . . . . . . . . 49
5.6 Método de Gauss-Sidel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.7 Convergência dos métodos Iterativos . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.8 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

6 Solução de Equações Diferenciais Ordinárias 55


6.1 Decaimento Radioativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.2 Equação de Poisson 1-D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
6.2.1 Algoritmo de Thomas - Sistemas tridiagonais . . . . . . . . . . . . . . . . 58
6.3 Oscilações Simples, Amortecidas e Forçadas . . . . . . . . . . . . . . . . . . . . . 61
6.3.1 Oscilador Harmônico Simples . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.3.2 Oscilações Forçadas com Amortecimento . . . . . . . . . . . . . . . . . . . 63
6.4 Algoritmo Verlet (Velocity-Verlet) . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
6.5 Sistemas de Equações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
6.6 Método de Runge-Kutta 4ª Ordem . . . . . . . . . . . . . . . . . . . . . . . . . . 67

Referências Bibliográficas 71
Prefácio

Os leitores encontrarão nesta primeira edição do livro uma introdução à linguagem de progra-
mação básica a ser desenvolvida e exercitada em ambientes como Octave, FreeMat e também
Matlab. Os dois primeiros ambientes podem ser baixados gratuitamente e instalados tanto no
sistema operacional Windows como sistema Linux.
Sendo esta disciplina interdisciplinar pressupõe-se que os estudantes possuam conhecimentos
anteriores das físicas básicas, da algeba linear e das disciplinas de cálculo diferencial e integral.
O conhecimento prévio de programação, embora desejável, não constitui condição imperativa ao
bom desempenho dos estudantes em face da enorme rede de informações e dos materiais nela
disponibilizados.
Ao longo dos capítulos algumas técnicas numéricas clássicas são apresentadas com o objetivo de
reforçar o aprendizado das estruturas básicas de programação bem como de suas aplicações em
problemas físicos. As técnicas numéricas somadas a programação são novidade para a maioria
dos estudantes o que naturalmente exigirá um pouco mais de dedicação para a sua melhor
assimilação.
Gostaria de agradecer ao Professor Dr. João Furtado de Souza por sua iniciativa de propor a
publicação desta primeira edição do livro que embora incompleta (parte I), constitui mais uma
ferramenta a deslanchar o ensino de Física, tanto teórico como experimental.
vi PREFÁCIO
Capítulo 1

Introdução

1.1 Ementa e Objetivo da disciplina

Introdução a linguagem científica de programação a ser usada no curso OCTAVE/FreeMat/Ma-


tLab. Introdução aos métodos básicos de cálculo numérico: zeros de função, ajuste de dados,
integração, diferenciação e solução de sistemas algébricos. Solução de equações diferenciais ordi-
nárias por métodos explícitos e implícito que modelem sistemas físicos (opcional).
Objetiva-se neste curso fornecer meios para que o(a) estudante receba, por uma abordagem
moderna, as informações básicas, mas necessárias para o uso das facilidades computacionais
existentes na maioria das Escolas, Faculdades e Universidades bem como em sua própria resi-
dência. Neste contexto pretende-se que o(a) aluno(a) tenha, ao final do curso, desenvolvido a
lógica de programação e assimilado as técnicas numéricas que porventura possam auxiliar em
sua vida acadêmica e profissional.

1.2 Conceitos iniciais

Linguagem de programação: comunicação pessoa ⇐⇒ computador.


Como exemplo de linguagens de programação temos:

• ASSEMBLY - Esta linguagem de programação foi criada no meio da década de 50 para


substituir a linguagem de máquina (linguagem binária que a Unidade Central de Proces-
samento ou CPU entende).

• ALGOL - ALGOrithmic Language. Criada em 1958 é constituída por uma mistura de lin-
guagens de programação. Considerada a primeira linguagem de programação estruturada.

• COBOL - COmmon Business Oriented Language. Criada em 1960 com objetivo de ma-
nipular grandes arquivos. Utilizado por bancos e empresas para manutenção de contas
correntes, folhas de pagamento, controle de estoque e outras aplicações.

• BASIC - Beginner’s All-purpose Symbolic Instruction Code. Foi criada em 1964 no Dart-
mouth College e muito utilizada nos primeiros computadores pessoais (PCs).

• VBASIC - Visual Basic. Evolução da Linguagem Basic, muito usada na construção de


aplicativos para sistemas Windows como MSOffice e outros aplicativos gráficos.
2 CAPÍTULO 1. INTRODUÇÃO

• PASCAL - Criada em 1970 por Niklaus Wirth, tinha por objetivo a substituição do BASIC
por ser uma linguagem estruturada e robusta. As liguagens de programação Turbo Pascal
e Delphi são evoluções do PASCAL.

• C - Foi lançada em 1972 para o desenvolvimento de sistemas operacionais UNIX sua evo-
lução resultou na linguagem C++ muito utilizada para programação científica.

• FORTRAN - FORmula TRANslation. A primeira versão padronizada foi lançada em 1966


tendo o nome de FORTRAN66. Aprimoramentos do compilador culminaram nas versões
FORTRAN 77, 90 e 95, 2003 e 2008.

• JAVATM - muito utilizada atualmente em ambientes de internet, nos celulares, tablets, em


vizualizações 3D e aplicativos gráficos. Desenvolvida pela companhia Sun Microsystems é
uma linguagem de programação multiplataforma.

Qualquer que seja a linguagem de programação usada precisamos seguir algumas importantes
etapas para que tenhamos sucesso. São elas

1. planeje os projetos antecipadamente - identifique as principais variáveis a serem usadas nos


cálculos, o método ou métodos numéricos a serem empregados e como os resultados devem
ser apresentados;

2. desenvolva-os por estágios - início, corpo e saídas;

3. modularize-os - se possível estruture seu programa em módulos estanques;

4. mantenha-o simples - códigos complexos dificultam a depuração, ou seja, a identificação e


remoção dos erros tipográficos, lógicos e metodológicos;

5. sempre teste cada estágio - a saída de um estágio (dados, números, decisões) é normalmente
usada no próximo módulo. Se um estágio estiver com erros os resultados do próximo
também estarão errados;

6. documente todo o programa - insira comentários para facilitar a compreensão das etapas
sempre que julgar necessário;

7. obtenha e interprete seus resultados

denominadas de REGRAS de OURO da PROGRAMAÇÃO ou golden rules na língua inglesa


(RINO, 2008).

1.3 Fluxogramas e Algoritmos

Todo programa - ou código fonte - é escrito com um editor de texto normalmente muito simples
como o Notepad (do Windows), o Vi (do Linux), o Edit (no DOS) mas é possível editar também
em ambientes de programação próprios à linguagem em uso como o MSDeveloperStudio para
Fortran ou C++ ou Visual Studio C++.
Os programas mais simples assemelham-se à uma redação possuindo início, meio e fim (ou con-
clusão). O início de um programa é normalmente denominado de etapa de inicialização e/ou
entrada de dados: contém informações importantes que serão utilizadas tais como constantes,
dimensões de matrizes e de vetores bem como valores iniciais. O corpo do programa contém as
instruções principais a serem passadas à Unidade de Processamento Central (CPU) da máquina
1.3. FLUXOGRAMAS E ALGORITMOS 3

para que a mesma realize as tarefas. É nesta etapa que os cálculos são realizados através de
linhas de comando/instruções específicas à cada linguagem de programação, i. e.
a = 2 + b, atribua ao a o resultado da soma de 2 com b e
c = a ∗ exp(−b ∗ t), atribua ao c o resultado das operações.
Na conclusão do código fonte encontramos instruções como saída de resultados para arquivos,
saídas gráficas ou simplesmente uma mensagem de finalização da execução. Uma simples saída
como “Aplique na Ação X” ou “NÃO Aplique na Ação Y” pode ser o resultado de inúmeras
linhas de instruções de um código executável.
O Algoritmo: é um conjunto resumido de instruções (ou comandos) a serem realizadas pelo
computador.
O Fluxograma: apresenta as instruções de um algoritmo na forma gráfica através de figuras
geométricas com as instruções principais em seu interior.
Exemplos de algoritmos, fluxogramas introdução a programação podem ser encontrados em GUS-
MAN; VASCONCELLLOS (1985); MEDINA; CRISTINA (2005).

Exemplo 1: desejamos construir uma tabela com 1000 linhas que contenha em suas colunas o
tempo, a velocidade e a posição de um objeto que se desloca com aceleração constante.
Para isso usamos as equações da Física pertinentes à cinemática inserindo, via teclado,
alguns dados iniciais como posição e velocidade em t = to . Abaixo temos um exemplo de
fluxograma e um do algoritmo desenvolvido para tal fim.
.

1. Inicialize as variáveis: N = 0, dt = 0.1, a,


vo, xo, to

2. Calcule:
novo tempo t = to + N*dt;
nova velocidade v = vo + a*t;
nova posição x = xo +vo*t +0.5*a*t^2
3. Escreva em TAB.DAT: t , v e x

4. Incremente o valor de N: N = N + 1

5. Se N < 1000 vá para o passo 2 caso con-


trário 6

6. Fim

Figura 1.1: Exemplo de Fluxograma (à esquerda) e Algoritmo (à direita) para geração de uma ta-
bela de dados (arquivo TAB.DAT) com 1000 linhas contendo em cada linha tempo (t), velocidade
(v) e posição (x).
4 CAPÍTULO 1. INTRODUÇÃO

Observe e reflita: no fluxograma encontramos uma figura de decisão (losango) com a instrução
“ N é maior ou igual a 1000? “. Porém, no item 5 do algoritmo tem-se, “ Se N for menor do
que 1000 vá ...”. Estas instruções são claramente diferentes mas realizam o mesmo propósito: a
repetição das instruções necessárias a construção de uma tabela contendo o tempo, a velocidade
e a posição de um móvel em movimento retilíneo uniformemente acelerado - MRUA.

1.4 Comandos, estruturas e scripts no ambiente Octave/Matlab

Como em qualquer ambiente de programação é importante sabermos passar para o computador


um conjunto de comandos para que o mesmo compreenda e execute. A Tabela 1.1 abaixo
contém alguns comandos e estruturas encontrados na maioria dos programas científicos. Os
dois primeiros são estruturas de laço usados para executar repetidamente uma instrução ou um
conjunto de instruções ou operações com diferentes dados a cada laço. O terceiro caso é usado
em situações que exijam decisão, por exemplo, se o relógio estiver parado dê corda e acerte a
hora, caso contrário não faça nada.
Informações adicionais das funções pré-definidas no ambiente Matlab são encontradas em JA-
LÓN J. G. D.N; RODRÍGUEZ; VIDAL (2005) bem como nos arquivos de ajuda (help) que vêm
junto com o aplicativo THE MATHWORKS (2002).

Exemplo 2: para criar um vetor linha com quatro elementos escrevemos na linha de comando
- prompt - do ambiente Matlab (>‌>):
>> v = [ 0 . 0 0 . 5 0 . 9 1 . 2 ] ;

e teclamos enter. Os elementos do vetor devem estar separados por espaço ou vírgulas.
Um vetor com elementos igualmente espaçados de 0.1, que inicie com 0 e termine com 0.5,
pode ser criado usando a linha de comando:
>> v i = 0 : 0 . 1 : 0 . 5 ;

o que resultará após a execução na atribuição de seis elementos à variável vi: vi = [0.0 0.1
0.2 0.3 0.4 0.5]. Se desejamos definir uma matriz 4x4 usamos
>> M = [ 0 . 5 3 . 0 2 . 5 3 . 6 ; 1 . 0 6 . 0 3 . 0 2 . 8 ; 2 . 0 5 . 0 3 . 0 4 . 0 ; . . .
1.0 8.0 4.0 2 . 0 ] ;

onde a quebra da linha da matriz é indicada pela inserção do ’ ; ’ (ponto e vírgula).


Multiplicar a matriz M por um vetor coluna vt ou seja o vetor transposto de v fazemos:
>> v1 = M ∗ v ’ ;

Já uma matriz inversa pode ser obtida com o comando inv :


>> IM = i n v (M) ;

Para obtermos o quadrado dos valores de um vetor usamos a multiplicação elemento-a-


elemento ’.*’:
>> v2 = v . ∗ v ;

cujo resultado é a atribuição dos valores [02 0.52 0.92 1.22 ] = [0 0.25 0.81 1.44] a
variável v2. Porém se fizermos
>> r e s = v ∗ v ’ ;
1.4. COMANDOS, ESTRUTURAS E SCRIPTS NO AMBIENTE OCTAVE/MATLAB 5

Tabela 1.1: Estruturas e comandos iniciais em MATLAB/OCTAVE.

Comando/ Estrutura Exemplo Comentário


for i = 1 : N;
estrutura de laço - para i
comando 1 ;
for ... end variando de 1 até N repita
comando 2; ...
comando 1 e comando 2
end;
while condição; estrutura de laço - enquanto
while ... condição ... comando1 ; condição for verdadeira
end; comando2 ; ... repita as instruções comando
end; 1 e comando 2
if condição;
estrutura de decisão - se
comando 1;
condição for verdadeira
if ... else ... end; else;
execute comando 1 caso
comando 2;
contrário exec comando2
end;
+e- y=z+w-I soma e subtração
*e/ x = vo + a * t; y = z / x ; multiplicação e divisão
^ y = yo + a * t^2 potenciação ou radiciação
cos , acos , sin , asin,
operações trigonométricas e
tan , atan , sec , asec , a = cos(x) , arc = asin(M)
suas inversas (radianos)
...
lista as variáveis e bem como
whos whos
suas dimensões
suprime todas as variáveis do
clear clear ; clear x y z espaço de trabalho ativo e
suprime apenas x, y e z
no. de elementos do vetor x e
length( ) length(x) ; length(M) max. dimensão da matriz M

inicializa uma matriz 3x2 com


zeros( ) , ones( ) M=zeros(3, 2) ; N=ones(3, 2) todos elementos nulos ou uns

( ... ) y = 2*pi / (3 * y) indica preferência na operação


help comando ou lista uma ajuda sobre o
help plot
função comando plot
carrega na memória os dados
contidos no arquivo nome.ext
load load nome.ext -ascii
e cria uma matriz no ambiente
Matlab
salva no diretório corrente
os dados armazenados em
save save nome.ext variável -ascii
variável no arquivo
nome.ext
transposição do vetor/matriz
(valores reais) ou
’ vt = v’ ; Mt = M’ ;
transposição do complexo
conjugado
6 CAPÍTULO 1. INTRODUÇÃO

o resultado será o produto interno (escalar) ~v · ~v = 02 + 0.52 + 0.92 + 1.22 = 2.5. A sutil
diferença - o ponto antes do sinal de multiplicação - instrui a CPU que: multiplique o
primeiro elemento de v (antes de .* ) com o primeiro elemento de v (depois de .*) assim
sucessivamente até os últimos elementos dos vetores, armazenando cada resultado no vetor
v2. Se usarmos
>> v2 = v . ^ 2 ;

também obtemos um vetor resultante v2 idêntico ao anterior onde cada elemento de v2 é


o quadrado do respectivo elemento em v. Se desejamos criar uma matriz 3x3 com todos os
elementos nulos podemos usar o comando zeros na forma
>> MZ = z e r o s ( 3 , 3 ) ;

e atribuímos valores a cada elemento da matriz usando por exemplo


>> MZ( 1 , 1 ) = 5 . 0 ; % o e l e m e n t o de MZ l i n h a 1 c o l u n a 1 p a s s a a s e r 5 . 0
>> MZ( 2 , 3 ) = 1 . 0 ; % o e l e m e n t o de MZ l i n h a 2 c o l u n a 3 p a s s a a s e r 1 . 0

Exemplo 3: O código fonte depende da linguagem de programação.

Código fonte do Exemplo 1 em FORTRAN Código fonte do Exemplo 1 em MA-


TLAB/OCTAVE
program tabela
! cria TAB.DAT c/ t v e x % tabela.m
integer :: N, Nlin=1000 % cria TAB.DAT c/ t v e x
real :: dt=0.1 Nlin = 1000;
real :: t, v, x, to, vo, xo dt = 0.1;
print*,’entre c/ a,to,vo,xo’ a =input(’Entre c/ a :’);
read*,a,to,vo,xo to=input(’Entre c/ to:’);
open(unit=10, file=’TAB.DAT’,& vo=input(’Entre c/ vo:’);
status=UNKNOWN) xo=input(’Entre c/ xo:’);
N = 0 fid = fopen(’TAB.DAT’,’w’);
do while (N < Nlin) N = 0;
t = to + N * dt while N < Nlin;
v = vo + a * t t = to + N * dt;
x = xo + vo *t + 0.5* a * dt v = vo + a * t;
write(10,*) t, v, x x = xo + vo *t + 0.5* a * dt;
N = N + 1 fprintf(fid,’%e %e %e \n’,t,v,x);
end do N = N +1;
close(10) end;
write(6,*) ’FIM DA EXECUÇÃO’ fclose(fid);
stop disp(’FIM DA EXECUÇÃO’)
end
Figura 1.2: Códigos fonte em FORTRAN (à esquerda) e Matlab/OCTAVE (à direita).

No código para Matlab acima as duas primeiras linhas são comentários e portanto não
são executadas: começam com “ % ”. Na terceira e quarta linhas são inicializadas as
variáveis número de linhas da tabela (Nlin) e incremento do tempo (dt). Da quinta a
oitava linha vemos as instruções de entrada de dados via teclado (comando input). O
arquivo “ TAB.DAT ” é aberto para escrita na nona linha. Na décima linha inicializa-se
o contador “N” necessário à estrutura de laço “ while ” compreendido entre as linhas 11
à 18. Dentro do laço as instruções serão executadas enquanto a condição ” N < Nlin “
1.4. COMANDOS, ESTRUTURAS E SCRIPTS NO AMBIENTE OCTAVE/MATLAB 7

for verdadeira. Os valores de t, v e x são alterados a cada execução do laço while e o


comando fprintf instrui a máquina a escrever os valores das variáveis em uma linha no
formato científico (%e) 1.2345678e00 que equivale a 1.2345678 × 1000 . O “ \n ” instrui o
computador a pular de linha após escrever os valores numéricos de t, v e x no arquivo, isto
para cada valor do contador N . Na sequência o valor de N é incrementado de uma unidade
para um nova repetição das instruções dentro do laço. Quando N for igual a 1000 o laço
é interrompido e o computador irá executar a linha posterior ao end ou seja irá fechar o
arquivo “ TAB.DAT ” para então escrever na janela de comando do ambiente Matlab o fim
da execução do script “ tabela.m ”.
Deve-se ressaltar que em ambos os códigos existe um erro no cálculo de x(t): o último termo
da equação deveria ter 0.5*a*t*t. Este tipo de erro não é incomum, ou o programador
desconhece a equação da cinemática ou ocorreu erro de digitação. Em ambos os casos os
resultados da posição da partícula no arquivo TAB.DAT estarão errados!
Exemplo 4: A série de Taylor da funçao f (x) = sen(x) é dada por

x3 x5 x7 X (−1)k+1 x2k−1
f (x) = sen x = x − + − + ··· =
3! 5! 7! (2k − 1)!
k=1

Para responder quantos termos são necesários para que o resultado da série em x = π/3
tenha precisão de 4 casas decimais foi desenvolvido o seguinte algoritmo

1- limpar memória
2- definir soma como zero
3- definir precisão desejada
4- inicializar o contador k ← 0
5- definir ponto x
6- enquanto |termo| > = precisao faça
k ←k +1
termo ← (-1)^(k +1) * x^(2*k -1) / (2*k -1) !
soma ← soma + termo
fim do laço 6
7- escreva o valor do contador k
8- escreva o resultado do seno de x

Trasncreva o algoritmo para linguagem Octave/MatLab - use o editor. Salve e execute


o script.
Observações: no ambiente Matlab/Octave o fatorial de um número (num) é obtido usando
a instrução factorial(num). Um erro frequente ao codificar o algoritmo acima para uma
linguagem de programação pode ocorrer: o valor da variável termo não foi definido antes
do teste na instrução de número 6. O valor absoluto de um número é obtido com a função
abs(num).
Exemplo 5: Um número denominado de precisão da máquina (eps) tem valor aproximado de
2, 22 × 10−16 . Ao somar ou subtrair este valor de um escalar o resultado permanece inal-
terado. Com o intúito de calcular o eps o seguinte algoritmo foi desenvolvido

1- limpar memória
2- definir um como 1
3- definir eps como um
4- enquanto eps + um > um faça
eps ← eps/2
fim do laço 4
8 CAPÍTULO 1. INTRODUÇÃO

5- escreva o valor encontrado de eps

Trancreva o algoritmo para a linguagem Octave/MatLab, salve e execute o script.

Exemplo 6: Segundo ?, p. 362 a função de Bessel de primeiro tipo e ordem zero pode ser
expressa segundo

X (−1)k  x 2k
J0 (x) = .
(k!)2 2
k=0

Em virtude de limitações computacionais esta série deverá ser truncada em N termos antes
de ser utilizada em um código (programa). Estamos interessados em determinar quantos
termos devemos usar para atingir o limite de precisão do computador (o eps).
Para simplificar a estimativa do número de termos da série cosideremos x = 2. O fator
principal que determinará a magnitude do termo da série será o denominador (k!)2 logo,
ao igualar este termo ao eps teremos
s
1 1016
2, 22 × 10−16 = → N ! = → N ! ≈ 68 × 106 .
(N !)2 2, 22

Usando divisões sucessivas teremos: 68 × 106 /2/3/4/5/6/7/8/9/10/11 = 1, 7 ⇒ N ≈ 11,


ou seja, são necessários aproximadamente onze termos da série para alcançar a precisão da
máquina.
Para testar a estimativa acima o seguinte algoritmo foi desenvolvido

1- limpar memória
2- definir soma como zero
3- definir precisão desejada (= eps)
4- inicializar o contador k ← 0
5- definir ponto x ← 2
6- definir termo (deve ser maior que o valor em precisão)
7- enquanto |termo| > = precisao faça
termo ← (-1)^k * (x/2)^(2*k ) / (k !)^2
soma ← soma + termo
k ←k +1
fim do laço 7
8- escreva o valor do contador k

Tomando por base o algoritmo programe um script para Octave, salve e execute-o. O
resultado de k ao final da execução está de acordo com o que foi calculado para N ?

Observação: a instrução plot nos permite gerar gráficos de dados tabelados. Se desejamos
o gráfico de x(t) é necessário que exista na memória do computador os dados dos pares
ordenados (t, x). Os gráficos normalmente são acompanhados por textos explicativos nos
eixos horizontal xlabel e vertical ylabel. Vejamos um exemplo simples de como gerar um
gráfico completo com a instrução plot e as instruções auxiliares:

>‌> t = 0 : 0.1 : 2*pi ; % cria lista de valores de tempo


>‌> x = 2 * t.^2 - 3 * t + 5 ; % cria lista de valores de x p/ cada t
>‌> plot(t, x) ; % gera o gráfico de x(t)
>‌> xlabel(’t (s)’) ; ylabel(’x (m)’); % introduz textos nos eixos
>‌> title(’x(t)’); % introduz o título do gráfico
>‌> grid % linhas auxiliares (grade)
1.5. EXERCÍCIOS 9

1.5 Exercícios
1.1- Edite um arquivo de nome “tabela.m” copiando o script (código fonte) para Matlab/Octave
apresentado na Figura1.2. No ambiente Matlab execute o código e verifique a presença do
arquivo TAB.DAT no diretório de trabalho, após a execução do script. Abra o arquivo
TAB.DAT com o editor e verifique se número de linhas está correto.

1.2- Ao final do código (script) “tabela.m” adicione a linha load TAB.DAT e abaixo outra
linha plot(TAB(:,1), TAB(:,3),’b–’); grid; salve, execute o código e descreva o que
aconteceu. Mude ’b–’ no comando gráfico plot para ’ro’, salve, execute o script e
descreva o que ocorreu. Digite help plot no prompt (>‌>) do ambiente MATLAB, leia o
texto e tire suas conclusões.

1.3- (a) Crie um algoritmo com intuito de gerar um arquivo de dados (mhs_a.dat) que contenha
100 linhas de modo que cada linha possua o tempo (t), a deformação da mola (xs) do
MHS e a deformação da mola (xa) do movimento harmônico amortecido. (b) Transcreva
o algoritmo para um fluxograma. (Dica: reveja o conteúdo de oscilações para obter as
equações horárias de x(t) para cada sistema físico).

1.4- Reveja o exemplo 5 neste capítulo. Codifique o algoritmo acima em um script para Ma-
tlab/Octave e verifique o valor encontrado do eps.

1.5- Crie um script para o ambiente Matlab/Octave que gere um vetor de elementos igualmente
espaçados de 1 a 1001, com incremento de 10. Em seguida use a estrutura de laço
for i = inicio : incremento : fim;
comandos;
end;
para somar os elementos do vetor. ( Obs.: no Matlab obtemos o valor numérico do elemento
i=2 de um vetor usando v(i). Isto é equivalente a escrever valor=v(2), o que atribui
a variável valor o número armazenado na posição 2 do vetor v. Dica: reveja o script na
Figura 1.2 na página 6 e preste atenção no contador N. Esta estrutura também é chamada
de acumulador e pode ser ligeiramente modificada para acumular as sucessivas somas dos
elementos do vetor.)

1.6- O vetor que posiciona o centro de massa (CM) de um sistema discreto de massas é calculado
por

~rCM = xCM î + yCM ĵ + zCM k̂ com xCM = mi xi/P mi


P

e assim sucessivamente. Considere um sistema de seis massas, m = [1.0, 3.0, 5.0, 2.0, 4.0, 3.0]
no plano xy. Suas posições no eixo x e y são

x = [0.0, 0.5, 1.0, 2.0, 3.0, −5.0] e y = [−1.0, 0.0, 2.0, 4.0, 6.5, 8.0],

respectivamente. Faça um script para Matlab/OCTAVE que a partir dos dados de m, x


e y calcule a posição do centro de massa ~rCM . (Use estrutura de laço, um somador para
xCM e outro somador para yCM ). Adicione a instrução plot(x, y, ’ro’, xcm, ycm, ’bs’)
e execute novamente o script. Descreva o resultado gráfico.

1.7- Considere n ∈ [1, 1000]. Escreva um código usando instruções na linguagem Matlab/Octave
que obtenha o resultado da soma dos números pares bem como dos números ímpares entre
1 e 1000. Para tanto use uma estrutura de decisão
Se condição for verdadeira faça
somapar ← somapar + n
caso contrário faça
10 CAPÍTULO 1. INTRODUÇÃO

somaimp ← somaimp + n
fim do Se
que teste se o número é par (condição) usando o resto da divisão entre dois números mod(x,
y) ou rem(x, y). Veja na ajuda a documentação sobre a instrução mod: use help mod.

1.8- Uma carga teste (próton) encontra-se no vácuo sob


ação de um campo elétrico uniforme de 10−5 V/m e
sentido como indicado na Figura 1.3. Em t = 0s
sua posição é de 1 m a direita da origem e pos-
sui velocidade de 53,6 m/s da direita para esquerda.
Assumindo a massa de 1, 67 × 10−27 Kg e carga de
1, 6 × 10−19 C
(a) escreva a equação horária de sua posição e
(b) faça um script (Matlab/Octave) para encon-
trar os dois instantes em que o próton cruza a ori-
gem do sistema de coordenadas: defina as quanti-
dades pertinentes; com elas obtenha a aceleração da
carga teste; (o script deve resolver a equação do se- Figura 1.3: Próton em campo elé-
gundo grau em t); trico uniforme. Esquema do exercí-
(c) crie um vetor com valores de tempo no in- cio 1.8.
tervalo [0, 0,15]s e incremento de 10−4 s; em seguida
usando a equação horária x(t) do item (a) calcule as
posições do próton nestes tempos e faça um gráfico
usando a instrução plot(t, x);
(d) a partir do gráfico estime a máxima distância
negativa alcançada pelo próton e
(e) em que instante ele estará na posição x = 2m.
Observação: neste exercício desconsideramos as pertubações geradas pelo campo da carga
teste sobre o campo elétrico uniforme bem como o campo irradiado por ela em virtude de
sua pequena aceleração, como preconiza o eletromagnetismo clássico.

1.9- Considere os dados do exercício anterior e a expressão da massa relativística M dada por
m
M=r  v 2
1−
c
onde v é a velocidade instantânea do próton e c é a velocidade da luz.
(a) Escreva um código para gerar um gráfico que ilustre a dependência da massa do
próton com o tempo (o gráfico é um dos produtos finais) ;
(b) execute o código considerando o intervalo de tempo do exercício anterior e
(c) altere a linha do código que gera o tempo: redefina o tempo final para 1000 s e
incremento de 1 s; execute-o e analisando o gráfico responda
(d) é necessário considerar o efeito relativístico da massa no problema ?
(e) Quais são os valores de x e v em t = 1000 s ? (Use x(1000) e v(1000) seguidos de
<enter > no prompt da janela de comando).
Capítulo 2

Integração e Diferenciação Numéricas

Cálculo de integrais em Física são frequentes: as Leis de Maxwell na forma integral, o valor do
trabalho de uma força que depende da posição ou o impulso provocado por determinada força que
depende do tempo são alguns exemplos. As vezes a função a ser integrada leva a manipulações
algébricas complexas e o importante em determinadas situações é o resultado numérico para
interpretação.

Este capítulo têm por finalidade ilustrar alguns aspectos básicos dos processos de integração e
diferenciação numérica aplicadas a funções reais de uma variável.

2.1 Integrais definidas

2.1.1 Regra do Trapézio

Consideremos uma função f (x) conhecida, contínua e definida para qualquer valor de x ∈ [a, b].
Desejamos calcular o resultado da integral definida

ˆ b
I= f (x) dx,
a

sendo f (x) finita no intervalo considerado. Uma possibilidade seria usar a definição da Integral
de Riemann (SPIEGEL, 1975, p.102)

ˆ b X
I= f (x) dx = lim f (ci )∆xi , (2.1)
a ∆x→0
i

onde ci é um valor compreendido no intervalo [xi , xi + ∆xi ]. Fazendo ∆x pequeno, desconside-


ramos o limite e assim obtemos a Regra dos Retângulos.
12 CAPÍTULO 2. INTEGRAÇÃO E DIFERENCIAÇÃO NUMÉRICAS

Outro método mais preciso é a Regra dos Trapé-


zios: discretizamos o intervalo [a, b] em N − 1 seg-
mentos de largura ∆x onde N é o número de avali-
ações da função. Dado um conjunto de valores de
xi a saber x = [a, (a + ∆x), (a + 2∆x) + . . . . . . +
(a+(N −1)∆x), b] = [x1 , x2 , . . . , xN ] a área gené-
rica Areai de um trapézio é dada por (ver Figura
(2.1))
1
Areai = [f (xi ) + f (xi+1 )] ∆x
2
e, somando para todos os intervalos de 1 a N − 1
vêm Figura 2.1: Elemento genérico de área do
método dos trapézios.
 
1 1
I= f (x1 ) + f (x2 ) + . . . + f (xN −1 ) + f (xN ) ∆x.
2 2

Como f (x1 ) = f (a) e f (xN ) = f (b) podemos escrever

N
(" # ) " N ! #
X 1 X 1
Iab = f (xi ) − [f (a) + f (b)] ∆x = fi − (f1 + fN ) ∆x. (2.2)
2 2
i=1 i=1

Exemplo 1: um script simples para implementar o método acima encontra-se a seguir.

% Reg_Trap.m
% use para dados com ’dx = cte.’
clear;
N1 = input(’Entre com o no. de intervalos (N-1): ’);
N = N1+1 ;
a = input(’Entre com o limite inferior a: ’);
b = input(’Entre com o limite superior b: ’);
dx = (b-a)/N1;
soma=0;
for i = 1:N ; % inicio do laço para soma
x(i) = a+(i-1)*dx;
f(i) = função( x(i) ) % programar a função a ser integrada nesta linha
soma = soma + f(i);
end; % fim do laço
disp(’O resultado da integral eh:’)
I = dx*( soma - 0.5*( f(1) + f(N) ) ) % Eq. (2.2)

2.1.2 Regra de Simpson

Uma forma alternativa e normalmente mais precisa do que a Regra dos Trapézios é a Regra
de Simpson, onde se faz uso de três avaliações da função para definir a área elementar. Neste
2.1. INTEGRAIS DEFINIDAS 13

caso podemos escrever de forma compacta a expressão desta regra a saber


(N −1)/2
∆x X
Iab = [f (x2i−1 ) + 4f (x2i ) + f (x2i+1 )]
3
i=1
(N −1)/2
∆x X
Iab = [f2i−1 + 4f2i + f2i+1 ] . (2.3)
3
i=1

Devemos ter em mente que neste método o número de intervalos (N − 1 ) entre a e b deve ser par.
Ao deduzir sua fórmula Simpson aproxima a função por uma parábola em cada conjunto de 3
pontos como ilustrado na Fig. 2.2 sendo xi = a+i∆x, xi−1 = a+(i−1)∆x e xi+1 = a+(i+1)∆x
para i = 1, 1, 2,...,N-1.

yi
yi+1

yi-1

y=f(x)

x i-1 xi x i+1 x

Figura 2.2: Regra de Simpson 3 pontos: aproximação da área elementar abaixo da parábola.

A área elementar é obtida integrando uma função parabólica y(x) = co x2 + c1 x + c2 que se ajusta
aos três pontos de avaliação da função. O valor aproximado da integral será
ˆ xi+1
co x2 + c1 x + c2 dx

Ai =
xi−1
hc c1 2 ixi+1
o 3
= x + x + c2 x
3 2 xi−1
hc  c1 2 i
o 3 3
xi+1 − x2i−1 + c2 (xi+1 − xi−1 )

= xi+1 − xi−1 +
3 2
(xi+1 − xi−1 ) 
2co x2i+1 + xi+1 xi−1 + x2i−1 + 3c1 (xi+1 + xi−1 ) + 6c2
 
Ai =
6
escrevendo em termos da função y(x) temos
y(xi+1 ) y(xi−1 )

(xi+1 − xi−1 ) z 2 }| { z
2
}| {
Ai = co xi+1 + c1 xi+1 + c2 + co xi−1 + c1 xi−1 + c2 +
6
#
+co x2i+1 + 2xi+1 xi−1 + x2i−1 + 2c1 (xi+1 + xi−1 ) + 4c2


( " #)
xi+1 + xi−1 2
   
(xi+1 − xi−1 ) xi+1 + xi−1
= y(xi−1 ) + y(xi+1 ) + 4 c0 + c1 + c2
6 2 2
  
(xi+1 − xi−1 ) xi+1 + xi−1
Ai = y(xi−1 ) + y(xi+1 ) + 4y .
6 2
14 CAPÍTULO 2. INTEGRAÇÃO E DIFERENCIAÇÃO NUMÉRICAS

Usando as igualdades xi+1 − xi−1 = 2∆x e (xi+1 + xi−1 )/2 = xi escrevemos a área elementar
abaixo da parábola na forma
∆x
Ai = [y(xi−1 ) + 4y (xi ) + y(xi+1 )] ,
3
o que leva à Regra de Simpson (Eq. 2.3) ao somarmos para todo o intervalo de integração os
diferentes valores de Ai .

2.2 Quadratura Guassiana

No último exemplo ficou claro a necessidade de se resolver uma integral definida no intervalo [a,
b]. A Quadratura Gaussiana é um método de integração que basicamente substitui a integral
por uma soma do produto de uma função peso w(xi ) pela função f (x) a ser integrada, i.e.
ˆ b Xn
f (x)dx ≈ w(xi )f (xi ) (2.4)
a i=1

onde os valores de xi , pontos de avaliação da função, são definidos em termos do número de


pontos n da soma. Como regra básica se a função f (x) é um polinômio de grau 2n − 1 serão
necessários n pares (xi , wi ) para que o resultado da integral seja exato. Para a aplicação deste
método é necessário o conhecimento da função f (x).

Exemplo 2: o script a seguir foi adaptado de uma subrotina em Fortran (PRESS et al., 1989).
Os resultados serão precisos caso f(x) seja um polinômio de grau menor ou igual à 19.

% Integ_gauss.m
% realiza a integral de f(x) por quadratura gaussiana
% preciso para polinômios de grau <= 19
clear;
% define pontos da quadratura xi
xi = [.1488743389,.4333953941,.6794095682,.8650633666,.9739065285];
%
% define os pesos wi
wi = [.2955242247,.2692667193,.2190863625,.1494513491,.0666713443];
%
% entrada dos limites a e b
a = input(’Entre c/ limite inferior: ’);
b = input(’Entre c/ limite superior: ’);
%
% define a função a ser integrada
ff = inline(’cos(8*x).*exp(-x)’,’x’)
%
%
xm = 0.5*(b+a);
xr = 0.5*(b-a);
soma = 0;
for j = 1:5;
dx = xr*xi(j);
soma = soma + wi(j)*( ff(xm+dx) + ff(xm-dx) );
end;
disp(’O resultado da integral eh: ’)
soma = soma*xr
2.2. QUADRATURA GUASSIANA 15

Exemplo 3: o código acima pode ser reescrito usando o formalismo matricial a saber:

% Integ_gauss1.m
% realiza a integral de f(x) por quadratura gaussiana
clear;
% define pontos da quadratura xi
xi = [.1488743389,.4333953941,.6794095682,.8650633666,.9739065285];
%
% define os pesos wi
wi = [.2955242247,.2692667193,.2190863625,.1494513491,.0666713443];
%
% entrada dos limites a e b
a = input(’Entre c/ limite inferior: ’);
b = input(’Entre c/ limite superior: ’);
%
% define a funcao a ser integrada
ff = inline(’cos(8*x).*exp(-x)’,’x’)
%
%
xm = 0.5*(b+a);
xr = 0.5*(b-a);
dx = xr*xi;
soma = wi*( ff(xm+dx) + ff(xm-dx) )’;
disp(’O resultado da integral eh: ’)
soma = soma*xr % desnormaliza o resultado

Exemplo 4: existe no Matlab/OCTAVE algumas funções escritas para este fim. Ao final do
script abaixo existem duas linhas de comando com as funções predefinidas no ambiente
Matlab: quad e quadl. A forma mais básica de usá-las para o cálculo das integrais é o
mesmo: quad(nome_função, lim_inf, lim_sup, tolerância).

% Integ_gauss2.m
% realiza a integral de f(x) por quadratura gaussiana
clear;
%
% entrada dos limites a e b
a = input(’Entre c/ limite inferior: ’);
b = input(’Entre c/ limite superior: ’);
%
% define a funcao a ser integrada
ff = inline(’cos(8*x).*exp(-x)’,’x’)
%
% realiza a integral - quadratura adaptativa de Simpson
disp(’O resultado da integral eh: ’)
soma = quad(ff,a,b)
%
% realiza a integral - quadratura adaptativa Gauss-Lobato
disp(’O resultado da integral eh: ’)
soma = quadl(ff,a,b)
16 CAPÍTULO 2. INTEGRAÇÃO E DIFERENCIAÇÃO NUMÉRICAS

2.2.1 Quadratura Gauss-Legendre

Quando os limites de integração de uma função são finitos é comum a aplicação de uma substi-
tuição de variáveis
x = xR z + xM , onde
b−a
xR = ,
2
b+a
xM = .
2
com o intuito de normalizar os mesmos para o intervalo [-1, 1]. Assim a integral definida no
intervalo x ∈ [a, b] é reescrita na forma de um somatório a saber
ˆ b ˆ 1   
b−a b+a b−a
I = f (x) dx = f z+ dz
a −1 2 2 2
ˆ
b−a 1
 
b−a b+a
= f z+ dz
2 −1 2 2
n  
b−aX b−a b+a
I ≈ Wi f zi + (2.5)
2 2 2
i=1
n
X
I ≈ xR Wi f (xR zi + xM ) .
i=1

onde zi são as raízes do Polinômio de Legendre Pn (z) com pesos calculados por
2
Wi = .
zi2 [Pn0 (zi )]2

1−

Os polinômios de Legendre são obtidos recursivamente pela equação (ARFKEN; WEBER, 2001,
p.749)
zPn (z) − Pn−1 (z)
Pn+1 (z) = 2zPn (z) − Pn−1 (z) − .
(n + 1)
Para obtê-los iniciamos com n = 0, sabendo que P0 (z) = 1 e, recursivamente, derivamos os
polinômios de graus mais elevados. Como exemplo os quatro primeiros polinômios de Legendre
são
1 3 − 3z ,

P1 (z) = z, P 3 (z) = 8 5z
P2 (z) = 21 3z 2 − 1 , P4 (z) = 18 35z 4 − 30z 2 + 3 .
 

Abaixo um script em Matlab/OCTAVE (TREFETHEN, 2008) para o cálculo dos pontos e pesos
necessários a aplicação do método

% esta função deve estar salva no diretório de trabalho


% com o nome GaussLegendre.m
function [x, w] = GaussLegendre(n)
% x - pontos da quadratura (saída)
% w - pesos da quadratura (saída)
% n - numero de pontos da quadratura (entrada)
i = 1:n-1;
a = i./sqrt(4*i.^2-1);
CM = diag(a,1) + diag(a,-1);
[V L] = eig(CM);
[x ind] = sort(diag(L));
V = V(:,ind)’;
w = 2 * V(:,1).^2;
2.3. INTEGRAIS IMPRÓPRIAS 17

Com esta função salva no diretório de trabalho podemos obter os pontos e respectivos pesos da
quadratura Gauss-Legendre usando a instrução na janela de comando

>‌> [x , w] = GaussLegendre(3)
x =
-0.77459666924148 0 0.77459666924148
w =
0.55555555555556 0.88888888888889 0.55555555555556

o que atribui a x as raízes do polinômio de Legendre de terceiro grau (pontos da quadratura) e à


w os respectivos pesos. Neste caso é possível integrar com precisão um polinômio, f (x), de grau
menor ou igual à 2n − 1 = 5.

2.3 Integrais Impróprias

Algumas integrais possuem o limite inferior, o superior ou ambos igual a ±∞. Neste caso as
integrais são denominadas de impróprias existindo algumas técnicas capazes de simplificá-las
numericamente por substituição de variáveis. Vejamos o exemplo a seguir.
´ ∞ dx
Exemplo 5: calcular numericamente a integral I = 0 1+x 2. Uma tabela de integrais in-
definidas fornece o resultado como sendo I = tan (x) e, substituindo os limites, ob-
−1

temos I = π/2. Algebricamente podemos realizar a seguinte substituição de variáveis:


x = 1/y =⇒ dx = −dy/y 2 . Ao fazê-lo temos
ˆ ∞ ˆ 1 ˆ 0
dx dx dy
I = 2
= 2
+ − 2 ,
0 1+x 0 1+x 1 y (1 + 1/y 2 )
ˆ 1 ˆ 0
dx dy
= 2
− 2
,
0 1+x 1 1+y
ˆ 1
dx
I = 2 2
.
0 1+x

Neste exemplo vimos que a integral no intervalo [0, ∞] foi substituída por outra integral,
agora definida no intervalo [0, 1], sendo facilmente resolvida por um dos métodos descritos
nas seções anteriores. A Tabela 2.1 abaixo ilustra alguns casos de integrais impróprias e
suas respectivas substituições.

2.3.1 Quadratura Gauss-Laguerre

Similar ao método de Gauss-Legendre porém aplicado à integrais com um dos limites finito e
outro infinito, i.e.
ˆ ∞ ˆ ∞ ˆ ∞  
α α exp(x)
I = f (x) dx = x exp(−x)g(x) dx = x exp(−x) f (x) dx
0 0 0 xα
n  
X exp(xi )
I ≈ Wi f (x i ) (2.6)
xαi
i=1

onde α > −1, xi são as raízes do Polinômio de Laguerre Ln (z) com pesos Wi calculados por
Γ(n + α + 1) zi
Wi = 2 .
n! (n + 1)Lαn+1 (zi )

18 CAPÍTULO 2. INTEGRAÇÃO E DIFERENCIAÇÃO NUMÉRICAS

Tabela 2.1: Exemplos de integrais impróprias e suas respectivas substituições (PRESS et al.,
1989, cap. 4).

´b ´ 1/a
a f (x)dx 1 1
1/b t2 f ( t )dt , ab>0 Usada quando b → ∞ e a > 0
ou quando a → −∞ e b < 0
´b ´ (b−a)1−γ γ 1

a f (x)dx 1
1−γ 0 t 1−γ f (t 1−γ + a)dt , b>a No caso do integrando
divergir em (x − a)−γ
próximo de x = a para
0≤γ<1
´b ´ (b−a)1−γ γ 1

a f (x)dx 1
1−γ 0 t 1−γ f (b − t 1−γ )dt , b>a No caso do integrando
divergir em (x − b)−γ próximo
de x = b para 0 ≤ γ < 1
´b ´ √b−a
a f (x)dx 0 2tf (a + t2 )dt , b>a Funções do tipo 1/[x − a]1/2
com singularidade em x = a
´b ´ √b−a
a f (x)dx 0 2tf (b − t2 )dt , b>a Funções do tipo 1/[x − b]1/2
com singularidade em x = b
´∞ ´ exp(−a)
a f (x)dx 0
1
t f (− log t)dt Integrando que decai
exponencialmente exp(−x)

com
n
X (n + α)! (−z)m
Lαn (z) = .
(n − m)!(α + m)! m!
m=0

Usando a propriedades básicas da funçãoΓ, Γ(n + 1) = n! obtemos para α = 0


zi
Wi = 2.
(n + 2
1) [L n+1 (zi )]

Os polinômios de Laguerre são recursivamente obtidos pela equação (ARFKEN; WEBER, 2001,
p.831)
(1 + z)Ln (z) − Ln−1 (z)
Ln+1 (z) = 2Ln (z) − Ln−1 (z) − .
(n + 1)

Os cálculos iniciam-se com n = 0 sabendo que L0 (z) = 1 fornecendo os seguintes resultados para
os próximos quatro polinômios

L3 (z) = 61 −z 3 + 9z 2 − 18z + 6 ,

L1 (z) = −z + 1,
L2 (z) = 12 z 2 − 4z + 2 , 1
z 4 − 16z 3 + 72z 2 − 96z + 24 .
 
L4 (z) = 24

Abaixo encontra-se um script em Matlab/Octave (WILSON; TURCOTTE, 1998; RECKTENWALD,


2000) para o cálculo dos pontos e pesos da quadratura necessários a aplicação da Quadratura
Gauss-Laguerre.

% esta função deve estar salva no diretório de trabalho


% com o nome GaussLaguerre.m
function [x, w] = GaussLaguerre(n, alpha)
% x - pontos da quadratura (saída)
% w - pesos da quadratura (saída)
% n - número de pontos da quadratura (entrada)
2.4. DIFERENCIAÇÃO NUMÉRICA 19

% α - potência de x no integrando (entrada)


i = 1:n;
a = (2*i-1) + alpha;
b = sqrt( i(1:n-1) .* ((1:n-1) + alpha) );
CM = diag(a) + diag(b,1) + diag(b,-1);
[V L] = eig(CM);
[x ind] = sort(diag(L));
V = V(:,ind)’;
w = gamma(alpha+1) .* V(:,1).^2;

Observação: o maior real expresso em um sistema operacional 32 ou 64 bits é aproximadamente


1.79 × 10308 . Usando a instrução >‌> [x, w] = GaussLaguerre(185, 0), ou seja, 185
pontos e α = 0, obtemos o maior ponto de avaliação da função x185 ≈ 708. Ao inserir
este valor na exponencial temos exp(708) ≈ 3.02 × 10307 resultado este muito próximo do
limite de expressão de um número real. Conclui-se assim que a quadratura Gauss-Laguerre
deve ser usada com cuidado pois o número de pontos (e pesos) escolhido pode incorrer no
resultado “Inf ” cujo significado é: real acima do valor 1.79 × 10308 .

2.4 Diferenciação Numérica

Em alguns ramos da Física, como no Eletromagnetismo, encontramos relações vetoriais entre o


campo elétrico e o campo magnético, com fontes e sumidouros. Um exemplo é o campo elétrico
produzido por uma densidade de carga ρ no vácuo. Assim entendemos da teoria eletromagnética
que o campo elétrico relaciona-se com a densidade de carga elétrica segundo a equação (lei de
Gauss)


∇ · (o E ) = ρ

onde o é a permitividade elétrica do meio (vácuo) e ∇ é o operador Nabla a saber

∇= ∂ ∂ ∂
∂x î + ∂y ĵ + ∂z k̂ coord. cartesianas
∇= ∂ 1 ∂ ∂
∂r r̂ + r ∂φ φ̂ + ∂z k̂ coord. cilíndricas
∇= ∂ 1 ∂ 1 ∂
∂r r̂ + r sin θ ∂φ φ̂ + r ∂θ θ̂ coord. esféricas.

O operador gradiente também está presente na teoria da condução do calor. A Lei de Fourier
estabelece uma relação entre o fluxo de calor e o produto da condutividade térmica do material
(k) pelo gradiente de temperatura em certo ponto do meio, i.e.



H = −k∇T

e que expressa a quantidade de calor por unidade de tempo por unidade de área sendo propagada
através do sólido.
20 CAPÍTULO 2. INTEGRAÇÃO E DIFERENCIAÇÃO NUMÉRICAS

2.4.1 Aproximações de primeira e segunda ordem para f 0 (x)

Consideremos o gráfico ao lado de f (x).


Desejamos obter uma aproximação numé-
rica da derivada primeira da função f (x)
no ponto x0 . Considerando o triângulo 1
podemos escrever a seguinte equação

∆y f (xi ) − f (xi − ∆x)


f 0 (xi ) = tan θ = ≈
∆x xi − (xi − ∆x)
f (xi ) − f (xi − ∆x)
f 0 (xi ) ≈
∆x
sendo conhecida como aproximação atra-
sada de primeira ordem da derivada pri-
meira (aproximação backward ). De modo
análogo, mas usando o triângulo 2 temos

f (xi + ∆x) − f (xi )


f 0 (xi ) ≈
∆x Figura 2.3: Representações gráficas da de-
sendo esta equação a derivada numérica rivada primeira: atrasada, adiantada e cen-
de primeira ordem (erro ≈ ∆x) conhecida trada.
por aproximação adiantada (forward ) para
f 0 (x) em x = xi .
Outra aproximação da derivada primeira de uma função é a aproximação centrada que pode ser
obtida pela média entre as aproximações backward e forward, ou ainda através do triângulo 3 na
Fig. 2.3 resultando em
f (xi + ∆x) − f (xi − ∆x)
f 0 (xi ) ≈
2∆x
sendo esta uma aproximação de segunda ordem (erro ≈ ∆x2 ), ou seja, mais precisa.

Observação: as derivadas numéricas também podem ser deduzidas através da Série de Taylor
da função f (x), i.e.
1 00
f (x + ∆x) = f (x) + f 0 (x) [x + ∆x − x] + f (x) (x + ∆x − x)2 + · · ·
2!
que pode ser simplificado para
1
f (x + ∆x) ≈ f (x) + f 0 (x)∆x + f 00 (x)∆x2 + · · ·
2
e, retendo apenas os dois primeiros termos da série e manipulando temos
f (x + ∆x) − f (x)
f 0 (x) ≈
∆x
que representa a aproximação numérica de primeira ordem forward para f 0 (x). Se os
valores de x forem discretos como em uma lista ou tabela, i.e., xi = a + (i − 1)∆x para
i = 1, 2, 3, . . . por substituição na equação anterior obtemos a forma compacta a saber
f (a + (i − 1)∆x + ∆x) − f (a + (i − 1)∆x)
f 0 (xi ) ≈ ,
∆x
f (a + i∆x) − f (a + (i − 1)∆x)
f 0 (xi ) ≈ ,
∆x
fi+1 − fi
fi0 ≈ ,
∆x
2.4. DIFERENCIAÇÃO NUMÉRICA 21

onde fi e fi+1 representam os valores da função f (x) obtidos nos pontos xi+1 e xi+1 , res-
pectivamente.

2.4.2 Aproximações de primeira e segunda ordem para f 00 (x)

A aproximação numérica da segunda derivada de f (x) pode ser obtida facilmente através da
formulação vista na seção anterior porém aplicada a derivada primeira, i.e.
f 0 (xi )f orward − f 0 (xi )backward
f 00 (xi ) ≈
h ∆xi h i
f (xi +∆x)−f (xi ) f (xi )−f (xi −∆x)
∆x − ∆x

∆x
f (xi + ∆x) − 2f (xi ) + f (xi − ∆x) fi+1 − 2fi + fi−1
f 00 (xi ) ≈ 2
ou fi0 =
∆x ∆x2
sendo esta a aproximação centrada de segunda ordem (erro ≈ ∆x2 ) para a derivada segunda de
f (x). Outras formulações numéricas para f 00 (x) são
f (xi +2∆x)−2f (xi +∆x)+f (xi ) fi+2 − 2fi+1 + fi
f 00 (xi ) ≈ ∆x2
, aproximação (f orward) fi0 =
∆x2
f (xi )−2f (xi −∆x)+f (xi −2∆x) fi − 2fi−1 + fi−2
f 00 (xi ) ≈ ∆x2
, aproximação (backward) fi0 =
∆x2
ambas de primeira ordem (erro ≈ ∆x), ou seja, menos precisas.

2.4.3 Aproximações de f 0 (x) e f 00 (x) cúbicas e quárticas

Alguns cálculos podem exigir aproximações numéricas das derivadas com uma precisão maior.
A tabela abaixo resume algumas formulações de terceira e quarta ordem para as derivadas
numéricas.
Tabela 2.3: Derivada Primeira f 0 em x0 : expressões numéricas, erros e interpolação

Expressão Erro Poli. Tipo


[−11f (x0 ) + 18f (x1 ) − 9f (x2 ) + 2f (x3 )]/6∆x (∆x)3 3º For
[−2f (x−3 ) + 9f (x−2 ) − 18f (x−1 ) + 11f (x0 )]/6∆x (∆x)3 3º Back
[−25f (x0 ) + 48f (x1 ) − 36f (x2 ) + 16f (x3 ) − 3f (x4 )]/12∆x (∆x)4 4º For
[3f (x−4 ) − 16f (x−3 ) + 36f (x−2 ) − 48f (x−1 ) + 25f (x0 )]/12∆x (∆x)4 4º Back
[f (x−2 ) − 8f (x−1 ) + 8f (x1 ) − f (x2 )]/12∆x (∆x)4 4º Cen

Tabela 2.4: Derivada Segunda f 00 em x0 : expressões numéricas, erros e interpolação

Expressão Erro Poli. Tipo


[2f (x0 ) − 5f (x1 ) + 4f (x2 ) − f (x3 )]/∆x2 (∆x)2 3º For
[−f (x−3 ) + 4f (x−2 ) − 5f (x−1 ) + 2f (x0 )]/∆x2 (∆x)2 3º Back
[35f (x0 ) − 104f (x1 ) + 114f (x2 ) − 56f (x3 ) + 11f (x4 )]/12∆x2 (∆x)4 4º For
[11f (x−4 ) − 56f (x−3 ) + 114f (x−2 ) − 104f (x−1 ) + 35f (x0 )]/12∆x2 (∆x)3 4º Back
[−f (x−2 ) + 16f (x−1 ) − 30f (x0 ) + 16f (x1 ) − f (x2 )]/12∆x2 (∆x)3 4º Cen

Deve ser observado nas tabelas acima a seguinte notação f−i = f (x−i ) = f (x0 − i∆x) e
fi = f (xi ) = f (x0 + i∆x) para efeito de cálculos. Também devemos ter em mente ao reali-
zarmos aproximações numéricas das derivadas a dificuldade em calculá-las nas extremidades dos
22 CAPÍTULO 2. INTEGRAÇÃO E DIFERENCIAÇÃO NUMÉRICAS

intervalos. Se temos um conjunto de dados do tipo (xj , fj ) onde j = 1, 2, ..., 11 ou seja, possuí-
mos 11 pares de dados, a aproximação de segunda ordem da derivada primeira conterá apenas
9 pares de dados pois necessitamos, para o cálculo da derivada na segunda amostra (j = 2), de
(x1 , f1 ) e de (x3 , f3 ). Analogamente, para derivada em j = 10 são necessários os pares (x9 , f9 )
e de (x11 , f11 ). Uma metodologia muito empregada nestes extremos dos dados (j = 1 e j = 11)
é a utilização das aproximações de primeira ordem, forward e backward, nos extremos inicial e
final respectivamente.

Exemplo 6: Um sistema amortecido oscila segundo a função g(t) = 10sen(0, 5t) exp(−0, 2t).
A derivada primeira (analítica) é g 0 (t) = 5 cos(0, 5t) exp(−0, 2t) − 2sen(0, 5t) exp(−0, 2t).
Considerando o intervalo para t de 0 a 10 e um incremento dt = 0.5, determine:

1. A derivada primeira (numérica) da função;

2. O erro entre a aproximação numérica e a expressão analítica de g 0 (x)

Neste exemplo criamos o seguinte script :


% deriv1.m
clear
dt= 0.5;
t = 0:dt:10;
N = length(t);
fg= inline(’10*sin(0.5*t).*exp(-0.2*t)’);
gl_an = 5*cos(0.5*t).*exp(-0.2*t)-2*sin(0.5*t).*exp(-0.2*t);
%
% usando backward e forward para os ptos. inicial e final
gl_nu(1) = ( fg(t(2)) - fg(t(1)) )/dt; % avançada
gl_nu(N) = ( fg(t(N)) - fg(t(N-1)) )/dt; % atrasada
%
% usando a formulação centrada para pontos intermediários
for i = 2:N-1;
gl_nu(i)= 0.5*( fg(t(i+1)) - fg(t(i-1)) )/dt;
err(i)=gl_an(i)-gl_nu(i);
end;
err(1) = gl_an(1)-gl_nu(1);
err(N) = gl_an(N)-gl_nu(N);
% resultados gráficos
plot(t,gl_nu,’b.’ , t,gl_an); pause
plot(err)

2.5 Exercícios

2.1- Admita a função f (x) = cos(8x) exp(−x2 ). Realize a integral de f (x) para diferentes
discretizações ∆x (número de intervalos) e verifique para que ∆x o resultado da integral
não difere mais usando

(a) regra dos Trapézios


(b) regra de Simpson
(Sugestão: escolha um intervalo [0, π/2] e rode o código para (N-1) = 30, 40, 50, ... ;
o valor de ∆x é obtido escrevendo >‌> dx <enter> no prompt de comando.)
2.5. EXERCÍCIOS 23

2.2- Para
´ obtermos a posição do C.M.´ de uma distribuição contínua de massa usamos ~rCM =
~r dm /M em que xCM = x dm /M , e assim sucessivamente com M sendo a massa


do corpo. Quando a distribuição de massa não é uniforme a massa específica depende da


posição, ou seja, ρ = ρ(x, y, z). Considere uma vareta de comprimento L = 0, 9m, área da
seção reta circular a = 6, 0 mm2 e com massa específica dada por ρ(x) = 7+2x−x2 Kg/m3 .
Use a Regra de Simpson para estimar o valor numérico de xCM .

2.3- Considere o problema do Exercício 2.2 uma vareta de comprimento L = 0, 9m, área da seção
reta circular a = 6, 0 mm2 e com massa específica dada por ρ(x) = 7 + 2x − x2 Kg/m3 .
Use a Quadratura Gaussiana (via exemplo 3) para estimar o valor numérico de xCM .

2.4- Considere novamente o problema do Exercício 2.2. Uma vareta de comprimento L = 0, 9m,
área da seção reta circular a = 6, 0 mm2 e com massa específica dada por ρ(x) = 7 + 2x −
x2 Kg/m3 . Use Quadratura Gauss-Legendre para estimar o valor numérico de xCM .

2.5- Em um laboratório foram realizadas medidas experimentais da posição de uma partícula


em relação ao tempo e os resultados encontram-se registrados na tabela abaixo.Construa
um script para Matlab definindo dois vetores t e x com os dados ao lado. Em seguida
1. use a aproximação numérica centrada da deri-
t (s) x (m) t (s) x (m) vada primeira para estimar o vetor velocidade a
partir dos dados fornecidos.
0.5000 0.1947 3.0000 2.0082
0.9000 0.5165 3.4000 2.1118 2. Aplique o mesmo procedimento para o vetor ve-
1.4000 0.9733 4.0000 2.1654 locidade com o intuito de estimar a aceleração
1.9000 1.3961 4.5000 2.1343 da partícula.
2.5000 1.7907 5.0000 2.0521
3. Faça um gráfico de x(t) , outro de v(t) e final-
mente um para a(t).

2.6- As velocidades instantâneas de um foguete foram transmitidas, via rádio, para a estação
de lançamento e os valores registrados encontram-se na tabela abaixo.

t (s) v (m/s) t (s) v (m/s)


O foguete cheio de combustível possui uma massa de
0 0 96 747.0
2, 03 × 106 Kg.
12 31.5 108 987.3
Construa um script para Matlab/Octave que:
24 72.2 120 1301.8
(a) estime por integração numérica (R. Simpson) o
36 138.9 132 1481.6
deslocamento total do foguete;
48 228.0 144 1489.6
(b) usando derivação numérica (centrada) estime os
60 321.7 156 1504.6
valores das acelerações e
72 429.5 168 1526.8
(c) faça um gráfico da aceleração em função do tempo.
84 566.1 180 1556.7

2.7- A energia potencial gravitacional de um sistema de dois corpos pode ser expressa por

Mm
U (r) = −G
r

onde G = 6, 7 × 10−11 Nm2 /kg2 é a constante universal da gravitação e r é a distância


entre os corpos de massas M = 6, 0 × 1024 Kg e m = 80 Kg. Sabemos ainda que a força
gravitacional pode ser obtida a partir do gradiente de U (r). Considerando o exposto e que
r = 6, 4 × 106 + z, onde z é a altitude em metros:

(a) determine analiticamente a expressão da força gravitacional que atua nos corpos;
24 CAPÍTULO 2. INTEGRAÇÃO E DIFERENCIAÇÃO NUMÉRICAS

(b) desenvolva um script para Matlab em que os dados de entrada sejam as massas; que
crie um vetor contendo os valores de r igualmente espaçados; que faça um gráfico
superposto de F (r) analítico (pontos) e de F (r) numérico (linha cheia) usando a
aproximação centrada da derivada primeira de U ;
(c) refaça os cálculos para derivada primeira de ordem superior (centradas Tab 2.3) e
armazene os resultados.
(d) Calcule o erro numérico entre a aproximação da derivada primeira e o resultado ana-
lítico de F e faça um gráfico superposto de F × r e do Erro × r para comparação.

2.8- Desprezando a resistência do ar faça um script que calcule numericamente o trabalho W


da força gravitacional ao deslocar um paraquedista com massa de 80 Kg de uma altitude
z igual a 7500 m até uma altitude final de 300 m considerando que (a) a aceleração da
gravidade é constante e igual a 9, 81 m/s2 e (b) considerando que a gravidade varie com a
altitude segundo a expressão
M
g(z) = G ,
(R + z)2
onde R = 6, 4 × 106 m é o raio médio da Terra e M = 6, 0 × 1024 Kg é a massa da Terra.
(c) Calcule a diferença relativa entre os resultados: |Wb − Wa |/Wb .

2.9- Segundo RESNICK; HALLIDAY (1983, cap. 8) a solução completa de problemas unidi-
mensionais com forças dependentes da posição pode ser descrita pela equação
r ˆ x2
m dx
t2 − t1 = ± p
2 x1 E − U (x)

onde m é a massa da partícula, E a energia mecânica (constante) do sistema e U (x) a


energia potencial do sistema. Os tempos t1 e t2 estão relacionados com as posições x1 e
x2 da partícula, respectivamente. O sinal + ou − deve ser escolhido segundo o sinal da
velocidade da partícula em eixo orientado. Sendo a energia do sistema invariante ocorre
divergência do integrando quando a energia cinética tende a zero: E − U (x) −→ 0. As
regras do trapézio e de Simpson não podem ser usadas para encontrar o valor de t2 pois
o integrando não é definido nas situações em que E = U (x). A integração numérica por
quadratura pode contornar este problema visto que os pontos de integração sempre estão
localizados no interior do intervalo a ser integrado.

(a) Considere o sistema massa mola com m = 0, 2Kg, constante elástica k = 30N/m e que
em t1 = 0s a posição inicial da partícula seja x1 = 0, 10m e que a mesma parta do
repouso. Construa um script para Matlab/OCTAVE em que o limite superior varie
de 0,10m até -0,10m com incremento de 0,01m para obter a resposta t2 . Este processo
permitirá construir dois vetores: x2 e os respectivos tempos t2 associados. (Obs.:
dentro do laço para o cálculo de t2 a integral deve ser resolvida numericamente por
um dos processos de integração discutidos neste capítulo)
(b) Compare os resultados
q obtidos no item anterior com os valores advindos da equação
x(t) = A cos( m t) sendo A a amplitude do movimento. Para isso use o vetor t2 na
k

equação e faça um gráfico superposto dos resultados, i.e., use a instrução plot(t2,
x2, ’ro’, t2, x, ’b’).
Capítulo 3

Raízes de Funções de uma Variável

Imagine uma situação na qual nos deparamos com o problema de encontrar o valor de uma
variável x que anula ou satisfaz uma determinada equação, por exemplo: x + 2 = 0; x2 + 3x − 4 =
0; sen(x) = 2x. Existem vários métodos numéricos que podem ser aplicados para tal fim, dentre
eles os clássicos a saber: o Método da Iteração Linear, o da Bisseção e o de Newton-Raphson e
o método da Régula Falsi (ou da Secante).

Um teorema muito utilizado na busca de raízes (ou zeros) de funções é o Teorema de Bolzano
que afirma

“Se f (x) é uma função contínua sobre um intervalo fechado [a, b] e f (a) e f (b) têm
sinais contrários, então, existe pelo menos um ponto c ∈ [a, b], tal que, f (c) = 0”.

Devemos ter em mente a possibilidade de mais de uma raiz da função f (x) no intervalo menci-
onado. Outro caso ocorre quando os sinais de f (a) e f (b) são iguais: neste caso ou existe um
número par de raízes de f (x), ou ainda, nenhuma raiz no intervalo [a, b].

3.1 Método da Iteração Linear

Para encontrar o valor de x que zera a função f (x) isolamos x da função escrevendo uma equação
alternativa na forma x = g(x):

• se f (x) = 2x2 − x + 1 temos: x = 2x2 + 1 = g(x)

• se f (x) = sin(x) + 2x temos: x = −0.5 sin(x) = g(x)


26 CAPÍTULO 3. RAÍZES DE FUNÇÕES DE UMA VARIÁVEL

O processo numérico para determinar o va-


lor (aproximado) da raiz da função f (x) é
simples basta escrever

xi+1 = g(xi ) (3.1)

e inserir um valor inicial para o x1 na fun-


ção g(x). O resultado proveniente da função
é atribuído a x2 . O valor de i é incremen-
tado de uma unidade de modo que podemos
substituir em g(x) o valor anteriormente ob-
tido, x2 . Este processo itera até a precisão
numérica desejada:

Passo 1 dado x1 obtemos x2 = g(x1 )

Passo 2 com x2 obtemos x3 = g(x2 ), ... Figura 3.1: Ilustração gráfica do Método da
Passo i com xi obtemos xi+1 = g(xi ) Iteração Linear.

Observação: Nos métodos iterativos é comum usarmos um ou dois critérios de parada: se


desejamos que o valor da raiz possua precisão de três algarismos significativos então

caso |xi+1 − xi | ≤  pare o cálculo

onde  = 10−3 ≡ 1.0e-3. Outro critério de parada pode ser pelo número de iterações,
ou seja, quando i > N - número máximo de iterações. Dependendo do chute inicial,
x1 , o método pode não convergir para o valor da raiz da função f (x) e o programa
terminará pelo número máximo de iterações estipulado.

3.1.1 Convergência

Suponha que escrevamos a equação f (x) = 0 na forma x = g(x) sendo g(x) a função de iteração.
Para haver convergência do método existem três condições necessárias mas não suficientes a
saber:
1. g(x) e g 0 (x) devem ser contínuas no intervalo [a, b];
2. |g 0 (x)| < 1 ∀ x ∈ [a, b]; a derivada de g deve ser inferior a 1 para todo x no intervalo
3. x1 ∈ [a, b]; o chute inicial deve estar dentro do intervalo considerado;

Exemplo 3.1- Considere a equação horária v(t) = t2 −2t−3 de um móvel em que o tempo é dado
em horas e a velocidade instantânea em quilômetros por hora. Desejamos o valor positivo
do tempo em que o móvel inverte o sentido de seu movimento. Para tanto, zeramos a função
v(t) e explicitamos a variável independente na forma t = g(t). Isto pode ser feito√de duas
formas diferentes: a primeira leva ao resultado t = (t2 − 3)/2 e a segunda à t = 2t + 3.
A formulação correta para a função de iteração g(t) a ser adotada na implementação do
método é aquela que satisfaz os critérios de convergência.

Exemplo 3.2- Antes de programar o código (script) desenvolvemos o algoritmo com base no
que foi exposto: necessitamos de um chute inicial para iniciar o processo ou seja definir o
valor de t1 . Dos critérios de parada: definir o número máximo de iterações N bem como a
precisão desejada da raiz tol ( ou o ). O resultado está a seguir
3.2. MÉTODO DE NEWTON-RAPHSON 27

1- defina o valor do no. max de iterações: N


2- defina o valor da precisão desejada para a raiz: tol
3- defina o contador i como um
4- defina o valor da primeira aproximação da raiz: t(1)
5- defina a diferença difer com valor superior a tol
6- enquanto absoluto(difer ) > tol e i < N faça
t(i+1) ← programar a função de iteração escolhida g(t(i))
difer ← t(i+1) - t(i)
i←i +1
fim do laço 6
7- escreva os valores da raiz t(i) e do número de iterações i

3.2 Método de Newton-Raphson

Seja f (x) uma função contínua no intervalo [a, b]


e c o único zero da função no intervalo. Se a
primeira derivada e a segunda derivada também
são contínuas em [a, b] escrevemos a expansão
em Série de Taylor da função na forma truncada
1 0
f (xi + ∆xi ) ≈ f (xi ) + f (xi )∆xi .
1!
Igualando a zero o termo à esquerda vêm

f (xi ) f (xi )
∆xi = − 0
−→ xi+1 = xi − 0 . (3.2)
f (xi ) f (xi )

Esta última equação fornece um método itera- Figura 3.2: Ilustração gráfica do Método de
tivo para a estimativa do zero da função f (x) Newton-Raphson
no intervalo definido [a, b]. Um problema deste método ocorre quando f 0 (xi ) é zero - caso que
deve ser evitado pois causa uma indeterminação no segundo termo à direita da igualdade na
equação 3.2.
O algoritmo do exemplo 3.2 pode ser facilmente adaptado para o presente método realizando
uma única alteração: substituir a função de iteração g(t) pelos temos à direita da igualdade na
equação 3.2.

3.2.1 Convergência

Considerando a função f (x) no intervalo [a, b] as condições suficientes de convergência do método


de Newton-Raphson são:

1. f (a).f (b) < 0

2. f 0 (x) 6= 0, ∀x ∈ [a, b]

3. f 00 (x) > 0 ou f 00 (x) < 0 (i.e. f 00 (x) não muda de sinal em [a, b])

4. ff0(a)
f (b)
< (b − a) e f 0 (b) < (b − a)

(a)

para qualquer valor inicial de x ∈ [a, b].


28 CAPÍTULO 3. RAÍZES DE FUNÇÕES DE UMA VARIÁVEL

3.3 Método da Secante (Régula Falsi)

Este é um método usado para obter zeros


de funções suaves. Neste método os pontos
de cruzamento da secante, x1 e x2 , são usa-
dos como pontos base (iniciais) para uma
nova secante, mais próxima do zero da fun-
ção, x2 e x3 . É uma modificação do Método
de Newton visto que a derivada da função
f 0 (x) é substituída por uma aproximação
numérica.
Regula falsi: caso especial do Método da
Secante, em que se condiciona que o zero
procurado fique sempre entre os pontos de
cruzamento da secante utilizada na itera-
ção anterior:. Diferente do Método da Se-
cante pois neste processo a busca do zero
da função inicia-se com fa · fb < 0, obriga- Figura 3.3: Ilustração gráfica do Método da
tóriamente. Secante.

Para aplicar o método iterativo usamos a seguinte expressão


xi − xi−1
xi+1 = xi − f (xi ) (3.3)
f (xi ) − f (xi−1 )
e, observando melhor, verificamos que a fração à direita da igualdade é o inverso da aproximação
numérica atrasada para a derivada primeira (Série de Taylor).
O inconveniente deste método é a escolha de dois valores iniciais de x para começar o processo:
com i = 2 necessitamos de x1 e x2 um à esquerda da raiz e outro à direta dela. Porém se a
relação f (a).f (b) < 0 for satisfeita podemos escolher x1 = a e x2 = b.

Exemplo 3.2- Os três métodos apresentados acima são muito similares quanto a sua imple-
mentação. Para exemplificar consideremos um móvel com equação horária dada por
x(t) = 2t2 − 4t − 5.
Desejamos encontrar o valor positivo do tempo para o qual o móvel encontra-se na origem.
Com o algebrismo convencional é fácil obter o resultado desejado, i.e., t = 2, 87s. Como
não temos f (x) devemos usar uma substituição de variáveis na forma f (x) → x(t) de modo
que a nova equação a ser usada para implementar o Método da Secante é
ti − ti−1
ti+1 = ti − x(ti ) . (3.4)
x(ti ) − x(ti−1 )
Pelo que foi discutido são necessários dois valores de tempo para iniciar o processo: t1 = 2s
e t2 = 4s, por exemplo. Dos critérios de parada: um valor máximo de iterações N = 50
e de uma precisão para o resultado  = 0.001s. Com estas definições em mente podemos
adaptar o algoritmo exposto no Exemplo 3.2: definir t(2); fazer i=2; substituir a função de
iteração g(t) pela expressão à direita da igualdade na equação 3.4.

3.4 Método da Bisseção

Para se aproximar de uma raiz c, o princípio da bisseção consiste em reduzir o intervalo inicial
testando o sinal de f (x) para o ponto médio do intervalo, i.e. x = (a + b)/2. Considerando um
intervalo inicial [a, b] usamos
3.5. EXERCÍCIOS 29

• Se f (a).f ( a+b
2 ) < 0 o intervalo [a, b] é substituído por [a, (a + b)/2]

• Se f (b).f ( a+b
2 ) < 0 o intervalo [a, b] é substituído por [(a + b)/2, b]

com o novo intervalo calcula-se novamente o valor médio de x, realiza-se o teste e redefine-se o
intervalo até que o critério de parada seja satisfeito. A desvantagem deste método é a sua lenta
convergência para obter uma aproximação da raiz da equação (x = c). Outra desvantagem é a
necessidade de fornecer ao método dois pontos, a e b, com valores de f (a) e f (b) possuindo sinas
contrários.
Usando o algoritmo proveniente das alterações propostas no exercício 3.2 implementa-se este
método substituindo t1 e t2 por a e b, respectivamente. Outra modificação ocorre dentro do laço
o qual é em grande parte substituído por

6- enquanto absoluto(difer ) > tol e i < N faça


tm ← (a+b)/ 2
fa← programar f(a)
ftm← programar f(tm)
Se fa·ftm < 0 então
b ← tm
caso contrário
a ← tm
fim do Se
difer ← a - b
i←i +1
fim do laço 6

7- escreva os valores da raiz tm e do número de iterações i

3.5 Exercícios

3.1- Dois automóveis partem simultaneamente de cidades vizinhas A e B afastadas de 100 Km


em linha reta. As equações horárias de suas posições são

xa (t) = 12t + 4t2 ,


xb (t) = 105 − 6t2 ,

respectivamente, com a origem do sistema de coordenadas sobre a cidade A. Para encontrar


o tempo em que os móveis se cruzam na estrada devemos igualar as equações, i.e., fazer
xa = xb .

(a) Encontre analiticamente o tempo decorrido entre as suas partidas e o instante em que
se cruzam na estrada. No prompt da janela de comando defina t=0:1:120; xa= ...,
xb=... e faça um gráfico com o comando plot(t, xa, t, xb). Compare o resultado
encontrado algebricamente com o tempo no ponto que as curvas se cruzam. No gráfico
é possível estimar a que distância da cidade A os carros se encontrarão.
(b) implemente o Método da Iteração em um script para Matlab/Octave para calcular
este tempo. Confronte o resultado com o obtido algebricamente.
(c) Crie outro script para encontrar o tempo decorrido através do método de Newton-
Raphson e verifique se está de acordo com o resultado analítico.
30 CAPÍTULO 3. RAÍZES DE FUNÇÕES DE UMA VARIÁVEL

(d) Sem muitas alterações o script do item (c) pode ser modificado para obter o tempo
pelo Método da Secante. Faça isso e compare o tempo obtido numericamente com o
resultado analítico.
(e) Finalmente escreva, execute e compare o tempo numérico com o analítico implemen-
tando o Método da Bisseção em um novo script para Matlab/OCTAVE.

3.2- Considere o automóvel A do exercício anterior com uma equação horária mais complexa, a
saber
xa (t) = 12 t + t2 exp(0, 05 t).
Neste caso não é possível obter analiticamente o tempo decorrido entre a partida dos móveis
e o cruzamento dos mesmos na rodovia.

(a) No prompt da janela de comando defina um vetor t=0:1:70, xa=.... e xb=.... Faça
um gráfico com o comando plot para estimar em que tempo eles se cruzarão e a
posição do cruzamento a partir da cidade A.
(b) Altere a equação do automóvel A nos códigos dos itens (b), (c), (d) e (e) do exer-
cício anterior. Encontre o tempo numericamente por cada método comparando os
resultados com o valor estimado graficamente.

3.3- No capítulo anterior (secção (2.2.1)) foram mencionados os Polinômios de Legendre. A


quadratura Gauss-Legendre de N pontos exige o conhecimento de N raízes e pesos para sua
implementação e uma função GaussLegendre.m foi apresentada para este fim. Desenvolva
um script em que permita o usuário entrar com o valor de N entre 1 e 4 retornando os
pontos da quadratura (zeros dos polinômios) e seus respectivos pesos usando:

(a) o método da Iteração Linear;


(b) o método de Newton-Raphson.
(Observação: as raízes e os pesos dos polinômios de Legendre encontram-se limitados
ao intervalo [-1, 1].)
(Sugestões: use a estrutura de decisão if N==1... elseif N==2 ...else .. ...end; defina
o polinômio usando o comando inline (ex. P=inline(’z’) se N=1) e a expressão do
peso W (zi ) em cada caso da estrutura. Encontre os zeros e calcule os respectivos
pesos.)

3.4- A força de interação entre duas moléculas ou dois átomos neutros pode ser obtida a partir
do potencial de Lennard-Jones
A B
V (r) = 12 − 6 ,
r r
onde A e B são constantes que dependem do menor valor do potencial V0 e da distância
entre moléculas onde o potencial se anula r0 . Considere a distância r em Angstrons e os
valores A = 2, 27 × 105 eV·m12 e B = 104, 5eV·m6 .

(a) Encontre o valor de r0 usando Newton-Raphson;


(b) obtenha a expressão analítica da força F (r) a partir do potencial acima. Use um dos
métodos apresentados neste capítulo para calcular o valor de r em que a força se anula
(mínimo do potencial).
Capítulo 4

Ajuste de Curvas

4.1 Mínimos Quadrados

O ajuste de dados provenientes de medidas experimentais com o intuito de prever valores ou leis
Físicas que representem o fenômeno em questão são comuns na Física Experimental. Ao longo
desta seção iremos assumir um conjunto conhecido de dados (xi , yi ), com i = 1, 2, . . . , N .
Uma técnica muito empregada minimiza o quadrado dos resíduos entre as observações (yi ) e os
valores preditos por uma função ajuste (f (xi )), i. e.
(N )
X 2
(4.1)
 2
min R = min [f (xi ) − yi ] .
i=1

Esta minimização pode ser obtida após a definição do grau do polinômio (p) que deve ajustar os
dados. Para esclarecer o método dos mínimos quadrados vamos admitir f (x) um polinômio de
grau p na forma
f (x) = c0 + c1 x + c2 x2 + · · · + cp xp (4.2)
onde desejamos encontrar os coeficientes {c0 , c1 , . . . , cp }. Como visto na disciplina de cálculo,
o mínimo de R2 pode ser obtido pela derivada da função R2 com respeito aos coeficientes do
polinômio, i.e.
∂(R2 ) X ∂f (xi ) X
= 2 [f (xi ) − yi ] =2 [f (xi ) − yi ] = 0
∂c0 ∂c0
∂(R2 ) X ∂f (xi ) X
= 2 [f (xi ) − yi ] =2 xi [f (xi ) − yi ] = 0
∂c1 ∂c1
∂(R2 ) X ∂f (xi ) X
= 2 [f (xi ) − yi ] =2 x2i [f (xi ) − yi ] = 0
∂c2 ∂c2

∂(R2 ) X ∂f (xi ) X p
= 2 [f (xi ) − yi ] =2 xi [f (xi ) − yi ] = 0
∂cp ∂cp
substituindo f (xi ) e expandindo temos
X X X X p X
c0 1 + c1 xi + c2 x2i + · · · + cp xi = yi
X X X X p+1 X
c0 xi + c1 x2i + c2 x3i + · · · + cp xi = x i yi
X X X X p+2 X
c0 x2i + c1 x3i + c2 x4i + · · · + cp xi = x2i yi
.. .. ..
. . .
xpi + c1 xp+1 xp+2 x2p xpi yi
X X X X X
c0 i + c2 i + · · · + cp i =
32 CAPÍTULO 4. AJUSTE DE CURVAS

e que pode ser expresso na forma matricial a saber


P P 2 P p
x ······
  
 P 
N x xi c0 yi
P P 2i P i3 P p+1   P xi yi
 xi xi xi · · · · · · xi  c1 
.. .. .. ..
    P 
c2 x2i yi (4.3)
. . . . = .
    
.. ..
 
. P .p
    
    
xpi xp+1 xp+2 x2p
P P P P
i i ······ i
cp xi yi

Podemos ainda renomear as matrizes e vetores e reescrever o sistema de equações em uma forma
compacta
M c̄ = d¯ (4.4)
¯
cuja solução desejada é obtida pela multiplicação da inversa de M pelo vetor d,
−1
c̄ = M ¯
d.

4.1.1 Exemplos

Nos vários ramos da física é comum encontrarmos leis, relativamente simples, que preveem os
comportamentos dos sistemas. Tais leis são funções como retas e parábolas, exponenciais, lo-
garitmos entre outras. Algumas dessas funções não são polinômios porém com uma simples
transformação de variáveis tais funções podem ser linearizadas.

Exemplo 1: Ajuste de dados através de uma função linear do tipo: y = A + Bx.


xi yi
Neste caso possuímos uma tabela de dados como ao lado e desejamos x1 y1
ajustar uma reta pelos dados experimentais (xi , yi ). Pelo que foi exposto x2 y1
na seção 4.1 o sistema a ser resolvido é .. ..
. .
xN yN
 P    P 
PN P x2i A
= P yi
. (4.5)
xi xi B x i yi

Sendo um sistema 2 × 2 é possível obter uma solução analítica simples para os coeficientes
desejados do polinômio, os valores de A e B.

O seguinte algoritmo contém as etapas básicas para o cálculo dos coeficientes da reta
1- limpar memória
2- definir os vetores x e y com os dados provenientes das medidas
3- definir N ← número de medidas
4- definir soma_x, soma_x2, soma_y, soma_xy como zero
5- para i de 1 até N faça
soma_x ←soma_x + x (i)
soma_x2 ←soma_x2 + x (i) * x (i)
soma_y ←soma_y + y(i)
soma_xy ←soma_xy + x(i) * y(i)
fim do laço 5
6- gerar a matriz M e o vetor d (sistema M·c = d)
7- obter o vetor de coeficientes c = M−1 · d
8- mostrar os coeficientes.
4.1. MÍNIMOS QUADRADOS 33

Exemplo 2: Ajuste de dados através de uma função logarítmica na forma:

y = A + B ln x.

Para obtermos os coeficientes A e B reescrevemos a equação na forma y = A + Bw onde


w = ln x. O sistema que permite o ajuste dos dados é similar ao do Ex1, i.e.
 P    P 
N w i A yi
P P 2 = P
wi wi B xi yi

ou seja, basta criar mais uma coluna de dados na tabela contendo ao invés de xi os valores
de wi = ln xi .

Exemplo 3: Ajuste de dados por uma função exponencial na forma:

y = A exp(Bx).

Para obtermos os coeficientes A e B do ajuste reescrevemos a equação na forma ln y =


ln A + Bx ou ainda z = a + bx. Assim a tabela de dados necessita de uma coluna com
os valores de ln yi = zi . O procedimento do Ex1 é então repetido de modo a obter os
coeficientes a e b por  P    P 
N x i a z i
P P 2 = P .
xi xi b xi zi
Os reais coeficientes da função exponencial serão então A = exp(a) e B = b.

Exemplo 4: Ajuste de dados por uma lei de potência na forma:

y = AxB .

Neste caso aplicamos a função “ln” na equação para obtermos ln y = ln A + B ln x ou ainda


z = a + bw. O sistema resultante será um misto dos exemplos 2 e 3 ou seja
 P    P 
PN P w2 a
= P zi
.
wi wi b wi z i

Os coeficientes desejados para o ajuste serão A = exp(a) e B = b.

Exemplo 5:
Tabela 4.1 - dados experimentais.
Em uma experiência como pêndulo
simples conseguimos os seguintes pe- Li (m) Ti (s)
ríodos em função do comprimento (ta-
0.50 1.43
bela ao lado). Após efetuar os proce-
1.00 2.00
dimentos indicados nos exemplos de 1
2.00 2.85
a 4 obtivemos os seguintes coeficientes:
3.00 3.48
4.00 3.98
- ajuste linear: A= 1.23 e B= 0.722 y = 1, 23 + 0, 722x
- ajuste logaritmo: A= 2.14 e B= 1.23 y = 2, 14 + 1, 23 ln x
- ajuste exponencial: A=exp(a)=1.43 ; b=B=0.281 y = 1, 43 exp(0, 281x)
- ajuste potência de x: A=exp(a)=2.01 ; b=B=0.495 y = 2, 01x0,495

O gráfico abaixo ilustra o resultado dos ajustes. Podemos observar que a Lei de Potência
forneceu o melhor ajuste entre os apresentados. Entretanto a potência deveria ser igual
a 0,5. Isto indica que as medidas experimentais não foram realizadas com a necessária
34 CAPÍTULO 4. AJUSTE DE CURVAS

precisão fornecendo um erro de (0,500-0,495)/0,500= 0,01 = 1%.


O valor da gravidade local pode ser estimado a partir do coeficiente A fazendo g =
(2π/A)2 = 9, 77m/s2 . Assumindo o valor real de 9,81m/s2 o erro na estimativa de g é
(9,81-9,77)/9,81=0,004 = 0,4%.

Figura 4.1: Diferentes ajustes obtidos com os dados provenientes de uma experiência com o
Pêndulo Simples.

4.1.2 Mínimos Quadrados Ponderados

Imagine que tenhamos a disposição um cronômetro cuja menor leitura seja de um segundo.
Ao realizarmos medidas com este cronômetro os resultados devem ser expressos com a devida
imprecisão do equipamento: valor medido±0, 5s. Em certos equipamentos a incerteza da medida
é um percentual do valor medido (e.g., 2, 5 ± 0, 02 · 2, 5 Volts), ou seja, as incertezas nos registros
de voltagem são de 2% dos valores medidos.

Vamos assumir um conjunto de N medidas (xi , yi ) e que os valores de yi possuam imprecisões


conhecidas σi , respectivamente. Para uma dada função ajuste f (xi , c) polinomial de grau p
desejamos encontrar os coeficientes c = {co , c1 , . . . , cp } que minimizam a soma dos quadrados
dos resíduos ponderados

N  N
f (xi , c) − yi 2 X 2
X 
2
Rw = = wi [f (xi , c) − yi ]2 , (4.6)
σi
i=1 i=1

onde wi = 1/σi sendo que wi2 representa o quadrado do peso atribuído ao i-ésimo resíduo.
Assim, quanto menor for a incerteza de uma dada medida maior será o seu peso na estimativa
dos coeficientes da função ajuste.

Sabemos que as medidas experimentais podem sofrer flutuações por imperícia do experimentador
ao manusear o equipamento de medida, má calibração do equipamento, flutuações térmicas do
laboratório ou mesmo na rede elétrica. Estas flutuações (aleatórias) alteram as medidas além do
normal aumentando suas incertezas. Na figura abaixo duas medidas se afastam consideravelmente
do ajuste linear estipulado para os dados. Usando Mínimos Quadrados convencional os valores
dos coeficientes da reta são alterados por estes dois desvios exagerados. Uma forma de contornar
este problema seria refazer as duas medidas ou, na impossibilidade, descartá-las antes do ajuste.
4.1. MÍNIMOS QUADRADOS 35

Figura 4.2: Comparação entre ajustes realizados por Mínimos Quadrados com e sem ponderação.

Na tentativa de minimizar os efeitos de medidas suspeitas no ajuste podemos optar pelo Método
dos Mínimos Quadrados Ponderados com uma técnica iterativa. O procedimento inicial é usar
Mínimos Quadrados convencional para obter um primeiro conjunto de coeficientes da função
ajuste, c(1) = {c0 , c1 , . . . , cp }(1) . Na sequência os resíduos são computados por ri = f (xi , c) − yi
e então usados para definir os pesos wi . Os pesos recém computados são usados com MQP para
estimar os novos coeficientes da função ajuste, c(2) = {c0 , c1 , . . . , cp }(2) . O processo pode iterar
mais algumas vezes até que um critério de convergência (ou parada) seja satisfeito.
Para facilitar as deduções mudaremos a formulação adotada para uma matricial muito utilizada
em artigos e livros que tratam de ajuste, regressão e inversão.
Desejamos minimizar Rw2 e para isso usando uma matriz de pesos diagonal W = w e a definição
ii i
 
c0
 c1 
  X m
p  c 
2 Xij cj−1 , com m = p + 1

f (xi , c) = 1 xi xi ... xi  2  =
 .. 
 .  j=1
cp

reescrevemos a Eq.(4.6) a saber


     
N
X m
X Xm
2
Rw = Wii  Xij cj−1 − yi  · Wii  Xij cj−1 − yi 
i=1 j=1 j=1

Como cada termo entre colchetes é o i-ésimo elemento de um vetor, temos


2
Rw = [W (Xc − y)]T [W (Xc − y)] . (4.7)

Usando as identidades (XY)T = YT XT e WT W = W2 , obtemos


2
Rw = (Xc − y)T W2 (Xc − y) ,
= (Xc)T W2 (Xc − y) − yT W2 (Xc − y) ,
= cT XT W2 Xc − cT XT W2 y − yT W2 Xc + yT W2 y,
2
Rw = cT XT W2 Xc − 2yT W2 Xc + yT W2 y.

Com o auxílio das identidades


dxT x daT x dxT Ax
= 2x ; =a ; = 2Ax
dx dx dx
36 CAPÍTULO 4. AJUSTE DE CURVAS

derivamos Rw
2 em relação aos parâmetros e igualamos a zero, ou seja

dRw2 T
= 2XT W2 Xc − 2 yT W2 X + 0 = 0,
dc
2XT W2 Xc − 2XT W2 y = 0,
XT W2 Xc = XT W2 y,
−1 T 2
=⇒ c = XT W2 X X W y. (4.8)

A Eq.(4.8) fornece os coeficientes que minimizam Rw 2 pelo método dos Mínimos Quadrados

Ponderados. No caso particular em que a matriz diagonal W2 é igual a matriz identidade os coe-
ficientes retornados pela equação serão os mesmos obtidos pelo método dos Mínimos Quadrados
−1 T
convencional: c = XT X X y = M−1 d, com M = XT X e d = XT y.


4.2 Ajuste por uma função qualquer (Newton e Gauss-Newton)

Em alguns casos os dados experimentais não possuem um bom ajuste com as funções exploradas
nas seções precedentes. Exemplos destes casos são

A
P (w, A, B, wo ) = , potência em exp. de ressonância,
(w − wo )2 + B 2
1 −(x − xo )2
G(x, σ, xo ) = √ exp( ), função Gaussiana,
2πσ 2 2σ 2
λk exp(−λ)
f (k, λ) = , distribuição de Poisson
Γ(k + 1)

e cujos gráficos apresentam-se como nas figuras abaixo.

0.9

0.8 x0= 0,0; σ2 =0,2


x0= 0,0; σ2 =1,0
0.7 x0= 0,0; σ2 =5,0
x0=−2,0; σ2 =0,5
0.6

0.5

0.4

0.3

0.2

0.1

0
−5 −4 −3 −2 −1 0 1 2 3 4 5
(a) (b)

Figura 4.3: Gráficos ilustrando (a) distribuições de Poisson e (b) distribuições Normais (Gaussi-
anas).

Nesta seção será mostrado um procedimento conhecido pelo Método de Newton que permite
ajustar dados experimentais por uma função qualquer - função esta definida previamente - a
exemplo das equações acima apresentadas e normalmente não lineares.
4.2. AJUSTE POR UMA FUNÇÃO QUALQUER (NEWTON E GAUSS-NEWTON) 37

Neste método desejamos minimizar o quadrado


P 2 dos P resíduos como 2definido no Método dos Míni-
mos Quadrados ou seja minimizar R = i ri = i [f (xi , c) − yi ] onde c = {c1 , c2 , ..., cN } é o
2

vetor com os parâmetros da função ajuste. Iniciamos com a derivada do quadrado dos resíduos
com respeito aos parâmetros de uma função f (x, c), i.e.
N
1 ∂(R2 ) X ∂ri
gj (c) = = ri ,
2 ∂cj ∂cj
i=1
N
X ∂f (xi , c)
gj (c) = [f (xi , c) − yi ] .
∂cj
i=1

Comparando com o Método de Newton-Raphson (seç. 3.2) desejamos os coeficientes c que


minimizam R2 . Expandindo a função gj (c) em uma Série de Taylor e truncando os termos de
ordem superior a 2 temos
X ∂gj
gj (c + ∆c) ≈ gj (c) + ∆ck ,
∂ck
k
onde Jjk = é o elemento linha j coluna k da matriz Jacobiana associada ao vetor g.
∂gj/∂ck
Impondo que g se anule após a correção dos parâmetros fazemos g(c + ∆c) = 0 e reescrevemos
a última equação na forma matricial a saber

0 = g + J ∆c
J ∆c = −g
 −1
∆c = − J g

cuja solução ∆c é o vetor com o incremento dos parâmetros do vetor c de modo que a nova
(n)
estimativa dos parâmetros da função f (x, c̄) serão cn+1 = cn + ∆c para n = 1, 2, ... iterações
sendo a Jacobiana definida por
N 
∂ 2 f (xi , c)

X ∂f (xi , c) ∂f (xi , c)
Jjk = + [f (xi , c) − yi ] .
∂cj ∂ck ∂cj ∂ck
i=1

Em algumas literaturas o segundo termo entre as chaves é desconsiderado nos cálculos com o
intuito de minimizar o número de operações numéricas. Tal procedimento leva ao Método de
Gauss-Newton.
Os zeros da função gj são obtidos em termos da matriz Jacobiana definida acima e deduzida a
partir da função ajuste f (x, c) a saber
N N 
∂ 2 ri

∂gj (c) ∂ X ∂ri X ∂ri ∂ri
Jjk = = ri = + ri ,
∂ck ∂ck ∂cj ∂ck ∂cj ∂ck ∂cj
i=1 i=1
N
∂ X ∂f (xi , c)
= [f (xi , c) − yi ] ,
∂ck ∂cj
i=1
N 
∂ 2 f (xi , c)

X ∂ ∂f (xi , c)
= [f (xi , c) − yi ] + [f (xi , c) − yi ] ,
∂ck ∂cj ∂cj ∂ck
i=1
N 
∂ 2 f (xi , c)

X ∂f (xi , c) ∂f (xi , c)
Jjk = + [f (xi , c) − yi ] .
∂cj ∂ck ∂cj ∂ck
i=1

Em resumo, para encontrar os coeficientes do vetor c que definem a função f (x, c) iterativamente
procedemos da seguinte forma:
38 CAPÍTULO 4. AJUSTE DE CURVAS

Algoritmo

1. escolhemos um conjunto de coeficien-


tes que produzem um ajuste próximo
dos valores tabelados (xi , yi ) - chute
inicial c(1)

2. calculamos a função gj (x, c(1) ) e a


matriz Jacobiana Jjk (c(1) )

3. resolvemos o sistema linear para ∆c:


(1)
J(c(1) ) ∆c = −g(x, c(1) )

4. incrementamos o novo vetor de coefi-


(1)
cientes: c(2) = c(1) + ∆c

5. repete-se os cálculos nos passos 2, 3 e


4 para obter c(3) , . . . , c(m) enquanto
|∆c| > tol1 ou |f (x, c) − y| > tol2

6. satisfeito o critério em 5 assume-se


como coeficientes (raízes) de g ou pa-
râmetros da função f (x, c̄) o último
conjunto de coeficientes presentes no
vetor c̄ Figura 4.4: Fluxograma Mét. Newton.

A título de conhecimento dizemos que a matriz J é a Jacobiana de g porém é denominada de


Hessiana (H) de f . Este método é empregado quando possuímos uma estimativa inicial dos
valores dos coeficientes da função não linear usada para o ajuste dos dados, ou seja fornecemos
c1 .

Dependendo do “chute inicial” c(1) é possível que o método gere um incrementoP∆c demasiada-
mente grande fornecendo um resíduo maior do que o resíduo sem o incremento: i ri2 (c + ∆c) >
i ri (c) contrário ao desejado. Quando isto ocorre dizemos que o método diverge e os parâ-
2
P
metros obtidos não farão com que a função f (x, c̄) ajuste os dados experimentais. O que se faz
é inserir (fornecer) um novo conjunto de parâmetros para um novo teste até que se consiga a
convergência.

Exemplo 6: Considere uma garrafa com uma quantidade n = N/V de moléculas por unidade
de volume. Cada molécula possui massa m e o gás encontra-se a uma temperatura T . O
número de moléculas por unidade de volume nv com velocidade entre v e v + dv no interior
da garrafa é dado pela lei de Maxwell para a distribuição de velocidades a saber

nv (v) = Av 2 exp(−Bv 2 ),

onde
 m 3/2 m
A = 4πn e B= .
2πkT 2kT
4.2. AJUSTE POR UMA FUNÇÃO QUALQUER (NEWTON E GAUSS-NEWTON) 39

v(m/s) nv (m−3 ) v(m/s) nv (m−3 )


Suponha que, através de um método 0 0 400 30.150
experimental, tenhamos conseguido obter 40 1.4677 440 26.921
o seguinte conjunto de dados (v, nv ) 80 5.4582 480 22.244
condensados ao lado. Escreva um script 120 13.159 520 18.279
em Matlab que forneça um ajuste para 160 19.677 560 12.405
este conjunto de dados, ou seja, obtenha os 200 28.305 600 9.1540
coeficientes A e B da distribuição de veloci- 240 33.285 640 6.8828
dades moleculares. Ao final do script faça 280 36.652 680 4.8711
um gráfico com os pontos experimentais e
320 35.528 720 2.9592
com o ajuste obtido.
360 35.967 760 1.7515
Solução: a primeira coisa que devemos fazer é deduzir analiticamente o sistema de equa-
ções, i.e., a matriz Jacobiana e o vetor g. Logo

∂f (xi , c) ∂nv (vi , A, B)


= = vi2 exp(−Bvi2 ) ≡ DA
∂c1 ∂A
∂f (xi , c) ∂nv (vi , A, B)
= = −Avi4 exp(−Bvi2 ) ≡ DB
∂c2 ∂B
∂ 2 f (xi , c) ∂ 2 nv (vi , A, B)
= = 0 ≡ DAA
∂c1 ∂c1 ∂A2
2
∂ f (xi , c) ∂ 2 nv (vi , A, B)
= = Avi6 exp(−Bvi2 ) ≡ DBB
∂c2 ∂c2 ∂B 2
∂ 2 f (xi , c) ∂ 2 nv (vi , A, B) ∂ 2 nv (vi A, B)
= = −vi4 exp(−Bvi2 ) = ≡ DAB
∂c1 ∂c2 ∂A∂B ∂B∂A

N N
X ∂nv (xi , A, B) X
g1 = [f (xi , c) − yi ] = [f (xi , c) − yi ] vi2 exp(−Bvi2 )
∂A
i=1 i=1
N N
X ∂nv (xi , A, B) X
[f (xi , c) − yi ] −Avi4 exp(−Bvi2 ) , ou
 
g2 = [f (xi , c) − yi ] =
∂B
i=1 i=1
T
g1 ≡ 4f DA
T
g2 ≡ 4f DB , onde, 4fi = f (xi , c) − yi

Segundo as deduções e definições acima temos


    
J11 J12 s1 g1
=− ,
J21 J22 s2 g2

onde
h i
T T
J11 = DA DA + 4f DAA ,
h i
T T
J12 = DA DB + 4f DAB = J21 ,
h i
T T
J22 = DB DB + 4f DBB .

O script em Matlab/Octave a seguir permite que o usuário insira coeficientes A e B até que
o ajuste fique próximo dos dados experimentais. Na seqüência, itera um número máximo
de 50 vezes caso a condição de convergência (tolerância) não seja satisfeita, para no final
mostrar o gráfico e escrever na tela os parâmetros obtidos.
40 CAPÍTULO 4. AJUSTE DE CURVAS

% Maxwell.m - para um conjunto de dados de entrada ( v, n) realiza


% o ajuste dos mesmos segundo a Distrib. Velocid. Molecul. de Maxwell
% n(v) = A * v.^2 * exp(-B * v.^2)
clear
% dados experimentais (v, n)
vn=[0 0; 40 1.4677; 80 5.4582; 120 13.159; 160 19.677; ...
200 28.305; 240 33.285; 280 36.652; 320 35.528; 360 35.967; ...
400 30.150; 440 26.921; 480 22.244; 520 18.279; 560 12.405; ...
600 9.1540; 640 6.8828; 680 4.8711; 720 2.9592; 760 1.7515];
%
v = vn(:,1)’ ;
n = vn(:,2)’ ;
nd= length(n); %obtém o tamanho do vetor - numero de componentes
% inicialização
par = input(’Informe o pto. inicial e tol [A , B, tol]: ’);
A = par(1) ; B = par(2) ; tol = par(3) ;
c = [A;B] ;
% laço p/ obtenção do melhor chute inicial
while length(par) > 0
nv = A * v.^2 .* exp(-B * v.^2) ;
plot(v,n,’.r’,v,nv)
par= input(’Altere o pto. inicial e tol [A , B]: ’) ;
if length(par) == 2 ;
A = par(1); B = par(2) ;
c = [A;B] ;
end
end % fim do laço - chute inicial
%
% laço para busca automática dos parâmetros
for i = 1 : 50
% definicoes
nv = A * v.^2 .* exp(-B * v.^2);
df = nv - n;
% calculo das derivadas de n(v) em relacao a A e B
DA = v.^2 .* exp(-B*v.^2) ;
DB =-A * v.^4 .* exp(-B*v.^2) ;
% calcula gi
g1 = df * DA’ ;
g2 = df * DB’ ;
g = [g1 ; g2];
err= norm(g); % mesmo que sqrt(g*g’)
if err < tol; break; end;
% calculo das derivadas cruzadas e segundas
DAA = zeros(1,nd) ;
DBB =-DB .* v.^2 ;
DAB =-DA .* v.^2 ;
DBA = DAB ;
% calculo da Jacobiana
J(1,1) = DA * DA’ + df * DAA’ ; % Desconsiderar os termos
J(2,2) = DB * DB’ + df * DBB’ ; % a direita das 4 somas leva
J(1,2) = DA * DB’ + df * DAB’ ; % ao Metodo de Gauss-Newton
4.3. EXERCÍCIOS 41

J(2,1) = DB * DA’ + df * DBA’ ; %


% calculo do incremento s = DeltaC
s = - inv(J)*g ;
c = c + s ; % nova solucao
A = c(1) ; B = c(2) ;
nv= A *v.^2 .* exp(-B * v.^2) ;
plot(v,n,’.r’, v,nv);
pause(0.5);
end
%
vv = linspace(0,v(end),10*length(v));
nvv = A * vv.^2 .* exp(-B * vv.^2) ;
plot(v,n,’.r’, vv,nvv);
nv = A * v.^2 .* exp(-B * v.^2) ;
df = nv - n ;
chi2= df * df’ ; % produto interno entre os resíduos
disp([A B chi2]) % excreve A, B e chi-quadrado do ajuste na tela

Figura 4.5: Resultado do ajuste usando o código Maxwell.m

4.3 Exercícios
4.1- Monte o sistema p/ obter os coeficientes A e B considerando um ajuste linear (reta) do
seguinte conjunto de dados: x = [0.00, 0.20, 0. 50, 0.90, 1.40] e y = [2.32, 1.46, 0.40, -0.88,
-2.32]. Resolva o sistema analiticamente, i. e., forneça a equação y = A + B*x.
4.2- Faça um script para realizar um ajuste linear dos pontos fornecidos no Exercício 2.1. No
final do código faça um gráfico com os dados da tabela (círculos vermelhos) e, sobreposto,
o ajuste conseguido (linha cheia em azul).
42 CAPÍTULO 4. AJUSTE DE CURVAS

4.3- O potencial de Lennard-Jones é usado para oh estudo de moléculas diatômicas. Sua ex-
a 12
 i
a 6
pressão em uma dimensão é U (x, Uo , a) = Uo x sendo a a separação entre

−2 x
átomos em que o potencial assume o menor valor e Uo a energia de ligação ou de dissoci-
ação da molécula. Desenvolva um script LenJon.m que permita o ajuste de um conjunto
de dados (xi , Ui ) a ser fornecido pelo usuário. Neste problema desejamos encontrar os
parâmetros a e Uo . (Dica: faça uma adaptação dos procedimentos descritos em sala de
aula - script Maxwell.m).

Use os dados da tabela ao abaixo para obter as constantes Uo e a, cujo gráfico está ilustrado
na Figura 4.6.

x (nm) U (eV) x (nm) U (eV)


0.420 4.819 0.620 -0.949
0.440 0.660 0.640 -0.806
0.460 -1.157 0.660 -0.685
0.480 -1.845 0.680 -0.582
0.500 -2.000 0.700 -0.496
0.520 -1.912 0.720 -0.423
0.540 -1.726 0.740 -0.362
0.560 -1.513 0.760 -0.311
0.580 -1.304 0.780 -0.268
0.600 -1.115 0.800 -0.231

Figura 4.6: Potencial de Lennard-Jones obtido


com os dados da tabela ao lado.

4.4- No Exemplo 6 a função ajuste - Distribuição de Velocidades Moleculares - foi usada com
os dados e o Método de Newton para obtenção dos parâmetros A e B. Aplique logaritmo
neperiano na função original para obter uma formulação linearizada da função ajuste,
ou seja, os novos coeficientes devem estar elevados a unidade. Usando a metodologia de
mínimos quadrados deduza o sistema de equações pertinentes. Programe um script para
resolver o sistema e que ao final forneça os parâmetros originais A e B da Lei de Maxwell
em questão.

4.5- Um paraquedista possui massa igual a 81,6 kg e encontra-se a uma altitude y0 com uma
velocidade inicial v0 quando aciona um equipamento capaz de armazenar a altitude, a
velocidade e a aceleração em função do tempo. Considerando que a força de atrito viscosa
(resistência do ar) seja proporcional a velocidade (−βv). A 2ª Lei de Newton acerta que

dv β dv g
−maĵ = −mg ĵ − βv ĵ → a= =g− v → = (vl − v),
dt m dt vl

onde vl = mg/β é a velocidade limite do paraquedista (força resultante nula). Na primeira


equação consideramos um referencial orientado de baixo para cima com a origem no solo
de modo que a, v e g são considerados positivos. Use o método iterativo desta seção (a
exemplo do código maxwell.m) para obter
4.3. EXERCÍCIOS 43

(a) o parâmetro β, a altura inicial y0 e a ve-


locidade inicial v0 a partir dos dados (tempo, Tabela : dados do altímetro, da velo-
altitude) segundo a tabela ao lado sabendo que cidade e da aceleração em função do
a dependência da altitude com o tempo é dada tempo
por
  t (s) y (m) v (m/s) a (m/s2 )
mgt m mg 1.50 1.4e+3 2.1e+1 6.8
y(t) = y0 − + − v0 (1 − e−βt/m )
β β β 3.00 1.3e+3 2.9e+1 4.7
4.50 1.1e+3 3.4e+1 3.4
(b) a velocidade v0 e o coeficiente β a partir dos
6.00 1.0e+3 3.9e+1 2.6
dados (tempo, velocidade) fornecidos na tabela
7.50 9.0e+2 4.2e+1 1.9
ao lado sabendo que a dependência da velocidade
9.00 8.6e+2 4.6e+1 1.6
com o tempo é dada por
10.5 7.3e+2 4.7e+1 1.1
11.0 5.9e+2 4.7e+1 8.0e-1
 
mg mg
v(t) = − − v0 e−βt/m
β β 12.5 6.1e+2 5.1e+1 7.2e-1
14.0 4.7e+2 5.0e+1 5.0e-1
(c) a velocidade v0 e o coeficiente β a partir dos 15.5 4.3e+2 5.3e+1 4.2e-1
dados (tempo, aceleração) fornecidos na tabela 17.0 3.0e+2 5.1e+1 2.8e-1
ao lado sabendo que a dependência da aceleração 18.5 2.3e+2 5.2e+1 2.23e-1
com o tempo é dada por 20.0 1.4e+2 5.1e+1 1.59e-1

mg
 22.5 6.7e+1 5.2e+1 1.24e-1
a(t) = − v0 e−βt/m
β

(d) o parâmetro β, a altura inicial y0 e a velo- OBS.: façam o script em Matlab/Oc-


cidade inicial v0 a partir dos dados (velocidade, tave que forneça os parâmetros pedi-
altitude) fornecidos na tabela ao lado sabendo dos. Acrescente ao final do script ins-
que a dependência da altitude com a velocidade truções para gerar um gráfico dos da-
é dada por dos experimentais (pts. vermelhos) e
que mostre o ajuste conseguido (linha
m m2 g mg − βv contínua azul).
y(v) = y0 + (v0 − v) − 2 ln .
β β mg − βv0
44 CAPÍTULO 4. AJUSTE DE CURVAS
Capítulo 5

Sistema de Equações Lineares

5.1 Definições

Definimos uma equação linear de n variáveis na forma: a1 x1 + a2 x2 + · · · + an xn = b onde os x0i s


sãos as incógnitas da equação, os a0i s são os coeficientes das incógnitas (números conhecidos) e b
é o termo independente (conhecido). Como outro exemplo exemplo: ax + by + cz = d representa
uma equação linear com três incógnitas, x, y e z.
Consideremos A uma matriz n × n, x um vetor de incógnitas n × 1 e b o vetor de termos
independentes n × 1. A formulação matricial Ax = b representa um sistema de equações lineares
de ordem n × n, cuja solução x deve ser obtida através de um processo em que todas as equações
são satisfeitas ao mesmo tempo. Para esclarecer, se n = 3 temos o seguinte sistema de equações
    
A11 A12 A13 x1 b1 A11 x1 + A12 x2 + A13 x3 = b1
 A21 A22 A23   x2  =  b2  ou A21 x1 + A22 x2 + A23 x3 = b2 .
A31 A32 A33 x3 b3 A31 x1 + A32 x2 + A33 x3 = b3

Dependendo de como a matriz A e o vetor b se apresentam os sistemas lineares são classificados


como Sist. Impossível (SI), Sist. Possível e Indetrminado (SPI) e Sist. Possível e Determinado
(SPD), e.g.,
    
2 2 x1 5
1. SI - não tem solução; =
−2 −2 x2 5
    
1 1 x1 5
2. SPI - infinitas soluções; = ⇒ (0; 5), (2, 5; 2, 5), . . .
3 3 x2 15
    
2 2 x1 5
3. SPD - solução única; = ⇒ (0; 2, 5)
−2 2 x2 5

As operações aritméticas abaixo, realizadas entre duas equações do mesmo sistema de equações,
resultam em sistemas equivalentes ( com mesma solução):

a) ao multiplicarmos os membros de uma equação do sistema por um número real distinto de


zero, obtém-se outro sistema equivalente ao inicial;

b) ao somar ou subtrair duas equação do mesmo sistema, obtemos outro sistema equivalente
ao inicial;
46 CAPÍTULO 5. SISTEMA DE EQUAÇÕES LINEARES

c) somando (subtraindo) uma equação do sistema à outra equação do mesmo, multiplicada


por um número real diferente de zero, obtemos outro sistema equivalente;

d) se em um sistema de equações lineares uma equação é proporcional a outra ou é combinação


linear de outras, podemos retirá-la e o sistema que obtemos é equivalente ao inicial.

Veremos nas seções a seguir algumas das técnicas de solução de sistemas de equações lineares.

5.2 Método de Gauss (Eliminação Gaussiana)

Neste método necessitamos dois passos para obter o vetor solução.de um sistema de equações:

1. triangularizar a matriz A e,

2. realizar a retro-substituição (substituição regressiva).

No primeiro passo usamos operações aritméticas entre linhas da matriz de modo a deixá-la na
forma triangular a saber
 0 0 0    0 
A11 A12 A13 x1 b1
 0 A0 0
x2 = b2  ,
0
22 A23
   
0 0
0 0 A33 x3 b3
0 0
onde Aij são os elementos modificados da matria A enquanto bi são os elementos modificados do
vetor independente b.

Exemplo 5.1: Desejamos triangularizar o sistema de equações Ax = b dados A = [1 3 4; 4 2 3; 2 4 1]


e b = [1; 2; 3].
Iniciamos com a a matriz ampliada, i.e.
 
1 3 4 1
AA =  4 2 3 2 
2 4 1 3

e então começamos a operá-la. 1) Substituímos a 2ª linha pelo resultado da subtração


entre o dobro da terceira linha menos a segunda, i.e.
 
1 3 4 1
AA =  0 6 −1 4  .
2 4 1 3

Em seguida 2) substituimos a 3ª linha pelo resultado da subtração entre o dobro da primeira


linha e a terceira, i.e.  
1 3 4 1
AA =  0 6 −1 4  .
0 2 7 −1
Finalmente 3) substituimos a 3ª linha pelo resultado da subtração entre a segunda linha e
o triplo da terceira, i.e.  
1 3 4 1
AA =  0 6 −1 4  .
0 0 22 −7
5.3. MÉTODO DE GAUSS-JORDAN 47

Assim obtemos o novo sistema de equações A0 x = b0 em que a matriz A foi triangularizada


      
1 3 4 1 3 4 x1 1
A0 =  0 6 −1  ⇒  0 6 −1   x2  =  4  .
0 0 22 0 0 22 x3 −7

O novo sistema de equações pode ser facilmnete resolvido por retrosubstituição pois conhecemos
o valor de x3 através de uma simples operação: x3 = −7/22.

Exemplo 5.2: Retrosubstituição: Sabemos da terceira equação do sistema que x3 = −7/22.


Substituindo este valor na segunda equação 6x2 − x3 = 4 obtemos
 
1 7 81 27
x2 = 4− = ⇒ x2 = .
6 22 6 × 22 44
Em seguida substituimos x2 e x3 na primeira equação x1 + 3x2 + 4x3 = 1:
27 7 44 − 81 + 56 19
x1 = 1 − 3 · +4· ⇒ x1 = ⇒ x1 = .
44 22 44 44
A solução do sistema de equações segundo o método de Gauss é: x = [19/44; 27/44; −7/22].

5.3 Método de Gauss-Jordan

Este método é uma extensão do método de Gauss que objetiva a transformação da matriz A
em uma matriz identidade. Basicamente as operaçoes entre linhas são promovidas de modo a
diagonalizar a matriz original finalizando com elementos unitários na diagonal principal.

Exemplo 5.3: suponha um sistema 3 × 3 dado por A = [2 4 2; 2 1 1; 1 1 2] e b = [6; 16; 9].


Usando a matriz ampliada temos
 
2 4 2 6

AA =  2 1 1 16  .

1 1 2 9

Como o elemento (3,1) é unitário, permutamos as linhas 1 e 3 obtendo


 
1 1 2 9
AA =  2 1 1 16  .
2 4 2 6
Realizamos as seguintes operaçoes: L2 = L2 − 2L1 e L3 = L3 − 2L1 obtendo
 
1 1 2 9
AA =  0 −1 −3 −2  .
0 2 −2 −12
Multiplicamos L2 por -1 e fazemos as seguintes operações: L1 = L1 − L2 e L3 = L3 − 2L2
obtendo
   
1 0 −1 7 1 0 −1 7
L3 =−L3 /8
AA =  0 1 3 2  −→ AA =  0 1 3 2  .
0 0 −8 −16 0 0 1 2
Finalmente as operações: L1 = L1 + L3 e L2 = L2 − 3L3 nos permitem escrever
 
1 0 0 9
AA =  0 1 0 −4 
0 0 1 2
fornecendo a solução desejada x = [9; −4; 2].
48 CAPÍTULO 5. SISTEMA DE EQUAÇÕES LINEARES

Este método é muito pouco usado nas soluções de sistemas de equações pois necessita de um
número maior de operações levando o dobro do tempo gasto pelo método de Gauss. Em al-
guns problemas físicos o objetivo é a diagonalização de operadores (como A): problemas de
auto-valores e auto-vetores são amplamente usados em Mecânica Quântica. Nestes casos não
trabalhamos com a amatriz ampliada e o resultado da diagonalização fornece, na diagonal prin-
cipal, o espectro de auto-valores do operador ao invés da matriz identidade.

5.4 Decomposição LU (ou Fatoração LU)

Este método é mais trabalhoso que o método de Gauss porém muito prático quando necessitamos
resolver sistemas de equações em que a matriz de coeficientes A permanece a mesma e o vetor
de termos independentes b assume diferentes valores para cada sistema de equações a resolver.
Na forma compacta o sistema de equações Ax = b pode ser reescrito usando a igualdade LU = A
na forma
LU x = b. (5.1)

onde L é a matriz inferior (lower ) e U é a matriz superior (upper ) que multiplicadas fornecem a
matriz A, i.e.
    
1 0 ··· 0 U11 U12 · · · U1n A11 A12 ··· A1n
 L21 1 ··· 0  0 U22 . . . U2n   A21 A22 ... A2n 
 .. .. .. .. .. .. .. .. = .. .. .. .. .
    
 . . . . . . . . . . . .

   
Ln1 Ln2 . . . 1 0 0 . . . Un n An1 An2 . . . An n

Ao multiplicarmos a 1ª linha de L pelas colunas de U verificamos que U1j = A1j para j = 1, ..., n.
Ao multiplicarmos a 2ª linha de L pela 1ª coluna de U obtemos L21 U11 = A21 ou ainda L21 =
A21 /U11 . As multiplicações pelas outras colunas fornecem equações com dois termos na forma
L21 U1j + 1 · U2j = A2j para j = 2, ..., n e, visto que conhecemos L21 bem como a primeira linha
da matriz U obtemos U2j = A2j − L21 U1j , i.e., os coeficientes restantes da 2ª linha da matriz U .
O processo acima pode ser extendido no intuito de construirmos ambas as matrizes L e U .
Suprimindo detalhes a fatoração da matriz A em uma matriz inferior L e outra superior U é
resumida em duas equações a saber
i−1
X
Uij = Aij − Lik Ukj , para i ≤ j ; (5.2)
k=1
 Pi−1 
Aij − k=1 Lik Ukj
Lij = , para i > j. (5.3)
Ujj

Visto que LU x = b escrevemos Ly = b e y = U x e a solução do sistema de equações, após a


fotoração de Aé resolvido em duas etapas:

1. calculamos y a partir de Ly = b
    
1 0 ··· 0 y1 b1
 L21 1 ··· 0  y2   b2 
 .. .. . . .. .. = ..
    
 . . . . . .
 
   
Ln1 Ln2 . . . 1 yn bn
5.5. MÉTODO ITERATIVO DE JACOBI-RICHARDSON 49

fornecendo: y1 = b1 ; y2 = b2 − L21 y1 ; y3 = b3 − L31 y1 − L32 y2 etc. Este processo leva a


seguinte fórmula de recorrência
i−1
X
yi = bi − Lij yj , para i = 1, ..., n. (5.4)
j=1

2. usando retro-substituição obtemos x a partir de U e y:


    
U11 U12 · · · U1n x1 y1
 0 U22 . . . U2n   x2   y2 
 .. .. . ..   ..  =  ..
    
 . . . . .  .   .


0 0 . . . Un n xn yn

sedo este procedimento idêntico à segunda etapa do método de Gauss.

5.5 Método Iterativo de Jacobi-Richardson

Os métodos iterativos usam um uma estimativa inicial da solução do sistema de equações para
obter uma melhor estimativa da mesma após sucessivos passos. Assim, sendo x0 é uma solução
aproximada do sistema de equações o processo deve ser capaz de devolver uma solução aproxi-
mada x1 , melhor do que x0 , após uma iteração. A solução x1 é então usada para obtenção de x2
e assim sucessivamente.
Consideremos um sistema n × n do tipo Ax = b. Podemos escrever a matriz de coeficientes como
a soma de três matrizes: uma triangular inferior, uma diagonal e uma triangular superior na
forma
     
0 0 ··· 0 A11 0 · · · 0 0 U12 · · · U1n
 L21 0 ··· 0    0 A22 · · ·
 0   0 0 . . . U2n 
 
 .. .. . . ..   ..
+ .. .. .. + . .. .. ..  = A

 . . . . . . . .   .. . . . 
   

Ln1 Ln2 . . . 0 0 0 . . . Ann 0 0 ... 0


| {z } | {z } | {z }
L D U

ou L + D + U = A.

Substituindo expressão A no sistema original obtemos


 
L+D+U x=b

e, manipulando, vêm
 
Dx = b − L + U x,
−1 −1  
x = D b−D L + U x.

O processo iterativo de Jacobi-Richardson inicia-se ao substituirmos x à direita da igualdade


por sua aproximação x1 resultando em uma nova aproximação da solução. Como este processo
é repetido várias vezez, a fórmula de recorrência deste método é
−1 −1  
xk+1 = D b−D L + U xk , para k = 1, 2, .... (5.5)
50 CAPÍTULO 5. SISTEMA DE EQUAÇÕES LINEARES

finalizando quando o limite máximo de iterações é ultrapassado ou quando a diferença max|xk+1 −


xk | < ε, sendo ε um número pequeno relacionado com o grau de precisão desejado para a solução
do problema.
Verificamos na Eq.(5.5) a necessidade de inverter a matriz diagonal D. Embora a inversão desta
matriz seja muito simples é possível evitar este procedimento redefinindo os termos da Eq.(5.5)
a saber
 
xk+1 = b∗ − L∗ + U ∗ xk , para k = 1, 2, .... (5.6)


bi
 = bi /Aii , i = 1, ..., n
onde Lij = Aij /Aii , se i > j e 0 caso contrário

Uij = Aij /Aii , se i < j e 0 caso contrário



 ∗

o que representa uma normalização dos elementos de cada equação do sistema de equações pelo
elemento da diagonal principal Aii no início da dedução do método.

5.6 Método de Gauss-Sidel


 
Como na seção anterior reescrevemos o sistema de equações Ax = b na forma L∗ + I + U ∗ x =
b∗ , sendo I. a matriz identidade. Manipulando a equação obtemos
 
L∗ + I x = b∗ − U ∗ x
 −1  −1
x = L∗ + I b∗ − L∗ + I U∗ x

e, admitindo uma solução inicial aproximada para x à direita da igualdade, obtemos a fórmula
de recorrência para o método iterativo de Gauss-Sidel a saber
 −1  −1
xk+1 = L∗ + I b∗ − L∗ + I U ∗ xk , para k = 1, 2, ... (5.7)

com critérios de parada idênticos aos mencionados na seção anterior.


Devemos observar na Eq.(5.7) a necessidade de inverter a matriz triangular inferior (L∗ + I)
para a aplicação do método. É neste ponto que nos perguntamos: por quê tanto trabalho se
necessitamos inverter o termo (L∗ + I) ? Não seria melhor resolver o sistema Ax = b invertendo
a matriz A e multiplicando o resultado por b?
A resposta a esta pergunta torna-se clara ao redefinirmos o método. Pré-multiplicamos a Eq.(5.7)
pela matriz (L∗ + I) obtendo
 
L∗ + I xk+1 = b∗ − U ∗ xk , ou

xk+1 = b∗ − L∗ xk+1 − U ∗ xk , para k = 1, 2, ... (5.8)

A Eq.(5.8) permite o cálculo iterativo da solução do sistema de equações sem a necessidade da


inversão da matriz (L∗ + I). Assumindo um chute inicial xk = [xk1 ; xk2 ; . . . , xkn ] com k = 0 para
o primeiro passo temos

xk+1
1 = −A∗12 xk2 − A13 xk3 − · · · − A1n xkn + b∗1
xk+1
2 = −A∗21 xk+1
1 − A23 xk3 − · · · − A2n xkn + b∗2
.. ..
. .
xk+1
n = −A∗n1 xk+1
1 − An2 xk+1
2 − · · · − Ann xk+1 ∗
n−1 + bn
5.7. CONVERGÊNCIA DOS MÉTODOS ITERATIVOS 51

o que fornece x1 = [x11 ; x12 ; . . . , x1n ]. No segundo passo incrementa-se k para o valor 1 repetindo-
se o processo. Podemos observar nas soluções que o valor recém calculado de x1 é usado para
estimar xk+1
2 . Os valores atualizados de x1 e x2 são empregados na estimativa de x3
k+1
e assim
sucessivamente até xn .
k+1

5.7 Convergência dos métodos Iterativos

Os dois métodos iterativos, acima apresentados, irão convergir para a solução do sistema de equa-
ções sempre que a matriz for diagonalmente dominante,. i.e., quando a matriz A satisfizer

n
X
|Aii | > |Aij | , para cada i = 1, 2, . . . , n.
j6=i

Convergências lentas ocorrem quando o chute inicial está distante da solução do problema e
quando o critério acima fica próximo da igualdade, ou seja

X
|Aii | ≈ |Aij | , para i = 1, 2, . . . , n.
j6=i

É possível melhorar o condicionamento da matriz realizando algumas permutações entre linhas de


modo a tornar o sistema diagonalmente dominante. Este processo é denominado de pivoteamento
e é usado também nas soluções diretas obtidas pela aplicação do método de Gauss, de Jacobi-
Richardson e decomposição LU.

Exemplo 5.4: Podemos usar um sistema de equações lineares para obter, por exemplo, as
correntes que circulam nas malhas do circuito abaixo. O método de Maxwell é simples pois
assume apenas uma corrente em cada malha. Considerando a Lei de Kirchoff para as três
malhas do circuito temos

R0 i0 + V2 + R5 (i0 − i2 ) + R6 i0 = 0
R1 i1 + R2 (i1 − i2 ) − V2 = 0
R3 i2 + R4 i2 + R5 (i2 − i0 ) + R2 i2 = 0

Sabendo que R1 = R3 = R5 = 100Ω e R0 = R2 = R4 = R6 = 200Ω monte o sistema de


equações e obtenha, com papel-lápis-calculadora, as correntes usando

a) o método de Gauss e

b) o método de Gauss-Sidel.

c) Agora tente implementar o método de Gauss usando a linguagem do Matlab ou do


Octave de modo que valores das resistências R0 . . . R5 bem como de V1 e V2 sejam inseridos
via teclado antes de se resolver o problema computacionalmente.
52 CAPÍTULO 5. SISTEMA DE EQUAÇÕES LINEARES

Observação: as correntes que


percorrem os resistores serão
dadas por

R1 −→ I1
R2 −→ I1 − I2
R3 −→ I2 R4 −→ I2
R5 −→ I0 − I2
R0 −→ I0 R5 −→ I0

Figura 5.1: Circuito com três malhas e duas


fontes de tensão contínuas V1 e V2 .

5.8 Exercícios

5.1- Dados A = [2, 2, 1, 1; 1, −1, 2, −1; 3, 2, −3, −2; 4, 3, 2, 1] e b = [7; 1; 4; 12] determine
por decomposição LU a solução do sistema de equações. Resp: a solução é x = [1; 2; 1; 0].

5.2- Use os dados do exercício 5.1 e determine a solução do sistema de equações usando o método
de Gauss-Sidel. (Obs.: verifique se o sistema é diagonalmente dominante; em caso negativo
opere as equações para obter um sistema equivalente que satisfaça esta exigência).

5.3- A Ponte de Wheatstone é usada para calcular resistências (ou capacitâncias) desconhecidas.
O circuito abaixo ilustra uma Ponte de Wheatstone em que R0 I5 = 0 quando a ponte está
em equilíbrio, i.e., quando R2 R3 = R1 R4 . Normalmente entre os pontos B e D existe um
amperímetro que indica a corrente neste segmento (I5 ) sendo R0 a resistência do aparelho.

Figura 5.2: Esquema de circuito: Ponte de Wheatstone


5.8. EXERCÍCIOS 53

Aplicando as Leis de Kirchhoff aos nós A, D, C e D obtemos as equações

I = I1 + I2 ,
I3 = I1 + I5 ,
I = I3 + I4 ,
I2 = I4 + I5 .

As três malhas fornecem as equações restantes

I2 R2 + I4 R4 = V,
I1 R1 − I5 R5 − I2 R2 = 0,
I3 R3 − I4 R4 + I5 R5 = 0.

A solução analítica poderá ser derivada desde que sejam fornecidos dados suficientes para
isso: este sistema possui cinco resistências, seis correntes, uma fonte (bateria) e apenas
sete equações. Assumindo que as incógnitas do problema sejam as correntes reescrevemos
o conjunto de equações acima na forma

1 −1 −1
   
0 0 0   0
I
 0 1 0 −1 0 1   0 
  I1   
 1 0 0 −1 −1 0    0 
  I2   
 0 0 1 0 −1 −1  = 0  −→ Ax̄ = b̄
  I3   
 0 R1 0 0 R4 0    V 
  I4   
 0 R1 −R2 0 0 −R5   0 
I5
0 0 0 R3 −R4 R5 0

onde observa-se que a matriz A não é quadrada. Uma forma de solucionar este problema
baseia-se na obtenção de um sistema de equações equivalente. Para tanto pré-multiplicamos
a equação pela matriz transposta de A, ou seja, fazemos

T T
A Ax̄ = A b̄ ⇒ M x̄ = c̄

T T
onde c̄ = A b̄ e M = A A sendo M uma matriz quadrada 6x6. Considere R1 = 100Ω,
R2 = 30Ω, R3 = 20Ω, R4 = 200Ω, R5 = 1Ω e que a bateria forneça 20V de d.d.p. entre
os terminais A e C do circuito. Monte a matriz A e o vetor b̄, realize a pré-multiplicação
para obter a matriz M e o vetor c̄. Em seguida implemente um script (Matlab/Octave)
para encontrar computacionalmente as correntes em cada resistor pelo

(a) Método de Fatoração LU e

(b) Método de Gauss-Sidel


54 CAPÍTULO 5. SISTEMA DE EQUAÇÕES LINEARES

5.4- Considere o sistema de roldana e pesos ao lado (Máquna de


Atwood). A roldana possui raio R e momento de Inércia
I. Considere M > m valores também conhecidos e:

(a) Escreva as equações de movimento dos pesos e da


roldana.

(b) Monte um sistema de equações em que as incógnitas


são T1 , T2 e a aceleração angular da roldana α.

(c) Dados M = 2Kg , m = 1Kg, R = 10cm e I = 0,01


Kg·m2 altere o script Gauss.m para obter a solução.

(d) Altere GauSeidel.m para obter a solução.

(e) O sistema Físico é levado a Lua (g muda) recalcule a


solução usando o item c.
5.5- O sistema de treliças ao lado composto de sete
barras de comprimento de 2 m cada. Em cada
um dos nós A, B, C, D e E existem esforços
concorrentes e que podem ser equacionados na
forma

−f1 cos 60° + f2 = 0
Nó A
−f1 sen60° + HA = 0

−f2 − f3 cos 60° + f5 cos 60°+f6 = 0
Nó B
f3 sen60° + f5 sen60° = 10000
 Figura 5.3: Sistema de treliças do exer-
f1 cos 60° + f3 cos 60° − f4 = 0
Nó D cício 5.5.
f1 sen60° − f3 sen60° = 12000

(a) Escreva as equações pertinentes aos nós C e E.

(b) Considerando que HA = HC = 20KN reescreva o conjunto de equações na forma


matricial em que o vetor de incógnitas seja composto das forças f1 , f2 , . . . , f7 .

(c) Altere o script Gauss.m para e obtenha a solução.

(d) Altere GauSeidel.m para obter a solução e compare com os resultados do item c.

(e) O sistema é levado a Lua (g muda) recalcule a solução usando o script do item c.
Capítulo 6

Solução de Equações Diferenciais


Ordinárias

Nos distintos ramos da ciência Física podemos encontrar inúmeros sistemas que são regidos por
equações diferenciais. Como exemplo primeira Lei de Newton aplicada ao sistema massa-mola
leva às equações diferenciais do oscilador harmônico, simples, amortecido e forçado. As leis de
Maxwell na forma diferencial, as equações de Navier-Stokes, a difusão e condução do calor podem
conduzir às denominadas equações diferenciais ordinárias.
Este capítulo apresenta, com uma formulação simples, o Método de Diferenças Finitas (MDF)
como ferramenta numérica para obtenção das soluções de algumas equações diferenciais tais
como: decaimento radioativo, oscilações e difusão do calor.

6.1 Decaimento Radioativo

A Lei que expressa o decaimento radioativo de uma substância radioativa (ex. Urânio, Tório,
Potássio) é equacionada na forma
dN
= −λN =⇒ N (t) = N0 exp(−λt) (6.1)
dt
onde N0 representa o número de átomos radioativos no instante t = 0s e λ uma constante de
decaimento que depende da substância. Algumas definições importantes são:
ln 2 0, 693
t1/2 = = , meia vida
λ λ
1
tm = , vida média
λ
sendo que a meia vida da substância, como a denominação sugere, é o tempo necessário para
que metade dos núcleos radioativos decaiam e tm é o tempo médio de vida da substância. Em-
bora tenhamos a solução analítica do problema podemos, a título de exemplo, aplicar a técnica
numérica denominada de Métodos de Diferenças Finitas à equação diferencial com o intuito de
obter uma solução numérica N num (t). Para isso devemos substitui a derivada dN/dt por suas
aproximações (vide cap. anterior), ou seja

Ni+1 − Ni−1
1. Diferença centrada: = −λNi =⇒ Ni+1 = Ni−1 − 2λ∆t Ni (Centered)
2∆t
Ni − Ni−1 Ni−1
2. Diferença atrasada: = −λNi =⇒ Ni = (Backward)
∆t 1 + λ∆t
56 CAPÍTULO 6. SOLUÇÃO DE EQUAÇÕES DIFERENCIAIS ORDINÁRIAS

Ni+1 − Ni
3. Diferença adiantada: = −λNi =⇒ Ni+1 = Ni (1 − λ∆t) (Forward)
∆t
Ni+1 − Ni
4. Forward Modificado: = −λNi+1/2 e, tomando o valor médio Ni+1/2 = (Ni+1 +
∆t
Ni )/2 obtemos
(1 − λ∆t/2)
Ni+1 = Ni
(1 + λ∆t/2)

Tarefa 6.1: (a) Considerando N0 = 1000 e λ = 3, 46 × 10−2 s−1 determine numericamente os


valores de N (t) segundo as aproximações de 1 a 4 usando 21 amostras no tempo compre-
endido ao intervalo [0 , 5 × 10−2 ] segundos.
(b) Faça um gráfico de tempo contra as soluções numéricas N1 (t), N2 (t), ...
(c) Calcule a solução analítica nos tempos discretizados e compute os erros de cada apro-
−N
ximação na forma erro = Sanal Sanal × 100. Ao final produza um gráfico do tempo contra
cada um dos erros.

6.2 Equação de Poisson 1-D

Em eletrostática vimos uma relação entre o fluxo do campo elétrico e a distribuição de cargas no

− →

espaço. Considerando o vetor deslocamento elétrico, D = ε E , onde ε é a permitividade elétrica


do meio e E o campo elétrico temos


∇ · D = ρ, (Lei de Gauss)

ou ainda


∇ · (ε E ) = ρ, (6.2)
sendo ρ a densidade de carga. O campo elétrico pode ser obtido a partir do gradiente do potencial


elétrico, i.e., E = −∇V . Substituindo na equação (6.2) vem

−∇ · (ε∇V ) = ρ. (6.3)

Em meios homogêneos ε é constante e a última equação simplifica-se para


ρ
∇2 V = − , (6.4)
ε
conhecida por equação de Poisson para o potencial eletrostático. Com exemplo considere a
seguinte equação diferencial de segunda ordem

d2 φ
= f (x) = −x (6.5)
dx2
sujeita as seguintes condições de fronteira (Dirichlet)

φ(0) = φ1 = a,
φ(1) = φn = b.

Usando diferença centrada à esquerda da igualdade temos

φ(x + ∆x) − 2φ(x) + φ(x − ∆x)


= −x
∆x2
6.2. EQUAÇÃO DE POISSON 1-D 57

que pode ser simplificada usando a notação x = (i − 1)∆x, φ(x) = φi , φ(x + ∆x) = φi+1 de
modo que

φi+1 − 2φi + φi−1


= −xi
∆x2
φi−1 − 2φi + φi+1 = −∆x2 · xi . (6.6)

Existem dois problemas ao se tentar usar esta equação: um ocorre quando inserimos i = 1, pois
aparece um termo φ0 = φ(−∆x) que não está no domínio do problema e dois, quando i = n, pois
aparece o termo φn+1 = φ(1 + ∆x) que também encontra-se fora do modelo (domínio) definido
para valores de x ∈ [0, 1]. Podemos desenvolver a última equação para diferentes posições x, ou
equivalentemente, para diferentes valores de i na forma

i=1 φ0 − 2φ1 + φ2 = −∆x2 · x1


i=2 φ1 − 2φ2 + φ3 = −∆x2 · x2
i=3 φ2 − 2φ3 + φ4 = −∆x2 · x3
: : :
i=n φn−1 − 2φn + φn+1 = −∆x2 · xn .

Como φ0 e φn+1 não fazem parte da solução os termos devem ser retirados da primeira e última
equações. Além disso, das condições de fronteira sabemos os exatos valores de φ1 e de φn , de
modo que a primeira e a última equações não são verdadeiras devendo ser removidas do sistema
de equações. O resultado destas conjecturas permite reescrever o conjunto de equações acima na
forma

i=2 −2φ2 + φ3 = −∆x2 · x2 − φ1


i=3 φ2 − 2φ3 + φ4 = −∆x2 · x3
: : :
i=n−1 φn−2 − 2φn−1 = −∆x2 · xn−1 − φn

e, usando φ1 = a e φn = b, pode-se expressar o sistema na forma matricial a saber

−2 1 −∆x2 · x2 − a
    
0 . . . . 0 φ2
 1 −2 1 0 . . . 0  φ3   −∆x2 · x3 
−∆x2 · x4
    

 0 1 −2 1 0 . . . 
 φ4  
 


. 0 . . . . . . . .
(6.7)
    
  = .

 . . . . . . . . 
 .  
  . 


 . . . . . . . . 
 .  
  . 

 . . . . . . −2 1  .   . 
0 0 . . . 0 1 −2 φn−1 −∆x2 · xn−1 − b

Denominando a matriz a esquerda da igualdade de K, o vetor solução-parcial de ψ e o vetor à


direita da igualdade de c, o sistema simultâneo de equações é resolvido a saber

Kψ = d
−1
ψ = K d. (6.8)

Neste sistema de equações a matriz K é de ordem (n − 2) × (n − 2) enquanto os vetores possuem


n − 2 elementos. O vetor solução deste problema, φ, pode ser obtido usando as seguintes linhas
de comando no ambiente Octave/Matlab
58 CAPÍTULO 6. SOLUÇÃO DE EQUAÇÕES DIFERENCIAIS ORDINÁRIAS

clear;
...
define-se a e b (cond. cont.)
define-se n, dx e x
calcula-se a matriz K
calcula-se o vetor c
...
psi=inv(K)*d ; % solução para i=2,..,n-1. Exclui-se as bordas
phi(1) = a; %\
phi(2:n-1)= psi; % > solução numérica completa.
phi(n) = b ; %/
phi_anl = x.*(1-x.^3)/12; % solução analítica
plot(x,psi,’b.’, x,phi_anl,’r-’) % gráfico comparativo entre soluções

Observação: quando o meio for heterogêneo ε = ε(x) a equação (6.3) é desenvolvida usando a
identidade vetorial ∇ · (A∇B) = ∇B · ∇A + A(∇ · ∇B) sendo A e B escalares. A aplicação
desta identidade fornece
∇ · (ε∇V ) = ∇ε · ∇V + ε(∇ · ∇V ) = −ρ
ε∇2 V + ∇ε · ∇V = −ρ
d2 V dε dV
ε 2 + = −ρ
dx dx dx
d2 V d ln ε dV ρ
2
+ =−
dx dx dx ε
ou seja, para meios heterogêneos a equação diferencial possui um termo com dependência
no gradiente do potencial elétrico.

6.2.1 Algoritmo de Thomas - Sistemas tridiagonais

Um grande número de problemas físicos recaem em um sistema de equações do tipo Ax = b onde


a matriz A é tridiagonal, ou seja, possui a diagonal principal (bi ), uma subdiagonal (ai ) e uma
sobrediagonal (ci ) na forma
    
b1 c1 0 0 . . . 0 x1 d1
 a2 b2 c2 0 . . . 0   x2   d2 
   

 0 a3 b3 c3 . . . 0   x3   d3 
   
 0 0 a4 . . . . . . . . .

..   ..  =  ..  .
     
 .. . .   ..   .. 
    
 . ... 0 . . . . cn−1   .   . 
0 · · · 0 0 an bn xn dn
A proposta do algoritmo é de obter o vetor x armazenando apenas as três diagonais da matriz ao
invés de armazenar a matriz cheia n × n. Em uma primeira etapa o processo é o de eliminação
da diagonal inferior (vide método de eliminação Gaussiana) de modo que escrevemos

c1 = c1 /b1
d1 = d1 /b1
para k de 1 até n
den = bk − ak ck−1
ck = ck /den
dk = (dk − ak dk−1 )/den
fim do laço
6.2. EQUAÇÃO DE POISSON 1-D 59

Em uma segunda etapa, a da retrosubstituição obtemos a solução desejada a saber

xn = dn
para k de n-1 até 1
xk = dk − ck xk+1
fim

No ambiente Matlab/Octave podemos criar uma função para este fim. Um exemplo é

function [x]=TRID(a,b,c,d)
% resolve o sistema Ax=d com A tridiagonal
% a - diagonal inferior de A
% b - diagonal principal “
% c - diagonal superior “
% d - vetor de termos independentes
% http://en.wikipedia.org/wiki/Tridiagonal_matrix_algorithm#Variants
n=length(a);
c(1) = c(1)/b(1);
d(1) = d(1)/b(1);
for i = 2:n
id = (b(i) - c(i-1)*a(i)) ;
c(i) = c(i)/id ;
d(i) = (d(i) - a(i)*d(i-1))/id ;
end
% retrosubstituição
x(n) = d(n) ;
for i= n-1:-1:1
x(i) = d(i) - c(i)*x(i + 1) ;
end

Dirichlet: na seção anterior vimos um exemplo em que a solução da EDO possuia valores
fixos nas duas fronteiras do modelo: condições de Dirichlet. Como resultado o sistema
de equações n × n foi reduzido à um sistema com n − 2 incógnitas e o vetor de termos
independentes teve a primeira e última linhas alteradas para inserção das condições de
contorno, i.e.
   
d2 a
 d3   0 
0 0
K ψ = d onde d = d − cD =  .  −  .  .
   
 ..   .. 
dn−1 b

Muitos sistemas físicos possuem outras condições de contorno : em difusão do calor é comum
encontrarmos fronteiras com condições de convecção ou com fluxo prescritos, paredes adiabáticas
implicam em fluxo térmico nulo. No processo de obter a solução analítica ou numérica de equações
diferenciais impomos com frequência as de Neumann e de Robin (mista)
∂φ
α = γ e (6.9)
∂x
∂φ
α + βφ = γ, (6.10)
∂x
respectivamente. Como a condição de Robin incorpora a de Dirichlet (α = 0) e de Neumann
(β = 0) é interessante analizar como inseri-la na solução numérica de uma EDO de segunda
ordem.
60 CAPÍTULO 6. SOLUÇÃO DE EQUAÇÕES DIFERENCIAIS ORDINÁRIAS

Condição de Robin: Consideremos a solução numérica 1D (por DF) da EDO de Poisson

∇ · (k∇φ) = f

onde a condição mista ocorre em x = 0 e a condição de Dirichlet φ(L) = φL é imposta em


x = L. A equação diferencial acima assume a forma discretizada (com k = cte)
∆x2
φi−1 − 2φi + φi+1 = · fi , para i = 1, 2, ..., n − 1. (6.11)
k
onde adotou-se a discretização espacial na forma xi = (i − 1)∆x. Usando a aproximação
numérica (centrada) na derivada primeira da condição de contorno mista temos
φi+1 − φi−1
α + βφi = γ, em i = 1 vêm
2∆x
γ β
φ0 = −2∆x + 2∆x φ1 + φ2 (6.12)
α α
que representa o valor de φ obtido em um ponto fictício (fora do modelo) x0 = −∆x.
Substituindo φ0 na eq. (6.11) com i = 1 vêm
∆x2
i=1 ⇒ φ0 − 2φ1 + φ2 = · f1 ,
k
γ β ∆x2
−2∆x + 2∆x φ1 + φ2 − 2φ1 + φ2 = · f1 ,
α α k
∆x2

β γ
−2 1 − ∆x φ1 + 2φ2 = · f1 + 2∆x . (6.13)
α k α
Assim o sistema de equações lineares capaz de resolver numéricamente a equação de Poisson
com fonte e condições de Robin (x = 0) e Dirichlet (x = L) é
  ∆x2 γ

−2(1 − ∆x αβ ) 2 k · f1 + +2∆x α
 
0 . . . . 0 φ1
∆x2
1 −2 1 0 . . . 0   φ2   k · f2
    


∆x 2
0 1 −2 1 0 . . .   φ3   · f
  
    k 3 
. 0 . . . . . .  .  



  
= . 
 . . . . . . . .  .   
.


   
 . . . . . . . .  .   .


   
. . . −2 1 .

 . . .     . 
0 0 . . . 0 1 −2 φn−1 ∆x2
k · fn−1 − φL
(6.14)
onde consideramos os parâmetros k, α, β, γ e φL constantes. Comparando o último resul-
tado com o sistema de equações (6.7) concluímos: ao introduzir a condição de contorno
mista o sistema passa a ter ordem n − 1 e as mudanças ocorrem tanto na matriz quanto
no vetor de termos independentes.

O sistema de equações lineares em que a condição de Neumann ocorre em x = 0 deve ser deduzido
de forma similar ao descrito para condição mista. Tentar usar o artifício α = 0 na equação (6.14)
produzirá erro: divisão por zero!

Tarefa 6.2: (a) aplique diferenças finitas à equação de Poisson no domínio x[0, 1] e obtenha o
sistema de equações lineares como mostrado em 6.7 e 6.14 pertinente as seguintes condições
de contorno

φ(x) = a, em x = 0
∂φ
k = b, em x = 1
∂x
6.3. OSCILAÇÕES SIMPLES, AMORTECIDAS E FORÇADAS 61

(b) dado o termo fonte f (x) = −x derive a solução analítica para este problema, ou seja,
integre duas vezes a equação d2 φ/dx2 = −x/k e use as condições de contorno para deduzir
as constantes de integração.
(c) construa um script para ambiente Matlab/Octave que resolva o sistema de equações
obtido no item (a); programe também a solução analítica para comparação através da
instrução plot(x,phi,’b-’, x,phi_a, ’r.’) . Sugestão: use k = 0, 5; b = 0, 1 ; a = 2 e
L = 1.

6.3 Oscilações Simples, Amortecidas e Forçadas

Alguns sistemas físicos de movimento periódico estudados na graduação constituem o que denomina-
se de MHS - Movimento Harmônico Simples: Massa-Mola, Pêndulo Simples, Pêndulo Físico,
Circuito LC. Outros sistemas oscilantes podem conter em sua descrição físico-matemática os
termos dissipativos (atrito, resistência do ar) bem como o termo fonte.
Nesta seção veremos como problemas oscilantes com e sem amortecimento, com e sem fontes
usando como modelo o Oscilador Massa-Mola.

6.3.1 Oscilador Harmônico Simples

Este é o oscilador mais fundamental (Mecânica Clássica) que se trata na graduação do curso de
Física. É composto de uma mola de constante elástica k, com uma das extremidades fixa na
parede e a outra em um corpo ideal de massa m apoiado em uma mesa sem atrito. Dentro do
limite elástico da mola Hook propôs que a força exercida pela mola na massa é proporcional a
deformação da mesma. Designando a deformação por x e usando a 2ª Lei de Newton obtemos
ma = −kx,
d2 x k
2
= − x,
dt m
d2 x
+ w02 x = 0. (6.15)
dt2
Esta última equação é conhecida por Equação Diferencial do MHS sendo w0 = k/m a frequên-
p

cia angular (natural) do movimento periódico da massa. Relembrando a relação do período do


movimento com a frequência angular obtemos

T =
w0
o que nos permite calcular o tempo de uma oscilação do sistema cuja solução geral é
x(t) = A cos(w0 t + φ) (6.16)
onde A é a amplitude do movimento e φ a constante de fase - fase inicial do movimento.
Nosso intuito é usar o Método de Diferenças Finitas para obter soluções numéricas da posição
em função do tempo. Para tanto o eixo do tempo será discretizado a intervalos de tempo ∆t
de modo que as soluções x(t) serão obtidas no tempos discretos t = (j − 1)∆t, sendo j um
inteiro. Substituindo a derivada segunda na equação (6.15) por sua aproximação centrada (cap.
2) obtemos
xj+1 − 2xj + xj−1
+w02 xj =0
∆t2
xj+1 = 2xj − ∆t2 w02 xj − xj−1
xj+1 2 − ∆t2 w02 xj − xj−1 (6.17)

=
62 CAPÍTULO 6. SOLUÇÃO DE EQUAÇÕES DIFERENCIAIS ORDINÁRIAS

sendo esta uma formulação explícita do problema com o sobrescrito j associado ao tempo. Po-
demos observar na equação que para obtermos a solução no tempo posterior j + 1 necessitamos
do conhecimento das deformações em dois tempos anteriores, j e j − 1.
Conhecendo-se o período do movimento, ou equivalentemente a constante elástica e a massa
do corpo nos deparamos com um problema em que se faz necessário também o conhecimento
a posição inicial x(0) e a velocidade inicial v(0). A equação apresentada para xj+1 só pode
ser aplicada diretamente para o caso em que x(0) = A e v(0) = 0 pois assumindo causalidade
fazemos x2 = x1 = x(0) = A na tentativa de se obter x2 ≡ x(∆t). Vejamos o procedimento um
pouco mais genérico:

. conhecemos x(0), v(0) e w0 e desejamos x(t > 0). O problema está em encontrar quem são A
e φ no caso analítico porém, no caso numérico não há sentido já que não estão presentes
na expressão de xj+1 . Como v = dx/dt usamos a aproximação numérica para escrever

x2 − x0
v(0) = v 1 = =⇒ x0 = x2 − 2v(0)∆t
2∆t
e, substituindo na expressão de xj+1 com j = 1 temos

x2 = 2 − ∆t2 w02 x1 − x2 + 2v(0)∆t




1
x2 = 2 − ∆t2 w02 x1 + 2v(0)∆t
 
2
e que é válida apenas na primeira iteração j = 1 fornecendo então a igualdade
1
x2 = 2 − ∆t2 w02 x(0) + 2v(0)∆t (6.18)
 
2
pois x1 = x(0) e . Para as próximas iterações j = 2, 3, ... a equação a ser usada é a que
foi deduzida anteriormente

xj+1 = 2 − ∆t2 w02 xj − xj−1 .




O script abaixo fornece os primeiros passos na tentativa de se obter um gráfico da solução e o


erro entre a solução analítica e numérica.

clear;
tmax = input(’ Entre com Tempo maximo: ’); % tempo desejado da solução
% discretização no tempo
dt = input(’ Entre com discretização do tempo (dt): ’);
% numero de iterações no tempo
nt = Tmax/dt + 1 ;
x0 = input(’ Entre com posição em t=0s: ’) ; % posição inicial
v0 = input(’ Entre com velocidade em t=0s: ’) ; % velocidade inicial
w = input(’ Entre com freq. angular (k/m)^0.5: ’); % freq. angular
x(1)= x0 ; t(1)=0 ;
x(2)= 0.5*( (2-dt*dt*w*w)*x0 + 2*v0*dt) ; t(2)=dt ;
for j=2:nt % laço no tempo das soluções
t(j+1)=t(j)+dt ;
x(j+1)=(2-dt*dt*w*w)*x(j)-x(j-1) ;
end
phi= atan(-v0/(w*x0)); % fase inicial
A = x0/cos(phi) ; % amplitude
6.3. OSCILAÇÕES SIMPLES, AMORTECIDAS E FORÇADAS 63

xa = A*cos(w*t+phi) ; % sol. analitica


% gráfico comparando sol. anal. e sol. numérica
plot(t,x,’b’,t,xa,’r.’); grid; xlabel(’t (s)’); ylabel(’x(t) (m)’);
er=100*(x-xa)./max(xa) ; disp(’Em pausa - digite enter’) ;
pause;
% gráfico do erro entre sol. anal. e sol. numérica
plot(t,err); grid; xlabel(’t (s)’); ylabel(’erro rel %’);

6.3.2 Oscilações Forçadas com Amortecimento

Alguns sistemas físicos oscilam sujeitos a forças externas e um exemplo simples é o circuito
ressonante RLC com uma fonte alternada. O circuito pode entrar em ressonância (máxima
amplitude de corrente) quando a frequência da fonte se aproximar da frequência natural das
oscilações do sistema.
Tomando por base o sistema com amortecimento e admitindo que uma força externa cossenoidal
seja aplicada ao mesmo temos
d2 x b dx F0
2
+ + w02 x = cos(wf t) (6.19)
dt m dt m
onde F0 é a amplitude da força e wf a frequência angular da fonte. Como visto em disciplina
anterior, a solução analítica desta equação diferencial é obtida pela soma da solução da homogê-
nea com uma solução particular. Suprimindo os detalhes de tal dedução a solução analítica da
equação diferencial dos sistemas forçados-amortecidos é
b F0
x(t) = A exp(− t) cos(wt + φ) + sin(wf t − α). (6.20)
2m G
O primeiro termo da soma à direita da igualdade é a solução homogênea e o segundo termo a
solução particular. Como o primeiro termo decai exponencialmente é comum usarmos apenas a
solução permanente. Logo a equação horária da posição da massa torna-se
F0
x(t) = sin(wf t − α) (6.21)
G
onde
q
G = m2 (wf2 − wo2 )2 + b2 wf2
α = cos−1 (bwf /G).

Do ponto de vista numérico as diferenças deste problema para o da seção anterior são os termos
dissipativo e o termo à direita da igualdade ( termo fonte) que depende do tempo. Substituindo
as aproximações numéricas das derivadas e também tj = (j − 1)∆t no termo fonte temos
xj+1 − 2xj + xj−1 b xj+1 − xj−1 F0
2
+ + w02 xj = cos(wf (j − 1)∆t) = f j
∆t m 2∆t m
que após manipulação algébrica resulta em
b∆t j+1
xj+1 − 2xj + xj−1 + − xj−1 + ∆t2 w02 xj = ∆t2 f j

x
2m
ou    
1 b∆t
j+1 2 j 2 2
(6.22)
 j j−1
x =  ∆t f + 2 − ∆t w0 x − 1 − x
1 + b∆t
2m
2m
onde f j = F0
m cos(wf (j − 1)∆t).
64 CAPÍTULO 6. SOLUÇÃO DE EQUAÇÕES DIFERENCIAIS ORDINÁRIAS

6.4 Algoritmo Verlet (Velocity-Verlet)

O método descrito nesta seção é muito utilizado na descrição numérica de sistemas físicos em
que a força resultante depende da posição ou explicitamente do tempo. O sistema massa-mola,
o Pêndulo Simples, o Pêndulo Físico, o de Torção e o Circuito LC são clássicos exemplos de tais
sistemas.
Consideremos uma partícula de massa m sujeita a uma força resultante F . A segunda Lei de
Newton acerta que
d2 x F
= =a
dt2 m
onde a = a(x(t), v(t), t) é a aceleração resultante. Assim, a partir do conhecimento da aceleração
desejamos obter os valores numéricos da posição e da velocidade. Usando diferenças centradas
(vide Cap. 3) reescrever a última equação na forma

x(t + ∆t) − 2x(t) + x(t − ∆t) F (t)


= = a(t)
∆t2 m
ou ainda
x(t + ∆t) = 2x(t) − x(t − ∆t) + a(t)∆t2 . (6.23)

Na equação (6.23) é necessário o conhecimento das posições nos instantes t e t − ∆t bem como
da aceleração em t = t. Como ilustração para o sistema massa-mola (OHS) a aceleração é função
da posição segundo
F (t) k
a(t) = = − x(t) = −w2 x(t)
m m
expressão esta a ser substituída na eq. (6.23).
Uma variação do método anterior, denominado de velocity-Verlet, faz uso da expansão em série
de Taylor de x(t + ∆t) mais dois passos na estimativa de v(t + ∆t) a saber

1
x(t + ∆t) = x(t) + v(t)∆t + a(t)∆t2 ,
2
∆t 1
v(t + ) = v(t) + a(t)∆t, (6.24)
2 2
∆t 1
v(t + ∆t) = v(t + ) + a(t + ∆t)∆t.
2 2
As vantagens do algoritmo velocity-Verlet em relação a versão básica são: cálculo de posição e
velocidade no mesmo instante (digo, t + ∆t) e a necessidade do conhecimento de v e x apenas
no instante anterior, t.

Exemplo: em um sistema massa-mola, sem atrito, m = 0, 2kg e k = 30N/m. A massa está


inicialmente em repouso e a mola encontra-se deformada de 10cm. O sistema é então
abandonado. Desejamos os valores de x, v e a no intervalo de um período.
As equações horárias deste movimento são dadas por

x(t) = A cos(wt)
v(t) = −Aw sen(wt)
k
a(t) = − x(t) = −Aw2 cos(wt)
m
O script abaixo usa velocity-Verlet para obter numericamente as grandezas acima.
6.5. SISTEMAS DE EQUAÇÕES 65

% massa_mola_vv.m
%
clear;
m = 0.2 ; k = 30 ; w = sqrt(k/m) ; T = 2*pi/w ;
% valores iniciais: t, x, v, a
t(1) = 0.0;
x(1) = 0.1;
v(1) = 0.0;
a(1) = -k*x(1)/m;
% discretização no tempo e laço para estimar x(i+1), v(i+1)
dt=0.01;
i =1;
while t(i) < 2*T;
t(i+1) = t(1) + i*dt;
x(i+1) = x(i) + v(i)*dt + 0.5*a(i)*dt^2;
vtemp = v(i) + 0.5*a(i)*dt;
a(i+1) = -k*x(i+1)/m;
v(i+1) = vtemp+ 0.5*a(i+1)*dt;
end;
% solução analitica
xa = x(1)*cos(w*t) ;
va = -x(1)*w*sin(wt);
aa = -k*xa/m ;
subplot(2,2,1) ; plot(t,y,’bo’,t,xa,’r’);
xlabel(’tempo (s)’); ylabel(’posiçao (m)’); title(’Massa-Mola’);
subplot(2,2,2) ; plot(t,v,’bo’,t,va,’r’);
xlabel(’tempo (s)’); ylabel(’velocidade (m/s)’); title(’Massa-Mola’);
subplot(2,2,3) ; plot(t,a,’bo’,t,aa,’r’);
xlabel(’tempo (s)’); ylabel(’aceleraçao (m/s^2)’); title(’Massa-Mola’);
% calculo dos erros (pos. vel. acel.)
er_x = xa-x ; er_v = va-v ; er_a = aa-a ;
subplot(2,2,4) ; plot(t,er_x,’b’, t,er_v,’r’, t, er_a,’k--’);
xlabel(’tempo (s)’); ylabel(’erro (m, m/s e m/s^2)’); title(’Massa-Mola’);

6.5 Sistemas de Equações

Alguns problemas físicos (ex. sistemas acoplados) se apresentam como um sistema de equações
onde desejamos encontrar simultâneamente um conjunto de soluções. Consideremos um sistema
composto de duas massas ligadas por três molas como na figura.
66 CAPÍTULO 6. SOLUÇÃO DE EQUAÇÕES DIFERENCIAIS ORDINÁRIAS

Figura 6.1: Sistema de duas massas acopladas onde x10 e x20 são as posições de equilíbrio e u1
e u2 são os deslocamentos das massas a partir das posições de equilíbrio.

No sistema em questão definimos as posições instantâneas dass massas por x1 = x10 + u1 e


x2 = x20 + u2 . As forças elásticas que atuam nos corpos são equacionadas a saber

F12 − F11 = k(u2 − u1 ) − k1 u1 − bv1 ,


F22 − F12 = −k2 u2 − k(u2 − u1 ) − bv2 ,

ou ainda
d2 u1
m1 + (k1 + k)u1 − ku2 + bv1 = 0, (6.25)
dt2
d2 u2
m2 2 − ku1 + (k2 + k)u2 + bv2 = 0, (6.26)
dt
ou seja, um sistema com dois graus de liberdade cujas soluções são u1 (t) e u2 (t). Substituindo
as derivadas segundas por suas aproximações centradas obtemos

v1n+1 − v1n
m1 + (k1 + k)un1 − kun2 + bv1n = 0
∆t
v n+1 − v2n
m2 2 − kun1 + (k2 + k)un2 + bv2n = 0
∆t
ou
b ∆t
v1n+1 = (1 − ∆t)v1n + [−(k1 + k)un1 + kun2 ] ,
m1 m1
b ∆t
v2n+1 = (1 − ∆t)v2n + [kun1 − (k2 + k)un2 ] , (6.27)
m2 m2
de modo que podemos resolver o sistema acima iterativamente para as velocidades v1 e v2 no
tempo (n + 1)∆t a partir dos valores conhecidos de v1 , v2 , u1 e u2 no tempo anterior n∆t.
Neste ponto obtivemos as velocidades em função do tempo e com estes valores podemos realizzar
numericamente a integral das velocidades para obtermos as posições u1 e u2 . Para exemplificar
o procedimento usemos a expressão backward para substituir as velocidades em (n + 1)∆t, ou
seja

du1 un+1 − un1


v1 = ≈ 1 ,
dt ∆t
du2 un+1 − un2
v2 = ≈ 2 .
dt ∆t
6.6. MÉTODO DE RUNGE-KUTTA 4ª ORDEM 67

Após manipulações algébricas temos

un+1
1 = un1 + v1n+1 ∆t,
un+1
2 = un2 + v2n+1 ∆t. (6.28)

O procedimento acima descrito ilustra perfeitamente uma das várias metodologias numéricas
para se obter as soluções do sistema de equações diferenciais ordinárias.

Tarefa 6.3: implemente um script Sist_Acopl.m na linguagem Matlab. Considere b = 0, m1 =


m2 = 0, 5kg, k1 = k2 = 1N/m, k = 0, 2N/m. Considere um tempo máximo de 40s com
∆t = 0, 2s e as seguintes condições iniciais:
a) u1 (0) = 0, 5m e u2 (0) = v1 (0) = v2 (0) = 0;
b) u1 (0) = u2 (0) = 0m e v1 (0) = 0, 25m/s com v2 (0) = 0m/s;
As soluções analíticas de u1 e u2 (ALONSO; FINN, 1981, p. 365; BUTKOV, 1988, p. 408)
considerando m1 = m2 = m sem atrito (b = 0) são

u1a (t) = C1 cos(w1 t) + C2 sin(w1 t) + C3 cos(w2 t) + C4 sin(w2 t)


u2a (t) = C1 cos(w1 t) + C2 sin(w1 t) − C3 cos(w2 t) − C4 sin(w2 t)

com w1 = k1 /m1 e w2 = (k1 + 2k)/m1 onde as constantes são calculadas de acordo


p p

com as condições iniciais, i.e.


u1 (0) + u2 (0) v1 (0) + v2 (0)
C1 = C2 = ,
2 2w1
u1 (0) − u2 (0) v1 (0) − v2 (0)
C3 = C4 = .
2 2w2
Use o comando plot (ex. plot(t, u1, ’b-’, t, u1a, ’r.’) ) para comparar as soluções numéricas
e analíticas de u1 , u2 , v1 e v2 .

6.6 Método de Runge-Kutta 4ª Ordem

Em problemas em que a força depende da velocidade é comum o emprego do Método de Runge-


Kutta para obtenção da solução numérica de uma EDO ou de um sistema de EDOs. O método
mais usado é o de quarta ordem e sua aplicação segue os passos:

1. K1 = f (tn , xn )

2. K2 = f (tn + ∆t/2 , xn + ∆t K1 /2)

3. K3 = f (tn + ∆t/2 , xn + ∆t K2 /2)

4. K4 = f (tn + ∆t , xn + ∆t K3 )

5. xn+1 = xn + ∆t
6 (K1 + 2K2 + 2K3 + K4 )

onde f (t, x) é a taxa de variação da solução, i.e., dx/dt = f (t, x).

Exemplo: como aplicação simples do método consideremos o oscilador harmônico amor-


tecido composto de uma mola com constante elástica k e de uma massa m sujeita à uma
força de atrito proporcional a velocidade −bv. A 2ª Lei de Newton fornece

d2 x dx
m 2
= −b − kx, (6.29)
dt dt
68 CAPÍTULO 6. SOLUÇÃO DE EQUAÇÕES DIFERENCIAIS ORDINÁRIAS

que pode ser reescrita na forma desejada para aplicação numérica


dx
= v,
dt
dv b k
= − v − x.
dt m m
Definimos então fx (t, x, v) = v e fv (t, x, v) = −bv/m − kx/m de modo que

Kx1 = fx (v j ) Kv1 = fv (xj , v j )


Kx2 = fx (v j + ∆t · Kv1 /2) Kv2 = fv (xj + ∆t · Kx1 /2, v j + ∆t · Kv1 /2)
Kx3 = fx (v j + ∆t · Kv2 /2) Kv3 = fv (xj + ∆t · Kx2 /2, v j + ∆t · Kv2 /2)
Kx4 = fx (v j + ∆t · Kv3 ) Kv4 = fv (xj + ∆t · Kx3 , v j + ∆t · Kv3 )

fornecendo assim as próximas estimativas da posição e da velocidade por


∆t
xj+1 = xj + (Kx1 + 2Kx2 + 2Kx3 + Kx4 ), (6.30)
6
∆t
v j+1 = vj + (Kv1 + 2Kv2 + 2Kv3 + Kv4 ). (6.31)
6

Tarefa 6.4: implemente o método acima em um script MHA.m na linguagem do Matlab usando
k = 2N/m, m = 0, 5kg, b = 0, 2kg/s para as condições iniciais: x(0) = 0, 25m e v(0) =
−0, 2m/s. Use dt = 0.1s para um tempo de simulação T = 10s. Faça os gráficos de x(t) e
v(t) em linha contínua (azul) superpondo as soluções analíticas com pontos (vermelho). A
solução analítica da posição é
s
b 2
 
b k
x(t) = A exp(− t) cos(wt + φ) , w = −
2m m 2m

onde as constantes A e φ são obtidas em termos das condições iniciais a saber


  
−1 1 v0 b
φ = tan − +
w x0 2m
x0


 , se x0 6= 0
A = cos φ
v 0
−
 , se x0 = 0
[(0.5b/m) cos φ + w sin φ]

Exercícios
6.1- Obtenha analiticamente a solução da equação (6.5). Após, implemente o algoritmo ao final
da seção 6.2.

6.2- Ao final da seção (6.3.1) encontra-se um script para a solução da EDO do MHS, ou seja
equação (6.15).
(a) Salve-o em um arquivo mhs.m e execute-o usando os seguintes valores: tmax = 50s,
∆t = 0.1s, x(0) = 0.2m, v(0) = 1m/s, w = 0.5. Remova possíveis erros e verifique se as
soluções analítica e numérica concordam. O que você pode deduzir ao analisar o gráfico de
erros relativos entre as soluções.
(b) Repita o procedimento trocando apenas o valor da posição inicial para x(0) = 0m e
descreva o que ocorreu.
(c) Reveja as equações horárias de x(t) e v(t) para t = 0s. A partir delas tente obter uma
forma alternativa para derivar a amplitude A em termos da velocidade em t = 0s. Use uma
6.6. MÉTODO DE RUNGE-KUTTA 4ª ORDEM 69

estrutura de decisão if .... else ....end para o cálculo de φ e A. Execute o script e verifique
se a solução analítica concorda com a solução numérica. (Obs.: quando x(0) = 0m o valor
da fase inicial é φ = π/2).

6.3- O Carbono 14 é um radio isótopo muito usado em datações arqueológicas pois sua meia-
vida é de aproximadamente 5730 anos, a maior dentre seus outros isótopos. Use a teoria
apresentada na seção 6.1 juntamente com o método Forward Modificado para traçar um
gráfico de N(t) considerando uma a quantidade inicial de isótopos radioativos igual a 1mol.
Compare seus resultados numéricos com a solução analítica.

6.4- Considere um circuito RLC em série como ilustrado


na figura ao lado. Sejam R = 10Ω, L = 50mH e C =
100µF. O capacitor está carregado com Vc = 10V em
t = 0s, instante em que a chave é acionada. Sabemos
ainda que as ddps entre os terminais de cada elemento
são dadas por
ˆ
dI 1
VR = RI ; VL = L ; VC = I dt
dt C
e, usando a lei das malhas obtemos
ˆ
dI 1
L + RI + I dt = 0. Fig 6.4 - Esquema do exercício
dt C
6.4.
Substituindo I = dq/dt, a EDO homogênea anterior é reescrita em termos para a carga
armazenada no capacitor na forma

d2 q dq 1
L 2
+ R + q = 0.
dt dt C

Considerando R < 2 L/C a solução oscilante é dada por


p

R
q(t) = CV0 exp(− t) cos(wt + α)
2L

sendo w = [w02 − (R/2L)2 ]1/2 a frequência das oscilações com w0 = 1/ LC. Use o Método
de Runge-Kutta de 4ª ordem e:
(a) obtenha as soluções numéricas para q(t) e I(t)
(b) compare a solução numérica e analítica de q(t) ; use um gráfico superposto com a
solução analítica expressa por pontos e a numérica com linha contínua.

6.5 Ao substituirmos a chave no circuito RLC (Figura 6.5) por uma fonte alternada obtemos

dI
L + RI + VC = Ve .
dt
Como Vc = q/C e I = dq/dt = C dVC /dt temos por substituição

d2 VC dVC
LC + RC + VC = Ve ,
dt² dt
que representa uma EDO não homogênea com solução VC (t). Seja a tensão de excitação do
circuito dada por Ve (t) = V0 sen(wf t) com V0 = 10V e wf = 120π rad/s. Use os mesmos
dados do problema anterior para obter a solução numérica via Método de Runge-Kutta.
70 CAPÍTULO 6. SOLUÇÃO DE EQUAÇÕES DIFERENCIAIS ORDINÁRIAS
Referências Bibliográficas

ALONSO, M.; FINN, E. Um Curso Universitário - Mecânica. [S.l.]: Edgard Blucher, São
Paulo, 1981. v.1.

ARFKEN, G. B.; WEBER, H. J. Mathematical Methods for Physicists. 5.ed. [S.l.]: Har-
court Academic Press, 2001. 1112p.

BUTKOV, E. Fisica matematica. [S.l.]: Guanabara Dois, 1988.

GUSMAN, G.; VASCONCELLLOS, A. Fluxogramas e Programação Cobol. 2.ed. [S.l.]:


Livros Técnicos e Científicos, RJ, 1985. 180p.

JALÓN J. G. D.N, J. G. D.; RODRÍGUEZ, J. I.; VIDAL, J. Aprenda Matlab 7.0 como
si estuviera en primero. [S.l.]: Universidad Politécnicade, Escuela Técnica Superior de
Ingenieros Industriales, Madrid, 2005. 128p.

MEDINA, M.; CRISTINA, F. Algoritmos e Programaçao - Teoria e Prática. [S.l.]: Nova-


tec, 2005. 384p.

PRESS, W. H.; FLANNERY, B. P.; TEUKOLSKY, S. A.; VETTERLING, W. T. Numeri-


cal Recipes: the art of scientific computing (fortran version). 2.ed. New York: Cambridge
University Press, 1989.

RECKTENWALD, G. Numerical Methods with MATLAB: implementations and applica-


tions. [S.l.]: Prentice Hall, 2000.

RESNICK, R.; HALLIDAY, D. Física. [S.l.]: Livros Técnicos e Científicos, 1983. v.1.

RINO, J. P. Física Computacional I. http://www.df.ufscar.br/Fortran-parteA.pdf, acessado


em 02/2008.

SPIEGEL, M. R. Cálculo Avançado. [S.l.]: McGraw-Hill do Brasil LTDA., 1975. 500p.

THE MATHWORKS, I. MATLAB - The Language of Technical Computing, MATLAB


Function Reference. The MathWorks, Inc., 3 Apple Hill DriveNatick, MA 01760-2098: The
MathWorks, 2002. v.1-3: A - Z.

TREFETHEN, L. H. Is Gauss Quadrature Better than Clenshaw-Curtis? SIAM Review, v.50,


n.1, p.67–87, 2008.

WILSON, H. W.; TURCOTTE, L. H. Advanced Mathematics and Mechanics Applicati-


ons Using MATLAB. 2nd ed..ed. [S.l.]: CRC Press, 1998.

71

Você também pode gostar