(Parte 1 de 3)

Universidade Federal de Uberlandia Faculdade de Matematica

Calculo Numerico

Prof. Jose Eduardo Castilho Marco de 2001

Conteudo

1.1 O MatLab3
1.1.1 Calculo na Janela de Comandos3
1.1.2 M-arquivos7
1.2 Exercıcios10

1 Introducao 1

2.1 Isolamento das Raızes1
2.2 Refinamento14
2.3 Metodo da Bisseccao14
2.3.1 Estudo da Convergencia15
2.3.2 Estimativa do Numero de Iteracoes16
2.4 Metodo Iterativo Linear (M.I.L.)17
2.4.1 Criterio de Parada19
2.5 Metodo de Newton-Raphson (M.N.R)20
2.6 Ordem de Convergencia2
2.7 Observacoes Finais24
2.8 Exercıcios25

2 Zeros de Funcoes 1

3.1 Metodos Diretos27
3.1.1 Sistema Triangular Superior28
3.1.2 Metodo de Eliminacao de Gauss29
3.1.3 Pivotamento Parcial32
3.1.4 Calculo da Matriz Inversa34
3.2 Metodos Iterativos38
3.2.1 Criterio de Convergencia40
3.2.2 Metodo Iterativo de Gauss-Jacobi40
3.2.3 Criterio das Linhas42
3.2.4 Metodo Iterativo de Gauss-Seidel4
3.2.5 Criterio de Sassenfeld45
3.3 Observacoes Finais46
3.4 Exercıcios47

CONTEUDO i

4.1 Metodo dos Mınimos Quadrados - Caso Discreto49
4.2 Metodo dos Mınimos Quadrados - Caso Contınuo53
4.3 Ajuste Nao Linear5
4.4 Observacoes Finais56
4.5 Exercıcios58

4 Ajuste de Curvas: Metodo dos Mınimos Quadrados 49

5.1 Forma de Lagrange62
5.2 Forma de Newton63
5.2.1 Construcao do Polinomio64
5.3 Estudo do Erro65
5.4 Escolha dos Pontos67
5.5 Interpolacao Inversa67
5.6 Observacoes Finais68
5.7 Exercıcios70

5 Interpolacao Polinomial 60

6.1 Regra do Trapezio72
6.2 Calculo do Erro73
6.3 Regra do Trapezio Repetida75
6.4 Regra de Simpson 1/376
6.5 Regra de Simpson Repetida78
6.6 Observacoes Finais79
6.7 Exercıcios79

6 Integracao Numerica - Formulas de Newton Cotes 72

7.1 Metodo Euler81
7.2 Metodos da Serie de Taylor83
7.3 Metodos de Runge-Kutta85
7.4 Metodos de Adans-Bashforth8
7.4.1 Metodos Explıcitos89
7.4.2 Metodos Implıcitos90
7.5 Equacoes de Ordem Superior92

Capıtulo 1 Introducao

O Calculo Numerico tem por objetivo estudar esquemas numericos (algoritmos numericos) para resolucao de problemas que podem ser representados por um modelo matematico. Um esquema e eficiente quando este apresenta solucoes dentro de uma precisao desejada com custo computacional (tempo de execucao + memoria) baixo. Os esquemas numericos nos fornecem aproximacoes para o que seria a solucao exata do problema. Os erros cometidos nesta aproximacao sao decorrentes da discretizacao do problema, ou seja passar do modelo matematico para o esquema numerico, e da forma como as maquinas representam os dados numericos.

Como exemplo de discretizacao consideremos que desejamos calcular uma aproximacao para a derivada de uma funcao f(x) num ponto x. O modelo matematico e dado por

Um esquema numerico para aproximar a derivada e dado por tomar h “pequeno” e calcular

Neste caso quanto menor for o valor de h mais preciso sera o resultado, mas em geral, este esquema nao fornecera a solucao exata.

A representacao de numeros em maquinas digitais (calculadoras, computadores, etc) e feita na forma de ponto flutuante com um numero finito de dıgito. Logo os numeros que tem representacao infinita (Ex. 1/3,pi,√ 2) sao representados de forma truncada. Com isto algumas das propriedades da aritmetica real nao valem na aritmetica computacional. Como exemplo, na aritmetica computacional temos

k=0 akN

onde estamos considerando que no primeiro somatorio para cada k fazemos ak/N e depois somamos e no segundo somatorio somamos todos os ak e o resultado da soma dividimos por

CAPITULO 1. INTRODUC AO 2

N. Do ponto de vista analıtico, as duas expressoes sao equivalentes, mas a segunda forma apresenta melhor resultado do ponto de vista computacional, pois realiza menos operacoes e comete menos erro de truncamento. Outro exemplo interessante e que em aritmetica computacional e possıvel que para um dado A exista um ε 6= 0 tal que

