3. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 3/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 ou mensagem de erro.
Passo 1: Faça i = 1;
Passo 2: Enquanto i < max, execute os passos 3 a 6.
Passo 3: Faça p = (a + b) / 2; ( )
x
4. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 4/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 i = i + 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.
6. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 6/47
LAYOUT DO MATLAB
Command
History
Window
Workspace
Window
Command Window
Current
Folder
Window
Local onde as
operações podem ser
diretamente feitas
Espaço destinado às
variáveis que estão salvas
na memória, onde é
possível visualizar o nome,
valor e classe da mesma
Lista de comandos
realizados, organizados
por data de execução,
permitindo o comando ser
realizado novamente com
duplo clique
9. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 9/47
COMENTÁRIO
¨ Para incluir uma linha com comentários:
% no MATLAB
// no SCILAB.
¨ Assim, a linha não será executada.
10. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 10/47
LIMPAR MEMÓRIA E COMANDOS
¨ Comando clc:
¤ Limpa os últimos resultados exibidos na janela de comandos.
¨ Comando clear:
¤ Limpa a memória.
12. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 12/47
Símbolos Lógicos
Operação Símbolo
Igualdade ==
Desigualdade ~=
Maior ou igual >=
Menor ou igual <=
13. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 13/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
14. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 14/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!
15. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 15/47
Funções Trigonométricas
¨ 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)
16. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 16/47
Variável Simbólica
¨ Em alguns casos precisamos utilizar uma variável simbólica,
chamemos, 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
17. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 17/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 derivação.
20. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 20/47
Plotar gráficos
¨ Podemos utilizar alguns comandos para melhorar a aparência
de nosso gráfico:
¨ title (‘título’);
¨ xlabel (‘x’);
¨ ylabel (‘y’).
21. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 21/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.
22. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 22/47
¨ Além do comando plot podemos graficar uma função
através do comando fplot.
¨ Basicamente, você deve fornecer como primeiro argumento
a função que pretende usar entre apostrofes e como segundo,
o intervalo sobre o qual a função será graficada.
23. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 23/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);
24. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 24/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')
ylabel('y')
25. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 25/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
26. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 26/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
27. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 27/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).
28. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 28/47
Comando disp e input
¨ Vamos utilizar o comando disp junto com o comando
input.
¨ Exemplo:
¨ disp('Insira a função');
¨ f = input('','s');
29. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 29/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.
30. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 30/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:
¨ Exemplo:
>>if(abs(f(p))<erro || abs(b – a)<erro)
& E lógico
|| OU lógico
~ NÃO lógico
31. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 31/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
32. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 32/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
33. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 33/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.
34. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 34/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
35. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 35/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.
36. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 36/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
37. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 37/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
38. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 38/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 ou mensagem de erro.
Passo 1: Faça i = 1;
Passo 2: Enquanto i < max, execute os passos 3 a 6.
Passo 3: Faça p = (a + b) / 2; ( )
x
39. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 39/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 i = i + 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.
40. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 40/47
Implementação
clear, clc
disp('Insira a função');
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');
erro = input('');
41. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 41/47
Implementação
disp('Insira o número máx de operações');
max = input('');
i = 1;
while (i < max)
p = (a+b)/2;
if ( subs(f,p) == 0 || abs(b – a) < erro )
fprintf('A raiz é: %dn', p);
fprintf(‘O número de iterações foi:
%i', i);
break
end
abs(subs(f,p))< erro || abs(b – a) < erro)
42. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 42/47
Implementação
i = i + 1;
if (subs(f,p))*(subs(f,a)) > 0
a = p;
else
b = p;
end
end
(subs(f,p))*(subs(f,b)) < 0
43. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 43/47
Algoritmo do Método de Newton
ENTRADA: aproximação inicial x0; precisão ε, número máximo
de iterações N0.
SAÍDA: solução aproximada ou mensagem de erro.
Passo 1: Faça i = 1;
Passo 2: Enquanto i ≤ N0 , execute os passos 3 a 6.
Passo 3: Faça x = x0 – f (x0) / f’(x0); (Calcula xi)
Passo 4: Se (x – x0) < ε, então:
SAÍDA (x); (Procedimento concluído com sucesso).
PARE.
x
44. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 44/47
Algoritmo Método de Newton
Passo 5: Faça i = i + 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.
45. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 45/47
Implementação
clear, clc
syms x
cf = input('Entre com a função: ');
f = inline(cf);
derivada = diff(cf, x);
df = inline(derivada);
tol = input('Entre com a tolerância: ');
error = 0;
max=input('Entre com o número máximo de iterações: ');
x = input('Entre com um valor inicial: ');
i = 0;
disp(' i xi error’)
46. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 46/47
Implementação
while (i <= max)
fprintf('t%it%3.8ft%fn', i, x, error);
p = x;
x = x - f(x)/df(x);
error = abs(x - p);
if error < tol
i = i + 1;
fprintf('t%it%3.8ft%fn', i, x, error);
break
end
i = i + 1;
end
47. Aula 10 – MATLAB - Zeros de funções
Cálculo Numérico 47/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.