Sei sulla pagina 1di 47

CÁLCULO NUMÉRICO

Profa. Dra. Yara de Souza Tadano

yaratadano@utfpr.edu.br

Aula 10

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 Passo 1: Faça i = 1;

x

ou mensagem de erro.

Passo 2: Enquanto i < max, execute os passos 3 a 6. Passo 3: Faça
Passo 2: Enquanto i < 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 i = i + 1. Passo 6: Se f (a) * f (p) > 0, então faça a = p; ( senão faça b = p.

).
).
’, max); ).
’, max);
).

SAÍDA (( PARE.

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

Current Folder Window

LAYOUT DO MATLAB

Espaço destinado às variáveis que estão salvas na memória, onde é possível visualizar o nome,
Espaço destinado às
variáveis que estão salvas
na memória, onde é
possível visualizar o nome,
valor e classe da mesma
é possível visualizar o nome, valor e classe da mesma Workspace Window Local onde as operações

Workspace

Window

Local onde as operações podem ser diretamente feitas
Local onde as
operações podem ser
diretamente feitas
Local onde as operações podem ser diretamente feitas Command Window Aula 10 – MATLAB - Zeros

Command Window

Aula 10 – MATLAB - Zeros de funções

Cálculo Numérico

Aula 10 – MATLAB - Zeros de funções Cálculo Numérico Command History Window Lista de comandos

Command

History

Window

Lista de comandos realizados, organizados por data de execução, permitindo o comando ser realizado novamente
Lista de comandos
realizados, organizados
por data de execução,
permitindo o comando ser
realizado novamente com

6/47

duplo clique

Editor – Script File

¨ M-file ¨ File > New > M-file

File ¨   M-file ¨   File > New > M-file Aula 10 – MATLAB -

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

// no SCILAB.

¨ 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 5 3 = 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) e x ¨ 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) – 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 funções

Cálculo Numérico

15/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

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)

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

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

Aula 10 – MATLAB - Zeros de funções

Cálculo Numérico

17/47

Plotar gráficos

Plotar gráficos Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 18/47

Aula 10 – MATLAB - Zeros de funções

Cálculo Numérico

18/47

Plotar gráficos

Plotar gráficos Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 19/47

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’);
¨   title (‘título’);
¨   xlabel (‘x’);
¨   xlabel (‘x’);
¨   ylabel (‘y’).
¨   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 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.

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: x 3 - 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')

ylabel('y')

Aula 10 – MATLAB - Zeros de funções

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])

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)
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.

¨ Exemplo:

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

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

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
&
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

30/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

executados.

não serão

resultado

for

falso,

<comandos>

o

os

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

Aula 10 – MATLAB - Zeros de funções

Cálculo Numérico

31/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>

>> >> end

<comandos>

Aula 10 – MATLAB - Zeros de funções

Cálculo Numérico

32/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

33/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

34/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

35/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

36/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

37/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 Passo 1: Faça i = 1;

x ou mensagem de erro.

Passo 2: Enquanto i < max, execute os passos 3 a 6. Passo 3: Faça
Passo 2: Enquanto i < 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

38/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.

).
).
’, max); ).
’, max);
).

SAÍDA (( PARE.

Aula 10 – MATLAB - Zeros de funções

Cálculo Numérico

39/47

Implementação

clear, clc

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

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

f

= input('','s');

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

disp('Insira o valor do extremo esquerdo do intervalo');

a = input('');

disp('Insira o valor do extremo direito do intervalo');

b

= input('');

extremo direito do intervalo'); b = input(''); disp('Insira o valor do erro'); Aula 10 – MATLAB

disp('Insira o valor do erro');

Aula 10 – MATLAB - Zeros de funções

Cálculo Numérico

erro = input('');

40/47

Implementação

Implementação disp('Insira o número máx de operações'); max = input(''); i = 1; while ( i

disp('Insira o número máx de operações');

max = input('');

número máx de operações'); max = input(''); i = 1; while ( i < max) p

i = 1;

while (i < max)

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

Implementação

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

Aula 10 – MATLAB - Zeros de funções

Cálculo Numérico

42/47

Algoritmo do Método de Newton

ENTRADA: aproximação inicial x 0 ; precisão ε, número máximo de iterações N 0 .

SAÍDA: solução aproximada

x ou mensagem de erro.

Passo 1: Faça i = 1; Passo 2: Enquanto i N 0 , execute os passos 3 a 6. Passo 3: Faça x = x 0 – f (x 0 ) / f’(x 0 ); (Calcula x i ) Passo 4: Se (x – x 0 ) < ε, então:

SAÍDA (x); (Procedimento concluído com sucesso).
SAÍDA (x); (Procedimento concluído com sucesso).

PARE.

Aula 10 – MATLAB - Zeros de funções

Cálculo Numérico

43/47

Algoritmo Método de Newton

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

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

Passo 7: SAÍDA (‘O método falhou após N 0 iterações, N 0 = ’, N
Passo 7: SAÍDA (‘O método falhou após N 0 iterações, N 0 = ’, N 0 );
(O procedimento não foi bem-sucedido). PARE.

Aula 10 – MATLAB - Zeros de funções

Cálculo Numérico

44/47

Implementação

clear, clc syms x

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

f = inline(cf);

input('Entre com a função: '); f = inline ( cf); derivada = diff ( cf, x

derivada = diff(cf, x); df = inline(derivada); tol = input('Entre com a tolerância: ');

tol = input('Entre com a tolerância: '); error = 0; max=input('Entre com o número máximo de

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

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

i = 0;

disp('

i

Aula 10 – MATLAB - Zeros de funções

xi

error’)

Cálculo Numérico

45/47

Implementação

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
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 funções

Cálculo Numérico

46/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

47/47