Analiticamente a expressao acima e verdadeira se e somente se ε = 0.

Outro fator que pode influenciar no resultado e o tipo de maquina em que estamos trabalhando. Numa calculadora simples que represente os numeros com 7 dıgito terıamos

Enquanto que calculadoras mais avancadas terıamos como resposta um falso 1, pois na realidade, internamente estas calculadoras trabalham com mais dıgito do que e apresentado no visor e antes do resultado ser apresentado este e arredondado.

Os esquemas numericos sao classificados como esquemas diretos e esquemas iterativos.

Os esquemas diretos sao aqueles que fornecem a solucao apos um numero finito de passos. Por exemplo o esquema que apresentamos para o calculo da derivada. Os esquemas iterativos sao aqueles que repetem um numero de passos ate que um criterio de parada seja satisfeito. Como exemplo considere o algoritmo que e usado para determinar a precisao de uma maquina digital

Algoritmo: Epsilon da Maquina

fim enquanto

OutPut: 2Ep

O criterio de parada e (1 + Ep) ≤ 1 e cada execucao do laco Enquanto e chamado de iteracao. Maquinas diferentes apresentarao resultados diferentes.

Um outro fator que pode influenciar nos resultados e a linguagem de programacao usada na implementacao dos algoritmos (Pascal, Fortran, C++, MatLab , etc). Diferentes linguagens podem apresentar diferentes resultados. E mesmo quando usamos uma mesma linguagem, mas compiladores diferentes (Ex. C++ da Borland e C++ da Microsoft), os resultados podem apresentar diferencas. Existem varias bibliotecas de rotinas numericas em diversas linguagens e algumas disponıveis na Internet. Um exemplo e a LIMPACK: uma colecao de rotinas em Fortran para solucao de sistemas lineares.

Para exemplificar os esquemas numericos, que estudaremos nos proximos capıtulo, usaremos o MatLab pela sua facilidade de programacao. Todo o material desta apostila e baseado nas referencias: [?] e [?].

CAPITULO 1. INTRODUC AO 3

O MatLab surgiu nos anos 1970 como um Laboratorio de Matrizes para auxiliar os cursos de Teoria Matricial, Algebra Linear e Analise Numerica. Hoje, a capacidade do MatLab se estende muito alem da manipulacao de matrizes. Ele e tanto um ambiente quanto uma linguagem de programacao, e um de seus aspectos mais poderosos e que os problemas e as solucoes sao expressos numa linguagem matematica bem familiar. Devido a sua capacidade de fazer calculos, visualizacao grafica e programacao, num ambiente de facil uso, o MatLab torna-se uma ferramenta eficiente para a compreensao tanto de topicos fundamentais quanto avancados a uma gama de disciplinas. Nosso objetivo e dar uma rapida visao dos comandos e funcoes basicas do MatLab para exemplificar os topicos do curso de Calculo Numerico. Maiores detalhes podem ser obtidos em ??.

Apesar das ultimas versoes do MatLab ter expandido sua capacidade, o elemento basico dos dados ainda e um vetor, o qual nao requer declaracao de dimensao ou tipo de variavel. O MatLab e um sistema interativo, onde os comandos podem ser executados na janela de comandos ou por programas. Estes programas sao conhecidos como m-arquivos ( ou arquivos com extensao .m) e serao discutidos posteriormente. Em primeiro lugar vamos discutir alguns comandos basicos que serao util para a manipulacao de dados na janela de comandos e nos m-arquivos.

1.1.1 Calculo na Janela de Comandos

Um calculo simples pode ser executado na janela de comandos digitando as instrucoes no prompt como voce faria numa calculadora. Por exemplo ans = o resultado e mostrado na tela como ans ( abreviatura de “answer”). Os sımbolos dos operadores aritmeticos sao dados na Tabela 1.1. As expressoes sao calculadas da esquerda para a direita, com a potenciacao tendo a maior precedencia, seguido da multiplicacao e divisao (mesma precedencia) e pela adicao e subtracao (tambem com mesma precedencia).

As Variaveis A forma de armazenar o resultado para uso posterior e pelo uso de variaveis.

EDU>> s=3+4+7+12

CAPITULO 1. INTRODUC AO 4

Tabela 1.1: Operadores Aritmeticos

Operacao Sımbolo

Adicao a + b

Multiplicacao a ∗ b

Subtracao a − b

Divisao a/b ou b\a Potenciacao ab

