Você está na página 1de 47

CLCULO NUMRICO

Profa. Dra. Yara de Souza Tadano yaratadano@utfpr.edu.br


Aula 10
04/2014 Matlab Mtodos para zeros reais de funes
Algoritmo do Mtodo da Bisseco
Seja f (x) contnua em [a, b] e tal que f (a) e f (b) tm sinais
opostos:

ENTRADA: funo f, extremidades a, b; preciso erro, nmero


mximo de iteraes max. x
SADA: soluo aproximada ou mensagem de erro.
Passo 1: Faa i = 1;

Passo 2: Enquanto i < max, execute os passos 3 a 6.


Passo 3: Faa p = (a + b) / 2; ( )

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 3/47
Algoritmo do Mtodo da Bisseco
Passo 4: Se f (p) = 0 ou |b a| < erro, ento:
SADA (x); ( ).
PARE.
Passo 5: Faa i = i + 1.
Passo 6: Se f (a) * f (p) > 0, ento faa a = p; ( ).
seno faa b = p.

SADA ( , max);
( ).
PARE.

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 4/47
INTRODUO

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 5/47
LAYOUT DO MATLAB Espao destinado s
variveis que esto salvas
na memria, onde
possvel visualizar o nome,
valor e classe da mesma
Current Folder Window

Workspace
Window

Local onde as
operaes podem ser Command
diretamente feitas History
Window
Lista de comandos
realizados, organizados
por data de execuo,
Command Window permitindo o comando ser
realizado novamente com
Aula 10 MATLAB - Zeros de funes
Clculo Numrico
duplo clique 6/47
Editor Script File
M-file
File > New > M-file

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 7/47
COMANDOS
BSICOS

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 8/47
COMENTRIO
Para incluir uma linha com comentrios:

% no MATLAB
// no SCILAB.

Assim, a linha no ser executada.

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 9/47
LIMPAR MEMRIA E COMANDOS
Comando clc:
Limpa os ltimos resultados exibidos na janela de comandos.

Comando clear:
Limpa a memria.

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 10/47
Smbolos Aritmticos

Operao Smbolo Exemplo


Adio + 5+3
Subtrao 53
Multiplicao * 5*3
Diviso / 5/3
Exponenciao ^ 5 ^ 3 (significa 53 = 125)

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 11/47
Smbolos Lgicos

Operao Smbolo
Igualdade ==
Desigualdade ~=
Maior ou igual >=
Menor ou igual <=

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 12/47
Ordem em que o MATLAB faz as operaes:

Ordem Operao Matemtica

Primeiro Parnteses. Para vrios parnteses, o que estiver


por dentro executado primeiro
Segundo Exponenciao
Terceiro Multiplicao, diviso (mesma ordem)
Quarto Adio e subtrao

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 13/47
Funes matemticas elementares

sqrt(x) raiz quadrada


nthroot(x,n) n-sima raiz real
exp(x) ex
abs(x) valor absoluto
log(x) logaritmo natural (base e)
log10(x) logaritmo na base 10
factorial(x) x!

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 14/47
Funes Trigonomtricas

sin(x) seno (x em radianos)


sind(x) sine (x em graus)
cos(x) cosine (x em radianos)
cosd(x) cosine (x em graus)
tan(x) tangent (x em radianos)
tand(x) tangent (x em graus)
cot(x) cotangent (x em radianos)
cotd(x)- cotangent (x em graus)

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 15/47
Varivel Simblica

Em alguns casos precisamos utilizar uma varivel simblica,


chamemos, para definir como sendo qualquer varivel do
domnio, isto , uma varivel contnua. Para isso temos o
comando syms.

>> syms x

>> syms a, b, c

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 16/47
Derivada
Para calcularmos derivadas utiliza-se o comando:

>> diff(f(x),x,n)

>> Derivative(f(x),x,n) SCILAB

onde n indica a ordem da derivao.

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 17/47
Plotar grficos

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 18/47
Plotar grficos

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 19/47
Plotar grficos
Podemos utilizar alguns comandos para melhorar a aparncia
de nosso grfico:
title (ttulo);

xlabel (x);

ylabel (y).

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 20/47
Plotar grficos

possvel desenhar mais que uma funo no mesmo grfico.

Existem dois modos:

um atravs do comando plot;

outro atravs do comando hold.

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 21/47
Alm do comando plot podemos graficar uma funo
atravs do comando fplot.

Basicamente, voc deve fornecer como primeiro argumento


