Вы находитесь на странице: 1из 42

CLCULO NUMRICO

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


Aula 10
04/2014 Scilab 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.
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 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 SCILAB Espao destinado s
variveis que esto salvas
na memria, onde
possvel visualizar o nome,
valor e classe da mesma
Current Folder Window

Local onde as Workspace


Window
operaes podem ser
diretamente feitas
Command
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 SciNotes

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)

Aula 10 MATLAB - Zeros de funes


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

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

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

onde n indica a ordem da derivao.

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 16/47
Definio de funo
COMANDO deff

deff([y]=f(x), funo)

EXEMPLO:

>> deff([y]=f(x), y = x.^3-9*x+3)

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 17/47
Definio de funo
COMANDO function

function nome da varivel = f(x)


<comandos>
endfunction

EXEMPLO:

>> function f = f(x)


>> f = x.^3-9*x+3
>> endfunction

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 18/47
Plotar grficos

Grfico em duas dimenses de uma funo:

fplot2d (x,f)

Para usar este comando precisamos definir a funo a ser


plotada.

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 grfico de vrias funes

possvel desenhar mais que uma funo no mesmo


grfico.

Usa-se o comando hold do MATLAB.

Para usar um comando do MATLAB no SCILAB, use:

>>mtlb_

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 21/47
Exemplo 1

Uso do comando fplot2d para construir o grfico de uma


funo.
Funo: x3 - 9 x + 3

>> function f = f(x)


>> f = x.^3-9*x+3
>> endfunction
>> x = [-5:0.5:5];
>> fplot2d(x,f);

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 22/47
Exemplo 2
Construo do grfico de duas funes (log x e 1/x)
>> x = [0.5:0.1:6]
>> deff("[f]=f(x)", "f = log10(x)")
>> deff("[g]=g(x)", "g = 1./x")
>> mtlb_hold on
>> fplot2d(x,f)
>> fplot2d(x,g)
>> hold off

>> title('grfico das funes log(x) e 1/x')


>> xlabel('x')
>> ylabel('y')
Aula 10 MATLAB - Zeros de funes
Clculo Numrico 23/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
printf Grava dados em arquivo formatado
Aula 10 MATLAB - Zeros de funes
Clculo Numrico 24/47
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).
Exceto com relao especificao da funo.

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 25/47
Comando input
Exemplo:

>> a = input(limite inferior);


>> b = input(limite superior);

Aula 10 MATLAB - Zeros de funes


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

>> printf('A raiz : %f', x);

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 27/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 (f(x) == 0 | abs(b a) < tol)

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 28/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 29/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 30/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 31/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 32/47
Mtodo da Bisseco

Funo: f

Extremos dos intervalos: [a, b]

Preciso: tol

Nmero mximo de iteraes: nmax

A cada iterao: x

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 33/47
Algoritmo do Mtodo da Bisseco
Seja f (x) contnua em [a, b] e tal que f (a) e f (b) tm sinais
opostos: Se (f(a) f(b)) > 0 ento:
SADA: Este intervalo no contm a raiz
ENTRADA: funo f, extremidades a, b; preciso tol, nmero
mximo de iteraes nmax.
SADA: soluo aproximada x ou mensagem de erro.
Passo 1: Faa i = 1;

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


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

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 34/47
Algoritmo do Mtodo da Bisseco
Passo 4: Se f (x) = 0 ou |b a| < erro, ento:

SADA (x); ( ).
PARE.

Passo 5: Faa i = i + 1.

Passo 6: Se f (x) * f (a) > 0, ento faa a = x; ( ).


seno faa b = x.

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 35/47
Implementao
Clear all, clc

a = input(limite inferior:');
b = input(limite superior:');

tol = input(preciso');
nmax = input(nmero mximo de iteraes);

function f = f(x)
f = x.^3-9*x+3
endfunction
Aula 10 MATLAB - Zeros de funes
Clculo Numrico 36/47
Implementao

if (f(a)*f(b)>0) then
disp Este intervalo no contm raiz
else
i = 1;
while (i < max)
x = (a+b)/2;
abs(f(x)<
if ( tol
f(x) == 0 | abs(b
| abs(b a)
a) < tol)
< tol )
printf('A raiz : %1.8f\n', x);
printf('O nmero de iteraes foi:
%i', i);
break
end Aula 10 MATLAB - Zeros de funes
Clculo Numrico 37/47
Implementao

i = i + 1;
(f(x)*f(b)
if (f(x)*f(a) < ==
sign((f(x))> 0) sign(f(a)))
then then
a = x;
else
b = x;
end
end

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 38/47
Algoritmo do Mtodo de Newton

ENTRADA: aproximao inicial x0; preciso tol, nmero mximo


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

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

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 39/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 40/47
Implementao
clear all, clc

x0 = input(aproximao inicial:)
tol = input(preciso:)
nmax = input (nmero mximo de iteraes:)

function f = f(x)
f = x.^3-9*x+3
endfunction
i = 0;

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 41/47
Implementao
while (i < nmax)

x1 = x0 f(x0) / numderivative (f,x0);


if (abs(x1 x0) < tol) then
printf(A raiz : %1.8f\n, x1);
printf(O nmero de iteraes foi: %i, i);
break
end
i = i + 1;
x0 = x1
end

Aula 10 MATLAB - Zeros de funes


Clculo Numrico 42/47

Вам также может понравиться