Sei sulla pagina 1di 55

CÁLCULO NUMÉRICO

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


Aula 7
09/2014 Matlab – Métodos para zeros reais de funções
Algoritmo do Método da Bissecção
 Seja f (x) contínua em [a, b] e tal que f (a) e f (b) têm sinais
opostos:

ENTRADA: função f, extremidades a, b; precisão ‘erro’, número


máximo de iterações ‘max’.
SAÍDA: solução aproximada x ou mensagem de erro.
Passo 1: Faça k = 1;

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


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

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 3/47
Algoritmo do Método da Bissecção
Passo 4: Se f (p) = 0 ou |b – a| < erro, então:
SAÍDA (x); ( ).
PARE.
Passo 5: Faça k = k + 1.
Passo 6: Se f (a) * f (p) < 0, então faça b = p; (
).

senão faça a = p.

SAÍDA (‘ ’,
max);
Aula 10 – MATLAB - Zeros de funções
( Cálculo Numérico
). 4/47
INTRODUÇÃO

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 5/47
LAYOUT DO MATLAB Espaço destinado às
variáveis que estão salvas
na memória, onde é
possível visualizar o nome,
valor e classe da mesma
Current Folder Window

Workspace
Window

Local onde as
operações podem ser Command
diretamente feitas History
Window
Lista de comandos
realizados, organizados
por data de execução,
Command Window permitindo o comando ser
realizado novamente com
Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico
duplo clique 6/47
Editor – Script File
 New Script

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 7/47
COMANDOS
BÁSICOS

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 8/47
COMENTÁRIO
 Para incluir uma linha com comentários:

% no MATLAB

 Assim, a linha não será executada.

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 9/47
LIMPAR MEMÓRIA E COMANDOS
 Comando clc:
 Limpa os últimos resultados exibidos na janela de comandos.

 Comando clear:
 Limpa a memória.

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 10/47
Símbolos Aritméticos

Operação Símbolo Exemplo


Adição + 5+3
Subtração – 5–3
Multiplicação * 5*3
Divisão / 5/3
Exponenciação ^ 5 ^ 3 (significa 53 =
125)

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 11/47
Símbolos Lógicos

Operação Símbolo
Igualdade ==
Desigualdade ~=
Maior ou igual >=
Menor ou igual <=

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 12/47
 Ordem em que o MATLAB faz as operações:

Ordem Operação Matemática

Primeiro Parênteses. Para vários parênteses, o que estiver


por dentro é executado primeiro
Segundo Exponenciação
Terceiro Multiplicação, divisão (mesma ordem)
Quarto Adição e subtração

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 13/47
Funções matemáticas 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 funções


Cálculo Numérico 14/47
Funções Trigonométricas

 sin(x) – seno (x em radianos)


 sind(x) – seno (x em graus)
 cos(x) – coseno (x em radianos)
 cosd(x) – coseno (x em graus)
 tan(x) – tangente (x em radianos)
 tand(x) – tangente (x em graus)
 cot(x) – cotangente (x em radianos)
 cotd(x)- cotangente (x em graus)

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 15/47
Variável Simbólica

 Em alguns casos precisamos utilizar uma variável simbólica,


para definir como sendo qualquer variável do domínio, isto
é, uma variável contínua. Para isso temos o comando syms.

>> syms x

>> syms a, b, c

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 16/47
Derivada
 Para calcularmos derivadas utiliza-se o comando:

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

 onde n indica a ordem da derivação.

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 17/47
Plotar gráficos

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 18/47
Plotar gráficos

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 19/47
Plotar gráficos
 Podemos utilizar alguns comandos para melhorar a aparência
de nosso gráfico:
>> title (‘título’)

>> xlabel (‘x’)

>> ylabel (‘y’)

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 20/47
Plotar gráficos

 É possível desenhar mais que uma função no mesmo gráfico.

 Existem dois modos:

 um através do comando plot;

 outro através do comando hold.

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 21/47
 Além do comando plot podemos construir o gráfico de
uma função através do comando fplot.

 Basicamente, você deve fornecer como primeiro argumento


a função que pretende usar entre apóstrofes e como segundo,
o intervalo sobre o qual a função será plotada.

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 22/47
Exemplo 1

 Uso do comando plot para construir o gráfico de uma