O nome da variavel pode consistir de no maximo 31 caracteres, iniciando sempre por um caracter alfa seguido de qualquer combinacao de caracteres do tipo alfa , numerico e underscores. Ex. resultado_da_soma_2. Ao contrario de outras linguagens, o MatLab diferencia as variaveis que usam letras minusculas e maiusculas. Isto e as variaveis Contas, contas, conTas e CoNtAs, sao consideradas como quatro variaveis diferentes. Todas as variaveis sao armazenadas internamente e podem ser usadas a qualquer momento. Para saber quais as variaveis que estao ativas utilizamos o comando who. Para eliminar a variavel conta, usamos o comando clear conta. As variaveis sao tratadas como matrizes, apesar dos escalares nao serem apresentados na notacao matricial. Um vetor linha pode ser definido como

Tambem podemos separar os elementos por vırgula. Ja um vetor coluna pode ser definido da seguinte forma

CAPITULO 1. INTRODUC AO 5

Os elementos na i-esima linha e na j-esima coluna, denotados por aij podem ser obtidos pelo comando a(i,j), por exemplo a(2,3)=7. Note que os elementos no MatLab sao indexados iniciando em 1. Em algumas situacoes necessitamos de vetores com alguma estrutura particular. Por exemplo, um vetor cujo o primeiro termo vale −2 e o ultimo vale 3 e os termos intermediarios variam um passo de 0.5. Este vetor pode ser definido pela linha de comando

EDU>> v=-2:0.5:3

Columns 8 through 1

De uma forma geral este comando tem a sintaxe v=a:passo:b. Quando o passo e igual a um podemos escrever o comando na forma reduzida v=a:b. Algumas matrizes elementares podem ser geradas atraves de comandos simples, por exemplo: A matriz identidade:

EDU>>I=eye(3)

Matriz n × m formada por 1’s: EDU>> A=ones(2,3)

Matriz Nula de ordem n × m: EDU>> B=zeros(3,4)

CAPITULO 1. INTRODUC AO 6

Operacoes com Matrizes e Vetores

As operacoes de subtracao,adicao e multiplicacao entre matrizes sao definidas como o usual. O sımbolo da divisao representa o calculo da multiplicacao pela inversa da matriz, por exemplo

Note que neste exemplo terminamos o comando que define a matriz A com um ponto e vırgula. Isto faz com que o resultado do comando (ou de uma expressao em geral) nao seja apresentado no monitor. Isto e util para programas de grande porte, pois este processo de apresentar os resultados no monitor consome muito tempo de execucao. Entre vetores e matrizes de mesma dimensao e possıvel operar elemento com elemento. Isto e possıvel atraves de uma notacao especial, que consiste de usar um ponto antes do sımbolo da operacao. Na Tabela 1.2 damos um resumo destas operacoes aplicada a dois vetores a e b de dimensao n.

Tabela 1.2: Operacoes Elementares entre Vetores

Operacao Sımbolo Resultado

Multiplicacao a.*b [a1 ∗ b1, a2 ∗ b2, a3 ∗ b3,, an ∗ bn]
Divisao a./b [a1/b1, a2/b2, a3/b3,, an/bn]
b3,, an

Como na maioria das linguagens de programacao, o MatLab oferece diversas funcoes elementares que sao importantes em matematica. A Tabela 1.3 apresenta uma lista destas funcoes e sua sintaxe.

Graficos

Para plotar um grafico no MatLab , devemos criar dois vetores de mesma dimensao x e f, onde x corresponde aos valores do eixo x e f os valores da funcao nestes pontos. O

CAPITULO 1. INTRODUC AO 7

Tabela 1.3: Funcoes Elementares

Funcao Sintaxe

Valor Absoluto abs(x) Arco Co-seno acos(x)

Arco Seno asin(x) Co-seno cos(x)

Exponencial ex exp(x)

Logaritmo Natural log(x) Logaritmo base 10 log10(x)

Seno sin(x)

Raiz Quadrada sqrt(x) Tangente tan(x) grafico e gerado pelo comando plot(x,f). Se desejamos gerar o grafico da funcao sen(x) no intervalo [−pi,pi] devemos proceder da seguinte forma:

EDU>> x=-pi:0.01:pi; EDU>> f=sin(x); EDU>> plot(x,f)

Note, que na definicao do vetor x, usamos o passo igual a 0.01. Isto determina a quantidade de pontos que o comando plot usa par gerar o grafico. Quanto mais pontos mais perfeito sera o grafico (em contra partida maior o tempo de execucao). se tivessemos usado o passo 0.5 nao terıamos um grafico de boa qualidade.

1.1.2 M-arquivos

Existem dois tipos de programas em MatLab : scripts e funtions. Ambos devem ser salvos com extensao .m no diretorio corrente. Uma diferenca basica entre os dois e que os scripts trata as variaveis, nele definidas, como variaveis globais, enquanto as functions trata as variaveis como variaveis locais. Desta forma a functions tem que ter um valor de retorno.

Scripts

Os scripts permite que um conjunto de comandos e definicoes sejam executados atraves de um unico comando na janela de comandos. Como exemplo, o script seguinte calcula a aproximacao da derivada de sen(x) usando diferencas finitas.

