Baixe o app para aproveitar ainda mais
Prévia do material em texto
CÁLCULO NUMÉRICO Profa. Dra. Yara de Souza Tadano yaratadano@utfpr.edu.br Aula 10 Scilab – Métodos para zeros reais de funções 04/2014 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 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. Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 5/47 INTRODUÇÃO Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 6/47 LAYOUT DO SCILAB Command History Window Workspace Window Command Window C ur re nt F ol de r W in do w 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 Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 7/47 Editor – SciNotes Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 8/47 COMANDOS BÁSICOS 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. 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. Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 11/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 12/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 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 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! 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) 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) MATLAB >> numderivative(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 Definição de função ¨ COMANDO deff ¨ deff(“[y]=f(x)”, “função”) ¨ EXEMPLO: >> deff(“[y]=f(x)”, “y = x.^3-9*x+3”) Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 18/47 Definição de função ¨ COMANDO function ¨ function nome da variável = f(x) ¨ <comandos> ¨ endfunction ¨ EXEMPLO: >> function f = f(x) >> f = x.^3-9*x+3 >> endfunction Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 19/47 ¨ ¨ Gráfico em duas dimensões de uma função: ¨ fplot2d (x,f) ¨ Para usar este comando precisamos definir a função a ser plotada. Plotar gráficos 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’). Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 21/47 Plotar gráfico de várias funções ¨ É possível desenhar mais que uma função no mesmo gráfico. ¨ Usa-se o comando hold do MATLAB. ¨ Para usar um comando do MATLAB no SCILAB, use: >>mtlb_ Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 22/47 Exemplo 1 ¨ ¨ Uso do comando fplot2d para construir o gráfico de uma função. ¨ Função: 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 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] >> 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('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 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 printf Grava dados em arquivo formatado Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 25/47 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). ¨ Exceto com relação à especificação da função. Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 26/47 Comando input ¨ Exemplo: >> a = input(‘limite inferior’); >> b = input(‘limite superior’); Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 27/47 Comando printf ¨ O comando printf é um dos métodos mais simples de saída de dados. >> printf('A raiz é: %f', x); 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 28/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 (f(x) == 0 | abs(b – a) < tol) & E lógico | OU lógico ~ NÃO lógico Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 29/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 30/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 31/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 32/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 33/47 Método da Bissecção ¨ ¨ Função: f ¨ Extremos dos intervalos: [a, b] ¨ Precisão: tol ¨ Número máximo de iterações: nmax ¨ A cada iteração: x Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 34/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 ‘tol’, número máximo de iterações ‘nmax’. SAÍDA: solução aproximada ou mensagem de erro. Passo 1: Faça i = 1; Passo 2: Enquanto i < nmax, execute os passos 3 a 6. Passo 3: Faça x = (a + b) / 2; ( ) x Se (f(a) f(b)) > 0 então: SAÍDA: Este intervalo não contém a raiz Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 35/47 Algoritmo do Método da Bissecção Passo 4: Se f (x) = 0 ou |b – a| < erro, então: SAÍDA (x); ( ). PARE. Passo 5: Faça i = i + 1. Passo 6: Se f (x) * f (a) > 0, então faça a = x; ( ). senão faça b = x. Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 36/47 Implementação Clear all, clc a = input(’limite inferior:'); b = input(’limite superior:'); tol = input(’precisão'); nmax = input(‘número máximo de iterações’); function f = f(x) f = x.^3-9*x+3 endfunction Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 37/47 Implementação if (f(a)*f(b)>0) then disp ‘Este intervalo não contém raiz’ else i = 1; while (i < max) x = (a+b)/2; if ( f(x) == 0 | abs(b – a) < tol ) printf('A raiz é: %1.8f\n', x); printf('O número de iterações foi: %i', i); break end abs(f(x)< tol | abs(b – a) < tol) Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 38/47 Implementação i = i + 1; if (f(x)*f(a) > 0) then a = x; else b = x; end end (f(x)*f(b) < 0) then sign((f(x)) == sign(f(a))) then Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 39/47 Algoritmo do Método de Newton ENTRADA: aproximação inicial x0; precisão tol, número máximo de iterações nmax. SAÍDA: solução aproximada ou mensagem de erro. Passo 1: Faça i = 0; Passo 2: Enquanto i ≤ nmax , execute os passos 3 a 6. Passo 3: Faça x = x0 – f (x0) / f’ (x0); (Calcula xi) Passo 4: Se |x – x0| < tol, então: SAÍDA (x); (Procedimento concluído com sucesso). PARE. x Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 40/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. Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 41/47 Implementação clear all, clc x0 = input(‘aproximação inicial:’) tol = input(‘precisão:’) nmax = input (‘número máximo de iterações:’) function f = f(x) f = x.^3-9*x+3 endfunction i = 0; Aula 10 – MATLAB - Zeros de funções Cálculo Numérico 42/47 Implementação 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 número de iterações foi: %i’, i); break end i = i + 1; x0 = x1 end
Compartilhar