a funo que pretende usar entre apostrofes e como segundo,
o intervalo sobre o qual a funo ser graficada.

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 22/47
Exemplo 1

Uso do comando plot para construir o grfico de uma


funo.
Funo: x3 - 9 x + 3

>> x = -5:0.5:5;
>> y = x.^3 9 * x + 3;
>> plot(x,y);

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 23/47
Exemplo 2
Construo do grfico de duas funes (log x e 1/x)
x=0.5:0.1:6
y1=log10(x)
y2=1./x
hold on
plot(x,y1)
plot(x,y2)
hold off
OU plot(x,y1,x,y2)
title('grfico da funo x^3-9x+3')
title('grfico das funes log(x) e 1/x')
xlabel('x')
Aula 10 MATLAB - Zeros de funes
ylabel('y') Clculo Numrico 24/47
Exemplo 3
Construo do grfico de uma e duas funes usando o
comando fplot

>> fplot (x^3-9*x+3, [-5,5])

>> hold on
>> fplot(log10(x), [0.1,6]
>> fplot(1/x, [0.1,6])
>> hold off

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 25/47
break Interrompe a execuo de laos for e while
clc Limpa a tela (command window)
disp Exibe o contedo de uma varivel, sem mostrar o seu nome
input Permite ao usurio inserir variveis, textos, valores, etc
sign Funo sinal: retorna o sinal de um argumento
if Condiciona execuo de comandos
else Usado com o comando if
elseif Usado com o comando if
end Usado para terminar a execuo dos comandos if,for,while
while Repete comandos enquanto condio especificada for verdadeira
fprintf Grava dados em arquivo formatado
Aula 10 MATLAB - Zeros de funes
Clculo Numrico 26/47
Comando disp e input
Para os mtodos que iremos implementar, necessrio que o
programa conhea a funo. Mas, para cada funo
diferente teremos que mudar o cdigo-fonte do programa?

No, esse problema resolvido pelo comando input.

A cada vez que o programa for rodado ele mesmo pedir as


variveis, logo no ser necessrio mudar o cdigo
original do programa e haver uma maior interao entre o
programa e o usurio (no necessariamente um
programador).
Aula 10 MATLAB - Zeros de funes
Clculo Numrico 27/47
Comando disp e input
Vamos utilizar o comando disp junto com o comando
input.

Exemplo:

disp('Insira a funo');
f = input('','s');

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 28/47
Comando fprintf
O comando fprintf um dos mtodos mais simples de
sada de dados.

>> fprintf('A raiz : %f', p);

o que est entre aspas aparecer para o usurio, os itens onde


aparece %f sero substitudos pelas variveis, respeitando-se a
ordem em que aparecem.

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 29/47
Comandos Lgicos
Muitas vezes necessrio colocar mais de um comando ao
mesmo parmetro (principalmente no lao if), para isso
existem os comando lgicos dados na seguinte tabela:

& E lgico
|| OU lgico
~ NO lgico

Exemplo:

>>if(abs(f(p))<erro || abs(b a)<erro)

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 30/47
Estrutura condicional if-end
Se o resultado da expresso lgica <condio> for
verdadeiro, ento a lista de <comandos> ser executada.
Se o resultado for falso, os <comandos> no sero
executados.

>> if <condio>
>> <comandos>
>> end

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 31/47
O Lao while
O lao while, repete um grupo de comandos um nmero
indefinido de vezes, at obtermos uma resposta satisfatria
ou at que o usurio mande interromper o programa.
Enquanto a expresso lgica <condio> for verdadeira a
lista <comandos> ser repetida.

>> while <condio>


>> <comandos>
>> end

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 32/47
Comando break

A estrutura while permite que um grupo de comandos seja


repetido um nmero indeterminado de vezes. No entanto, a
condio de interrupo testada no incio da estrutura.

Em vrias situaes em programao se faz necessrio


interromper a execuo da repetio verificando a condio
no interior da estrutura e no no seu incio.

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 33/47
Comando break
A estrutura while executada indefinidamente a

princpio, pois a condio do while sempre verdadeira.


Contudo, quando a <condio> do if for satisfeita o
comando break ser executado causando a interrupo da
repetio while.
>> while 1
>> <comandos 1>
>> if <condio>
>> break
>> end
>> <comandos 2>
>>end Aula 10 MATLAB - Zeros de funes
Clculo Numrico 34/47
Comando inline
Uma forma de definir uma funo usando o comando
inline.

Exemplo:

>> cf = input ('Entre com a funo: ');


>> f = inline(cf);

Para usar a funo inline, necessrio declarar a varivel x


como varivel simblica (syms x) e no ser necessrio usar
o comando subs.

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 35/47
Comando subs
O comando subs serve para substituir valores numricos
em expresses simblicas.

Exemplo:

>> disp('Insira a funo');


>> f = input('','s');

>> p = (a+b)/2;

>> if (subs(f,p))*(subs(f,a)) > 0

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 36/47
Mtodo da Bisseco

Funo: f

Extremos dos intervalos: [a, b]

Preciso: erro

Nmero mximo de iteraes: max

A cada iterao: p

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 37/47
Algoritmo do Mtodo da Bisseco
Seja f (x) contnua em [a, b] e tal que f (a) e f (b) tm sinais

opostos:
ENTRADA: funo f, extremidades a, b; preciso erro, nmero
mximo de iteraes max.
SADA: soluo aproximada x ou mensagem de erro.
Passo 1: Faa i = 1;

Passo 2: Enquanto i < max, execute os passos 3 a 6.


Passo 3: Faa p = (a + b) / 2; ( )

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 38/47
Algoritmo do Mtodo da Bisseco
Passo 4: Se f (p) = 0 ou |b a| < erro, ento:
SADA (p); ( ).
PARE.
Passo 5: Faa i = i + 1.
Passo 6: Se f (a) * f (p) > 0, ento faa a = p; ( ).
seno faa b = p.

SADA ( , max);
( ).
PARE.

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 39/47
Implementao
clear, clc

disp('Insira a funo');
f = input('','s');

disp('Insira o valor do extremo esquerdo do


intervalo');
a = input('');
disp('Insira o valor do extremo direito do
intervalo');
b = input('');

disp('Insira o valor do erro');


Aula 10 MATLAB - Zeros de funes
erro = input(''); Clculo Numrico 40/47
Implementao

disp('Insira o nmero mx de operaes');


max = input('');

i = 1;
while (i < max)
p = (a+b)/2;
if (abs(subs(f,p))<
subs(f,p) == 0 erro
|| abs(b a) < a)
|| abs(b erro )
< erro)
fprintf('A raiz : %d\n', p);
fprintf(O nmero de iteraes foi:
%i', i);
break
end Aula 10 MATLAB - Zeros de funes
Clculo Numrico 41/47
Implementao

i = i + 1;
if (subs(f,p))*(subs(f,a))
(subs(f,p))*(subs(f,b)) >
< 0
a = p;
else
b = p;
end
end

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 42/47
Algoritmo do Mtodo de Newton

ENTRADA: aproximao inicial x0; preciso , nmero mximo


de iteraes N0.
SADA: soluo aproximada x ou mensagem de erro.

Passo 1: Faa i = 1;
Passo 2: Enquanto i N0 , execute os passos 3 a 6.
Passo 3: Faa x = x0 f (x0) / f (x0); (Calcula xi)
Passo 4: Se (x x0) < , ento:
SADA (x); (Procedimento concludo com sucesso).
PARE.

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 43/47
Algoritmo Mtodo de Newton
Passo 5: Faa i = i + 1.

Passo 6: Faa x0 = x; (Atualiza x0)

Passo 7: SADA (O mtodo falhou aps N0 iteraes, N0 = , N0);


(O procedimento no foi bem-sucedido). PARE.

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 44/47
Implementao
clear, clc
syms x
cf = input('Entre com a funo: ');
f = inline(cf);
derivada = diff(cf, x);
df = inline(derivada);
tol = input('Entre com a tolerncia: ');

error = 0;
max=input('Entre com o nmero mximo de iteraes: ');

x = input('Entre com um valor inicial: ');

i = 0;
disp(' i Aula 10 MATLAB
xi - Zeros de funes
error)
Clculo Numrico 45/47
Implementao
while (i <= max)
fprintf('\t%i\t%3.8f\t%f\n', i, x, error);
p = x;
x = x - f(x)/df(x);
error = abs(x - p);
if error < tol
i = i + 1;
fprintf('\t%i\t%3.8f\t%f\n', i, x, error);
break
end
i = i + 1;
end
Aula 10 MATLAB - Zeros de funes
Clculo Numrico 46/47
REFERNCIA

Becker, A. J.; Silva, D. M. I.; Dias, F.H.S.; Pinheiro L. K.


Noes Bsicas de Programao em MATLAB.
Universidade Federal de Santa Maria, Santa Maria, Outubro
de 2010.

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 47/47