% Aproximacao da derivada do seno % Usando o operardor de diferen\c{c}a finita progressiva.

CAPITULO 1. INTRODUC AO 8 clear; h=0.0001; x=input(’Entre com o valor de, x=’); % Atribui Valores a x disp(’O valor da aproximacao eh...’) % Mostra mensagem no monitor dsen=(sin(x+h)-sin(x))/h

As primeiras duas linha sao comentarios que descrevem o script. Na quinta linha temos o comando que permite atribuir valores a uma variavel. E na sexta linha o comando que permite mostrar uma mensagem no monitor. Vamos supor que este arquivo seja salvo com o nome de devira_seno.m. Para executar o script digitamos seu nome no prompt do MatLab .

Functions

Numa funcao em MatLab a primeira linhae da forma function y=nome(argumentos).

A funcao se troca informacoes com o MatLab workspace por intermedio da variavel y e dos argumentos. Para ilustrar o uso de funcoes em MatLab considere o seguinte codigo function dsen=deriva_seno(x,h) % Aproximacao da derivada do seno

% Usando o operardor de diferen\c{c}a finita progressiva. dsen=(sin(x+h)-sin(x))/h;

Apesar deste arquivo poder ser salvo com um nome qualquer, e usual usar o mesmo nome da funcao, ou seja, deriva_seno.m. Para executa-lo devemos digitar seu nome e informar os valores dos argumentos, por exemplo,

EDU>>y= deriva_seno(3.14,0.001) o que forneceria em y uma aproximacao da derivada da funcao seno em 3.14 Uma diferenca importante entre esta versao, usando function, com a anterior e que o valor calculado pode ser atribuıdo a uma variavel. Alem disso, agora podemos escolher o valor de h, que na versao anterior estava fixo em h=0.0001. Vale notar que no primeiro caso todas as variaveis do scrips estao ativas, isto e sao variaveis globais. Enquanto que no segundo ca so as variaveis sao locais, isto e, a variavel h so e ativa na execucao da funcao

Controle de Fluxo

O controle de fluxo e um recurso que permite que resultados anteriores influenciem operacoes futuras. Como em outras linguagens, o MatLab possui recursos que permitem o controle de fluxo de execucao de comandos, com base em estruturas de tomada de decisoes. Apresentamos as estrutura de loops for, loops while e if-else-end. A forma geral do loop for e

CAPITULO 1. INTRODUC AO 9 for x = vetor comandos... end

Os comandos entre for e end sao executados uma vez para cada coluna de vetor. A cada iteracao atribui-se a x a proxima coluna de vetor. Por exemplo

EDU>> for n=1:5 x(n) = cos(n*pi/2); end EDU>> x

Traduzindo, isto diz que para n igual a 1 ate 10 calcule os comandos ate end.

Ao contrario do loop for, que executa um grupo de comandos um numero fixo de vezes, o loop while executa um grupo um de comandos quantas vezes forem necessarias para que uma condicao seja negada. Sua forma geral e while expressao comandos... end

O grupo de comandos entre while e end sao executados ate que a expressao assuma um valor falso. Por exemplo,

EDU>> while abs(x(n)-x(n-1)) > 10^(-6) x(n) = 2*x(n-1) + 1/4; n=n+1; end

Neste caso o grupo de comandos sao executados ate que o valor absoluto da diferenca entre dois valores consecutivos seja menor ou igual a 10−6.

A estrutura if-else-end permite que grupos de comandos sejam executados por um teste relacional. A forma geral e dada por if expressao comandos 1... else comandos 2... end

Se a expressao for verdadeira e executado o grupo de comandos 1, caso contrario e executado o grupo de comandos 2. Esta estrutura permite o uso da forma mais simples que envolve so um condicional

CAPITULO 1. INTRODUC AO 10

comandos

if expressao end

Como exemplo considere o seguinte fragmento de codigo que calcula o valor absoluto de um numero if x < 0 x=-x; end

Isto e, se x for menor que zero entao troca de sinal, caso contrario nada e feito.

1.2 Exercıcios

Exercıcio 1.2 Faca um programa que calcule

Exercıcio 1.3 Calcule a precisao de sua maquina usando o algoritmo Algoritmo: Epsilon da Maquina Input: A : numero que represente a grandeza Ep ← 1

Capıtulo 2 Zeros de Funcoes

Neste capıtulo estudaremos esquemas numericos para resolver equacoes da forma f(x) = 0. Na maioria dos casos estas equacoes nao tem solucao algebrica como ha para as equacoes de 2 o¯ grau. No entanto esquemas numericos podem fornecer uma solucao satisfatoria. O processo para encontrar uma solucao envolve duas fases:

(Parte 1 de 3)

Comentários