função.
 Função: x3 - 9 x + 3

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

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 23/47
Exemplo 2
Construção do gráfico de duas funções (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('gráfico da função x^3-9x+3')
title('gráfico das funções log(x) e 1/x')
xlabel('x')
Aula 10 – MATLAB - Zeros de funções
ylabel('y') Cálculo Numérico 24/47
Exemplo 3
 Construção do gráfico de uma e duas funções 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 funções


Cálculo Numérico 25/47
break Interrompe a execução de laços for e while
clc Limpa a tela (command window)
disp Exibe o conteúdo de uma variável, sem mostrar o seu nome
input Permite ao usuário inserir variáveis, textos, valores, etc
sign Função sinal: retorna o sinal de um argumento
if Condiciona execução de comandos
else Usado com o comando if
elseif Usado com o comando if
end Usado para terminar a execução dos comandos if,for,while
while Repete comandos enquanto condição especificada for verdadeira
fprintf Grava dados em arquivo formatado
Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 26/47
Comando disp e input
 Para os métodos que iremos implementar, é necessário que o
programa conheça a função. Mas, para cada função
diferente teremos que mudar o código-fonte do programa?

 Não, esse problema é resolvido pelo comando input.

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


variáveis, logo não será necessário mudar o código
original do programa e haverá uma maior interação entre o
programa e o usuário (não necessariamente um
programador).
Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 27/47
Comando disp e input
 Vamos utilizar o comando disp junto com o comando
input para definir uma função.

>> disp('Insira a função');


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

 Para dados de entrada numéricos, pode-se utilizar somente o


comando input.

>> erro = input(’Entre com o erro:’)

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 28/47
Comando fprintf
 O comando fprintf é um dos métodos mais simples de
saída de dados.

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

o que está entre aspas aparecerá para o usuário, os itens onde


aparece %f serão substituídos pelas variáveis, respeitando-se a
ordem em que aparecem.

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 29/47
Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 30/47
Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 31/47
Comandos Lógicos
 Muitas vezes é necessário colocar mais de um comando ao
mesmo parâmetro (principalmente no laço if), para isso
existem os comando lógicos dados na seguinte tabela:

& E lógico
|| OU lógico
~ NÃO lógico

 Exemplo:
>> if(abs(f(p))<erro || abs(b – a)<erro)

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 32/47
Estrutura condicional if-end
 Se o resultado da expressão lógica <condição> for
verdadeiro, então a lista de <comandos> será executada.
Se o resultado for falso, os <comandos> não serão
executados.

>> if <condição>
>> <comandos>
>> end

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 33/47
O Laço while
 O laço while, repete um grupo de comandos um número
indefinido de vezes, até obtermos uma resposta satisfatória
ou até que o usuário mande interromper o programa.
 Enquanto a expressão lógica <condição> for verdadeira a
lista <comandos> será repetida.

>> while <condição>


>> <comandos>
>> end

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 34/47
Comando break

 A estrutura while permite que um grupo de comandos seja


repetido um número indeterminado de vezes. No entanto, a
condição de interrupção é testada no início da estrutura.

 Em várias situações em programação se faz necessário


interromper a execução da repetição verificando a condição
no interior da estrutura e não no seu início.

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 35/47
Comando break
 A estrutura while é executada indefinidamente a
princípio, pois a condição do while é sempre verdadeira.
Contudo, quando a <condição> do if for satisfeita o
comando break será executado causando a interrupção da
repetição while.
>> while 1
>> <comandos 1>
>> if <condição>
>> break
>> end
>> <comandos 2>
>>end
Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 36/47
Comando inline
 Uma forma de definir uma função é usando o comando
inline.

 Exemplo:
>> cf = input ('Entre com a função: ');
>> f = inline(cf);

Para usar a função inline, é necessário declarar a variável x


como variável simbólica (syms x) e não será necessário usar
o comando subs.

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 37/47
Comando subs
 O comando subs serve para substituir valores numéricos
em expressões simbólicas.

 Exemplo:
>> disp('Insira a função');
>> f = input('','s');

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

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

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 38/47
Método da Bissecção

 Função: f

 Extremos dos intervalos: [a, b]

 Precisão: erro

 Número máximo de iterações: max

 A cada iteração: p

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 39/47
Algoritmo do Método da Bissecção
 Seja f (x) contínua em [a, b] e tal que f (a) e f (b) têm sinais
opostos:
ENTRADA: função f, extremidades a, b; precisão ‘erro’, número
máximo de iterações ‘max’.
SAÍDA: solução aproximada x ou mensagem de erro.
Passo 1: Faça k = 1;

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


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

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 40/47
Algoritmo do Método da Bissecção
Passo 4: Se f (p) = 0 ou |b – a| < erro, então:
SAÍDA (p); ( ).
PARE.
Passo 5: Faça k = k + 1.
Passo 6: Se f (a) * f (p) > 0, então faça a = p; ( ).

senão faça b = p.

SAÍDA (‘ ’, max);
( ).
PARE.
Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 41/47
Implementação
clear, clc

disp('Insira a função');
f = input('','s');

a = input('Insira o valor do extremo esquerdo


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

erro = input('Insira o valor do erro:');

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 42/47
Implementação

max = input('Insira o número máximo de operações':);

k = 1;
while (k < max)
p = (a+b)/2;
if ( subs(f,p) == 0 || abs(b – a) < erro )
abs(subs(f,p))<
fprintf('A erro
raiz é: %d\n', p);
fprintf('O número de iterações foi:
%i', k);
break
end
Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 43/47
Implementação

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

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 44/47
Algoritmo do Método de Newton

ENTRADA: aproximação inicial x0; precisão e, número máximo


de iterações N0.
SAÍDA: solução aproximada x ou mensagem de erro.

Passo 1: Faça k = 1;
Passo 2: Enquanto k < N0 , execute os passos 3 a 6.
Passo 3: Faça x = x0 – f (x0) / f’ (x0); (Calcula xi)
Passo 4: Se |x – x0| < e, então:
SAÍDA (x); (Procedimento concluído com sucesso).
PARE.

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 45/47
Algoritmo do Método de Newton

Passo 5: Faça k = k + 1.

Passo 6: Faça x0 = x; (Atualiza x0)

Passo 7: SAÍDA (‘O método falhou após N0 iterações, N0 = ’, N0);


(O procedimento não foi bem-sucedido). PARE.

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 46/47
Implementação
clear, clc
syms x;

cf = input('Entre com a função: ');


f = inline(cf);

derivada = diff(cf);
df = inline(derivada);

tol = input(’Insira o valor do erro: ');


erro = 0;

max=input('Entre com o número máximo de iterações: ');


Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 47/47
Implementação

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

k = 0;
disp(' k x(k) erro’)
while (k < max)

fprintf('\t%i\t%3.8f\t%f\n', k, x, erro);
p = x;
x = x - f(x)/df(x);
erro = abs(x - p);

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 48/47
Implementação

if erro < tol


k = k + 1;
fprintf('\t%i\t%3.8f\t%f\n', k, x, erro);
break
end
k = k + 1;
end

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 49/47
Algoritmo do Método da Secante

ENTRADA: aproximações iniciais x0 , x1; precisão e1 e e2 , número


máximo de iterações N0 .
SAÍDA: solução aproximada x ou mensagem de erro.
Passo 1: Faça i = 2;
F0 = f (x0)
F1 = f (x1)
Passo 2: Enquanto i ≤ N0 , execute os passos 3 a 6.
Passo 3: Faça x = x1 –F1*(x – x0) / (F1 - F0);
ou x = (x0*F1 – x1*F0)/(F1 - F0); (Calcula xi)

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 50/47
Algoritmo do método da Secante
Passo 4: Se |x – x1| < e1, ou |f (x)|< e2, então:
SAÍDA (x); (Procedimento concluído com sucesso).
PARE.
Passo 5: Faça i = i + 1.
Passo 6: Faça x0 = x1; (Atualiza x0 , F0, x1 , F1)
F0 = F1;
x1 = x;
F1 = f (x).
Passo 7: SAÍDA (‘O método falhou após N0 iterações, N0 = ’, N0);
(O procedimento não foi bem-sucedido). PARE.

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 51/47
Implementação
clear, clc;
syms x;

cf=input('Entre com a função');


f=inline(cf);

x0=input('insira a aproximação inicial');


x1=input('insira a outro valor');

tol=input('insira o erro');

max=input('insira o número máximo de iterações');


Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 52/47
Implementação
erro=0;
k=0;
x2=x1;
disp('k x2 erro');
while (k<max)
fprintf('\t%i \t%3.8f \t%f \n',k,x2,erro);
p=x2;
x2=(x0*f(x1)-x1*f(x0))/(f(x1)-f(x0));
x0=x1;
x1=x2;
erro=abs(x1-x0);

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 53/47
Implementação
if(erro<tol)

k=k+1;
fprintf('\t%i \t%3.8f \t%f \n',k,x2,erro);
break

end

k=k+1;
end

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 54/47
REFERÊNCIA

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


Noções Básicas de Programação em MATLAB.
Universidade Federal de Santa Maria, Santa Maria, Outubro
de 2010.

Aula 10 – MATLAB - Zeros de funções


Cálculo Numérico 55/47

Potrebbero piacerti anche