Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Atividades de Análise Numérica com OCTAVE ou MATLAB J. A. Salvador salvador@dm.ufscar.br Onde quer que haja mulheres e homens, há sempre o que fazer, há sempre o que ensinar, há sempre o que aprender! (Paulo Freire) Foram elaboradas Fichas de Atividades no ambiente computacional para o estudante dominar o OCTAVE OU MATLAB para compreender os Métodos Numéricos bem como testar suas limitações, que são abordados num curso básico de Cálculo Numérico. Introdução Introdução ao OCTAVE OU MATLAB Obtendo ajuda no OCTAVE OU MATLAB Comandos básicos do OCTAVE OU MATLAB Programação em OCTAVE OU MATLAB Arquivos M FICHAS DE ATIVIDADES ZEROS DE FUNÇÕES Método da Bisseção Método das Aproximações Sucessivas Método das Secantes Método de Newton - Raphson INTERPOLAÇÃO POLINOMIAL Polinômio interpolador de Lagrange SOLUÇÃO NUMÉRICA DE SISTEMAS DE EQUAÇÕES LINEARES Métodos Diretos Eliminação de Gauss Métodos indiretos Método de Jacobi - Richardson Método de Gauss-Seidel 2 SOLUÇÕES NUMÉRICAS DE EQUAÇÕES DIFERENCIAIS ORDINÁRIAS: PROBLEMAS DE VALOR INICIAL Método de Euler 3 Introdução O tema aborda a construção de uma ferramenta computacional de apoio ao ensino de cálculo numérico no ensino Superior. Tendo em vista a grande utilização do computador na rede de ensino, se faz necessário à implementação de ferramentas computacionais de ensino que possam contribuir para o aprendizado do aluno. Uma destas ferramentas de ensino, sem dúvida nenhuma, é o domínio de softwares. A escola como local de investigação e capacitação de futuros agentes transformadores da nossa realidade parece que ainda não esta totalmente preparada para proporcionar aos seus alunos condições necessárias para a utilização do computador como mais uma ferramenta de aprendizagem embora já tenha alcançado um avanço razoável. A utilização do computador pode possibilitar uma redefinição da escola como foco de ensino, investigação e pesquisa. A escola deve neste momento discutir qual será o seu papel na sociedade globalizada e quais ferramentas de ensino e aprendizagem podem fazer parte de suas dinâmicas. Tentando fornecer elementos para esta discussão, este trabalho de graduação tem por objetivo investigar o Ensino da Matemática na disciplina de Calculo Numérico no ensino superior por meio do uso de uma ferramenta computacional e pedagógica, o OCTAVE1 que é um software livre ou MATLAB2. Introdução ao OCTAVE ou MATLAB OCTAVE OU MATLAB são softwares interativos de alta performance voltados para o cálculo numérico. Eles integram a análise numérica, cálculo com matrizes, processamento de sinais e construção de gráficos em ambiente fácil de usar onde problemas e soluções são expressos somente como eles são escritos matematicamente, ao contrário da programação tradicional. Neles, o elemento básico de informação é uma matriz que não requer dimensionamento. Esse sistema permite a resolução de muitos problemas numéricos em apenas uma fração do tempo que se gastaria para escrever um programa 1 www.gnu.org./software/octave 2 www.mathworks.com 4 semelhante em linguagem Fortran, Basic ou C++. Além disso, as soluções dos problemas são expressas quase exatamente como elas são escritas matematicamente. Obtendo ajuda no OCTAVE ou MATLAB O comando help nestes softwares nos fornece ajuda on-line sobre qualquer outro comando. Por exemplo, para obter ajuda sobre o comando who: >> help who WHO list current variables. WHO lists the variables in the current workspace. WHOS lists more information about each variable. Outro comando que pode ajudar bastante é o lookfor, que procura entre todas as funções do OCTAVE ou MATLAB a palavra-chave especificada. >> lookfor max BITMAX Maximum floating point integer. REALMAX Largest positive floating point number. MAX Largest component. Comandos básicos do OCTAVE ou MATLAB » Clear Apaga todas as variáveis do espaço de trabalho » Clc Limpa a janela de comandos » % O Operador Percentagem, permite adicionar comentários após comandos do OCTAVE ou MATLAB, ou seja, tudo que esteja à direita deste operador será ignorado. Tipos de dados em OCTAVE ou MATLAB: Matrizes Em OCTAVE ou MATLAB os dados são armazenados essencialmente como matrizes. Há várias formas de especificar matrizes, para que se possa manipulá- las. 5 Para definir explicitamente uma matriz A, devem-se usar colchetes a delimitar seus elementos. Estes serão separados por vírgula ou espaços dentro da mesma linha, sendo estas finalizadas por ponto e vírgula. Exemplo: » A = [4 3 1; 5 7 0 ]; O Ponto e Vírgula no final da instrução impede que o OCTAVE ou MATLAB mostre os dados introduzidos, embora os deixa guardados na memória. Caso não se coloque, serão visualizados o seguinte: A = 4 3 2 5 7 0 O OCTAVE ou MATLAB possui alguns comandos internos no caso de se criar matrizes elementares. » zeros(n,m) - Cria uma matriz nxm em que todos os elementos são nulos. » ones(n,m) – Cria uma matriz nxm em que todos elementos são a unidade. » eye(n) – Cria uma matriz identidade nxn Para obter acesso a um elemento da linha i e coluna j de uma matriz. utiliza-se o comando M(i,j) , sendo M a matriz. O Operador: O Operador: (dois pontos) possui várias funções no OCTAVE ou MATLAB. Exemplos: » D= 1:7 cria uma matriz D, linha, em que seus elementos são: [1 2 3 4 5 6 7 ]. 6 » D = 1:0.1:2 cria uma matriz D, linha, com um espaçamento de 0,1 entre seus elementos [1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 ] » D (1,: ) Se quiser obter a primeira linha da matriz D [1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 ] » D(1,2:4) Se quiser obter a porção entre a Segunda e Quarta colunas, na primeira linha [1.10 1.20 1.30 ] Constantes do OCTAVE ou MATLAB no format long com 15 dígitos pi 3,14159265358979 exp(1) 2.71828182845905 Ou no format short com 5 dígitos pi 3.1416 exp(1) 2.7183 e ainda a unidade imaginária i 0 + 1.0000i Variáveis em OCTAVE ou MATLAB As variáveis em OCTAVE ou MATLAB não necessitam de ser explicitamente declaradas, é feita distinção entre maiúsculas e minúsculas. 7 O OCTAVE ou MATLAB cria automaticamente a variável resposta ans (de ANSwer), que guarda o valor da última expressão calculada, quando este não estiver sido atribuído a nenhuma outra variável. Geralmente atribuímos um nome a uma variável definida, como » x = [1 2 3 4] x = 1 2 3 4 Programação em OCTAVE ou MATLAB Aqui está um grande diferencial do OCTAVE ou MATLAB , quando se trabalha com expressões, pode-se envolver matrizes inteiras, ao invés de obrigar a trabalhar apenas elemento a elemento, como acontece em muitas linguagens de programação. Exemplos: A’ Transposta da matriz A inv(A) Inversa da matriz A det(A) Determinante da matriz A size(A) Dimensão da matriz A eig(A) Autovalores da matriz A rank(A) posto da matriz A Os número podem ser introduzidos como inteiros (2546), negativos ( -456.003 ), decimais (4.634), complexos (8 + 7*i) ou notação científica ( 1.5e-5) que corresponde a 1.5 * 10^(-5) Na maioria dos softwares computacionais, principalmente no ambinete do Octave ou MatLab (VENDRAMETTO JR., C. E. \& ARENALES, 2000) indicamos os operadores lógicos ou relacionaisem ordem de precedência mais alta são os parênteses, em seguida exponenciação, lógica NOT (\~) e as operações aritméticas com números . Os Operadores Aritméticos habituais são a 8 potenciação ( ^) fatoração multiplicação (*), divisão direta (/) \ (barra invertida) indica a divisão indireta. adição ( + ) ou subtração ( - ) Os operadores relacionais utilizados são: <, >, >=, <=, ==, ~, =, a lógica AND (&) e a lógica OR (|). O operadores que podem ser aplicados a matrizes incluem além das vistas acima, a multiplicação elemento a elemento (.* ), a divisão elemento a elemento ( . / ), e a potenciação elemento a elemento ( . ^ ) Por Exemplo: Dado as matrizes » X = [1 2; 3 4 ] % e » Y = [ 0 1; 2 3 ] A Multiplicação elemento a elemento significa que o resultado de » Z = X.*Y, é igual a Z = 0 6 2 12 Que é diferente da regra atual de multiplicações de matrizes » Z = X*Y Z = 4 7 8 15 Os Controles de seqüências do programa são for variavel = valor_inicial : {passo :} valor final; {intruções} 9 end Exemplo: Para se criar vetores com potências de dois. for i = 0:9 P(i+1) = 2 ^ i; end » P P = 1 2 4 8 16 32 64 128 256 512 Outros comandos para controles de seqüências não serão abordados aqui, como while, break, continue (ver Help no próprio software!). Os testes lógicos if expressão {Instruções se expressão verdadeira } else {Instruções se expressão falsa} end O OCTAVE ou MATLAB possuem várias funções elementares sin(x) seno em radianos cos(x) coseno, em radianos tan(x) tangente, em radianos exp(x) exponencial log(x) logaritmos sqrt(x) raiz quadrada dos elementos da matriz x abs(x) valor Absoluto 10 Arquivos.m A utilização de arquivos do tipo nome.m no OCTAVE ou MATLAB, significa que podemos criar um arquivo texto com toda a programação de determinada rotina como os ciclos, testes lógicos, funções, comentários, etc. e só a chamar no OCTAVE ou MATLAB, como se fosse uma função interna. Evitando perda de tempo, redigitação de muitos comandos, organizando melhor nossa programação, e tendo a facilidade de editarmos ou reeditarmos os comandos em qualquer editor de texto como o Bloco de Notas (Notepad) do Windows, além de que o OCTAVE e MATLAB possuem um editor próprio com a facilidade de depurarmos a rotina (debug) quando cometemos um erro. Abaixo estão alguns comandos básicos para se trabalhar com esses arquivos: Um arquivo no OCTAVE ou MATLAB é criado através do comando edit (este comando abre o editor) Edit nome.m (abre o arquivo nome.m para ser editado) É necessário indicar ao OCTAVE ou MATLAB em qual diretório se está trabalhando, através de comandos semelhantes ao DOS. Exemplo: dir lista os arquivos do diretório ativo cd Indica o diretório ativo cd salvador muda o diretório ativo para salvador Guardando e Recuperando variáveis em arquivos As variáveis do ambiente de trabalho podem ser guardadas através da função save save nome grava todas as variáveis para o arquivo nome.mat save nome x gravar a variável x para o arquivo nome.mat 11 save nome x y grava as variáveis x e y para o arquivo nome.mat As variáveis do ambiente de trabalho podem ser lidas através da função load load nome recupera todas as variáveis do arquivo nome.mat load nome x recupera apenas a variável x do arquivo nome.mat load nome x y recupera as variáveis x e y no do arquivo nome.mat Visualização de Dados A parte de gráficos é outro ponto forte do OCTAVE ou MATLAB, com visualização em duas ou três dimensões. Como os gráficos são gerados em janelas independentes podemos salvá-los em formatos diferentes, editarmos suas escalas e mesmo o aspecto. plot(x,y) desenha gráficos a duas dimensões, além disso, podemos especificar as opções gráficas Exemplo: Para plotar o gráfico y = f(x), primeiro cria-se um vetor x contendo os valores das abscissas, e depois um vetor y contendo os valores das respectivas ordenadas, satisfazendo a função. Então chama-se a função plot, que é usada da seguinte maneira >> x = [0 1 2 3 4 5]; >> y =x.^2; >> plot(x,y) 12 Figura 1. Gráfico de y = x.^2 Os softwares OCTAVE ou MATLAB abrem uma janela especial com a figura do gráfico. A função plot recebe um número variável de argumentos. Sua forma mais geral é plot(x1, y1, opção1, x2, y2, opção2, ...xn, yn, opçãon) ou seja, você consegue traçar mais de uma curva no mesmo gráfico. Os argumentos opçãoi, i= 1, 2,... representam as várias opções para o gráfico, que pode ser qualquer um da seguinte tabela. TABELA 1 y Amarelo w Branco + Cruz m Roxo k Preto - Sólida c Azul claro -- Tracejada * Estrela r Vermelho - Ponto : Pontilhada g Verde ο Circulo -. Traço ponto b Azul x X Depois do gráfico plotado, alguns detalhes podem ser acrescentados TABELA 2 Title Título do gráfico xlabel Nome do eixo x text Escreve no local especificado ylabel Nome do eixo y axis Intervalo dos eixos no gráfico grid Deseja linhas de grade gtext Escreve texto no gráfico usando o mouse >> x = [0 1 2 3 4 5]; >> y = x.^2; % mapeia os valores de x >> plot(x,y,'--') >> title('gráfico da função y = x^2') >> xlabel('eixo x') >> ylabel('eixo y') 13 FIGURA 2: Gráfico de x2 14 FICHAS DE ATIVIDADES DE CÁLCULO NUMÉRICO Zeros de funções Definição: Dizemos que x é um zero de f(x), ou uma raiz da equação f(x) = 0, se f(x) = 0. Exemplo: Seja f(x) = x3 – 8. Então x = 2 é uma raiz de equação f(x) = 0, ou x3 – 8 = 0. Podemos resolver tal equação f(x) = 0 usando os seguintes passos: 1. Avaliamos uma aproximação inicial x0 da raiz x, ou um intervalo de pequena amplitude que a contém. Um método que podemos usar para avaliar uma aproximação inicial é o denominado Método Gráfico, que consiste em obtermos graficamente a aproximação desejada, ou seja construímos o gráfico de y = f(x) e obtemos sua interseção com o eixo das abscissas. Exemplo, seja f(x) = x^2 – x – 2 >> fplot((‘x^2-x-2’), [-10,10]) −10 −8 −6 −4 −2 0 2 4 6 8 10 −20 0 20 40 60 80 100 120 x2 − x − 2 FIGURA 3 15 2. Refinamos essa aproximação através de métodos iterativos conhecidos como Bisseção, Ponto Fixo, Newton, etc. Usando a ferramenta OCTAVE ou MATLAB Na determinação do zero de uma função é necessário plotar o gráfico da função, no OCTAVE ou MATLAB o comando utilizado é o fplot. Ao lado do comando entre parênteses deve aparecer a função entre “strings” e o intervalo em que o gráfico será plotado. >> fplot((‘x^3-9*x+3’),[-10,10]) −10 −8 −6 −4 −2 0 2 4 6 8 10 −1000 −800 −600 −400 −200 0 200 400 600 800 1000 x3 − 9*x + 3 FIGURA 4 A Figura 4 não mostra claramente onde se encontram os zeros de f, assim damos um zoom restringindo o intervalo gráfico. Assim, com >> fplot((‘x^3-9*x+3’), [-10,10]) Vemos os pontos onde f cruza o eixo ox, ou seja, os zeros de f mais claramente 16 −4 −3 −2 −1 0 1 2 3 4 −30 −20 −10 0 10 20 30 40 x3 − 9*x + 3 Figura 4 a. Zeros de f O Comando fzero nos fornece o(s) zero(s) da função no intervalo especificado. Por exemplo, no intervalo [0, 1] temos:>> fzero((‘x^3-9*x+3’), [0,1]) ans = 0.3376 O Comando eval encontra o valor da função no ponto dado >> y = ‘x.^3-9*x+3’; >>.x=0; >> m = eval(y) m=3 Na determinação dos zeros da função pelo Método de Newton é importante saber determinar a derivada da função, cujo comando no OCTAVE ou MATLAB é diff >>diff(‘x^3-9*x+3’) ans = 3*x^2-9 17 Exercícios 1. Localize graficamente as raízes das equações, fazendo os gráficos no OCTAVE ou MATLAB a) 4 cos(x) – e2x = 0 No Octave ou MatLab escrevemos como 4*cos(x) - exp(2*x) b) 2x - 3x = 0 c) x3 + x – 100 = 0 d) 1 – x ln(x) = 0 Método da Bisseção Pelo teorema do valor intermediário sabemos que se f(x) é uma função contínua no intervalo [a, b] tal que f(a) * f(b) < 0, então existe um 0 (zero) de f neste intervalo. Para simplificar, suponha que nesse intervalo exista uma única raiz (A derivada de f, f(x)’ possui um mesmo sinal para todos pontos de [a, b]). Em cada iteração a amplitude do intervalo é reduzida pela metade, observe: O novo intervalo é obtido da seguinte maneira, se f(x) * f(a) > 0, a recebe o valor de x, caso contrário b recebe o valor de x. Repete-se esse processo até que (b – a) < ε, em que ε é a precisão desejada e escolhe-se qualquer número pertencente ao intervalo obtido na ultima iteração, para obter a raiz aproximada. Exemplo: Seja f(x) = x3 – 2 = 0 . Encontrar um raiz aproximada da equação f(x) = 0, com 210−=ε . Consideremos o intervalo inicial [r0,s0] = [1,2] Aqui apresentamos uma rotina em OCTAVE ou MATLAB para encontrar a raiz de uma função pelo Método da Bisseção. Consideramos a função x3-2 que possui uma raiz no intervalo [1, 2] function bissecao função = 'x.^3-2'; % a função 2 b)(a + =x 18 int_inicial = 1; % limite inferior do intervalo onde quero encontrar a raiz int_final = 2; % limite superior do intervalo onde quero encontrar a raiz erro = .1e-3 % tolerância permitida passa = erro*3; % valor atual do x anterior valor = 0; % valor do x atual while abs(passa-valor) > erro % enquanto o módulo da diferença do x anterior e o x atual for maior que o erro o laço deve ser repetido passa = valor; valor = (int_inicial+int_final) / 2; % calcula o x atual x = int_inicial; fa = eval(funcao); % encontra o valor da função no ponto x e assumi o valor do intervalo inicial. x = int_final; % faz de x igual a intervalo final fb = eval(funcao); % encontra o valor da função no ponto x assumi o valor do intervalo final x = valor; % faz x igual ao x atual fx = eval(funcao); % encontra o valor da função no ponto x e assumi o valor x atual if (fa * fx) < 0 % esta testando se entre fa e fx esta a raiz int_final = valor; % Se a condição for verdadeira, o int_final é subtituido porque não faz parte do intervalo que contém a raiz. else int_inicial = valor; % comando executado se a condição for falsa end end valor % Mostra a raiz aproximada da função Obtemos erro = 1.0000e-004 valor = 1.2599 19 Exercícios 1. Modifique a rotina acima, de modo que venha a pedir para o usuário informar os valores das variáveis funcao, erro, int_inicial e int_final, tornando-a uma rotina genérica. 2. Utilizando a rotina genérica do exercício anterior, encontre a raiz aproximada da função f(x) = x3 – 9x + 3 com 310−=ε no intervalo [0 1] No OCTAVE ou MATLAB o comando que pede informações ao usuário é input Exemplo: Erro = input('Entre com o erro '); Método das Aproximações Sucessivas Suponha que f(x) é contínua no intervalo [a, b] tal que f(a) * f(b) < 0, e que o intervalo [a, b] contém apenas uma raiz da equação f(x) = 0. O Método das Aproximações Sucessivas ou do Ponto Fixo consiste em transformar essa equação em uma equação equivalente x = j(x), e a partir de uma aproximação inicial x0 gerar uma seqüência {xk} de aproximações para obter o zero da função (em que f(X) = 0), pela relação xk+1 = j(xk), sabendo que a função j(x) é tal que f(X) = 0 se e somente se j(X) = X. A função j(x) recebe o nome de função de iteração para a equação f(x) = 0. Exemplo: Seja f(x) = x2 – 7, encontrar aproximadamente, a raiz positiva da equação f(x) = 0. Solução: i) Escolhendo, inicialmente θ(x) = 2, em que θ(x) = x+ θ(x)f(x) ii) Tomando x0 = 2,5 Usando o Método Numérico das Aproximações Sucessivas (programa desenvolvido em Visual Basic 6.0), obteremos: 20 )*2( ) 1( x − FIGURA 6 Observa-se que a seqüência não está convergindo para raiz 7 de f(x) = 0 (Compare-o com um programa elaborado no Octávio ou Matlab) Escolhendo agora, θ(x) = temos: FIGURA 7 Obs: No método das aproximações sucessivas, se escolhermos φ de tal forma que | φ’ (x) | > 1 em qualquer vizinhança de x, o método pode não convergir. 21 Exercícios 1) Desenvolva um algoritmo em OCTAVE ou MATLAB, para se calcular o métodos das aproximações sucessivas. Método de Newton - Raphson A idéia central no método de Newton-Raphson é a de escolher uma função, tal que a derivada de , na raiz que está procurando, seja zero. Assim teremos, não só garantia da convergência quanto convergência muito rápida. O Método de Newton acelera o Método do Ponto Fixo. Primeiramente é fornecido um ponto inicial x0, no ponto (x0, f(x0)) traça-se uma reta tangente, a interseção dessa reta com o eixo das abscissas encontra-se em (j(x0), 0), troca-se x0 por j(x0), repete-se esse processo até que a precisão seja alcançada. Em outras palavras, a estimativa do zero da função f(x) é feita a partir da reta tangente à função em um ponto de partida. O ponto em que a reta tangente intercepta o eixo das abscissas corresponde á estimativa do zero da função. Aqui temos uma rotina em OCTAVE ou MATLAB para encontrar a raiz pelo método de Newton-Raphson function newton funcao=input('Entre com a funcao '); % Pede para o usuário entrar com a função funcao_der = diff(funcao); % Calcula a derivada da funcao erro=input('Entre com o erro '); % Pede para o usuário informar a tolerância int_inicial=input('Entre com a aproximação inicial '); % Pede para o usuário informar a aproximacao inicial passa=erro*3; iteracoes =0; while abs(passa)>abs(erro) % Faça enquanto o erro for maior que a tolerância dada x = int_inicial; int_final=x - (eval(funcao) / eval(funcao_der)); % aplica o método passa = abs(int_final-int_inicial)/abs(int_final); % calcula o erro int_inicial=int_final; 22 1 1)()( − − − − nn nn xx xFxF iteracoes=iteracoes+1; % controla o número de iterações pause; end disp(' '); % Mostra uma linha em branco disp( 'depois de '); % Mostra na Tela o texto ‘depois de ‘ ss=sprintf('%f iterações', iteracoes); % monta o texto disp( ss ); % mostra a variável ss na tela disp(' '); ss=sprintf('x = %f ', int_final); disp( ss ); disp(' '); disp('é a solução de'); funcao disp(' '); ss=sprintf('com erro relarivo igual a %f', passa); disp( ss ); Exercícios 1) Usando o algoritmo acima, determine o zero da função , utilizando o Método de Newton-Raphson com x0= 1 e tolerância 2) Determine o zero da função , a partir de 3 iterações do Método de Newton-Raphson com valor inicial x0= 1. usando o OCTAVE OU MATLAB . Método das Secantes Uma grande desvantagem do Método Newton-Raphson é a necessidade do cálculo de derivadas, quando a função é mais complicada. Uma maneira de contornar este problema é substituir a derivada por uma diferença do tipo10)( 4 −−= xxxf 310−=ε xexxf += ln)( 23 Em que xn e xn-1 são duas aproximações da raiz desejada. Fazendo essa substituição no método de Newton-Raphson temos o método da Secantes . Dadas as aproximações iniciais x0 e x1, a seqüência xk gerada no método das secantes é dada por xx+1 = (xn-1 f(xn) – xnf(xn-1)) / (f(xn) – f(xn-1)) n = 1, 2, 3, 4....,convergindo assim para a raiz procurada. Aqui temos uma rotina em OCTAVE ou MATLAB para encontrar a raiz pelo método das Secantes function secantes função = input('Entre com a funcao '); erro = input('Entre com o erro tolerável '); int_inicial = input('Entre com o valor inicial do intervalo (x0) '); int_final = input('Entre com o valor final do intervalo (x1) '); passa = erro*3; iterações = 0; while abs(passa) > abs(erro) x = int_inicial; resultado_inicial = eval(funcao); x = int_final; resultado_final = eval(funcao); resultado = int_final - (((int_final-int_inicial) * resultado_final)/(resultado_final- resultado_inicial)) passa = abs(resultado-int_final)/abs(resultado) int_inicial = int_final; int_final = resultado; iterações = iterações + 1; pause; end disp(' '); disp( 'depois de '); 24 ss = sprintf('%f iterações', iteracoes); disp( ss ); disp(' '); ss = sprintf('x = %f ', int_final); disp( ss ); disp(' '); disp('é a solução de'); funcao disp(' '); ss = sprintf('com erro relarivo igual a %f', passa); disp( ss ); disp(' '); Exercícios 1. Usando o algoritmo acima do método das secantes , determinar uma aproximação para a raiz de : x3 - 2x2 + 2x – 5 = 0 com erro 10-3 ( Plote o gráfico e “chute” os intervalos iniciais ) 2. Qual método em geral será o mais rápido o de Newton-Raphson ou o das Secantes ? Porquê ?, Faça testes com algumas funções simples e outras mais complicadas. 25 FICHAS DE ATIVIDADES DE CÁLCULO NUMÉRICO Interpolação Polinomial Apresentamos aqui a aproximação de uma função de uma variável real por outras funções mais simples, de modo que operações em geral sejam realizadas com mais facilidade. Esta situação ocorre quando temos uma função f(x) e esta apresenta um grau de dificuldade, por exemplo, para avaliar em pontos, derivar ou ainda integrar, ou mesmo quando conhecemos esta função em um número finito de pontos de um intervalo [a, b], sem o conhecimento de sua forma analítica, geralmente obtida em experimentos. Desta forma, esta função será aproximada por funções polinomiais, exponenciais, trigonométricas, etc., que representarão a função original e, para obter qualquer informação sobre a função original, utilizamos a sua forma aproximada. Exibimos nesta unidade apenas a aproximação de uma função f(x), utilizando funções polinomiais, pela simplicidade no tratamento, continuidade e diferenciabilidade dessas funções, embora nas referências bibliográficas podemos estudar outros tipos de aproximações. Teorema de Existência e Unicidade Considere uma função f(x) definida em n10 x,...,x,x (n+1) pontos distintos de um intervalo [a, b], então existe um único polinômio P(x) de grau menor ou igual a n, tal que iii y)x(f)x(P == i=1,...,n. Prova: Seja o polinômio de grau n, 011n1nnn axa....xaxa)x(P ++++= −− tal que iii y)x(f)x(P == i=0, 1,...,n. Desta forma, para que o polinômio coincida com a função nos (n+1) pontos temos: 26 =++++ =++++ =++++ − − − − − − n0n1 1n n1n n nn 1011 1n 11n n 1n 0001 1n 01n n 0n yaxa...xaxa yaxa...xaxa yaxa...xaxa M Podemos observar que obtemos um sistema de equações lineares Ax=b, em que t n10 t 01nn )y,...,y,y(b,)a,...,a,a(x == − e a matriz A dada por: = − − − 1x...xx 1x...xx 1x...xx A n 1n n n n 1 1n 1 n 1 0 1n 0 n 0 M O det(A), chamado de determinante de Vandermonde é dado por, )xx()Adet( ji ji −= ∏ < Como os pontos n,...,1,0ix i = são distintos, podemos mostrar que de(A) 0≠ , o que significa que o sistema linear possui uma única solução e, portanto os coeficientes n10 a,...,a,a do polinômio são únicos dados pela resolução deste sistema. Assim, o polinômio P(x) existe e é único. Cálculo do Polinômio Interpolador Existem várias formas de se calcular o polinômio de interpolação dentre elas destacamos: Solução de Sistemas, Forma de Lagrange e Forma de Newton- Gregory. Solução de Sistemas O Cálculo do polinômio interpolador por meio da solução de sistema linear é de fácil compreensão, porém é muito trabalhosa, e podem ocorrer erros de arredondamento gerando soluções irreais. 27 Exemplo: Dados os pares de pontos: (-1, 15); (0, 8); (3, -1) determinar o polinômio de interpolação para a função definida por este conjunto de pares de pontos. Solução: x0 = -1 y0 = 15 = f(x0) x1 = 0 y1=8 = f(x1) x2 = 3 y2=-1 = f(x2) Com n = 2 e procuramos P2(x) = a0 + a1 x + a2 x2 , tal que P2(xk) = yk, k = 0, 1, 2. Podemos então escrever: Resolvendo o sistema linear para as variáveis a0, a1 e a2, obtemos os valores de a0, a1 e a2 do polinômio de interpolação P2(x) = 8 –6x + x2 Usando a ferramenta OCTAVE ou MATLAB O Programa abaixo resolve o polinômio Interpolador usando resolução de sistemas no OCTAVE ou MATLAB. Function interp_sistema x=input('Entre os pontos de interpolação na forma [x0 x1 ... xn]'); % Pede para o usuário informar os pontos de interpolação y=input('Entre os valores da função na forma [y0 y1 ... yn]'); % Pede para o usuário informar os valores da função res=input('Você deseja ver o gráfico dos pontos da função dada? S/N [S] ','s'); % Pede para o usuário dizer se deseja ver o gráfico da função if isempty(res) % caso o usuário não responda, o sistema mostrará o gráfico res='S'; end =++ =++ =++ 222210 112110 002010 y xa xa a y xa xa a y xa xa a 2 2 2 28 n = length(x); % obtem o grau do polinômio hold; xmin = min(x) - 1; xmax = max(x) + 1; ymin = min(y) - 1; ymax = max(y) + 1; axis([xmin xmax ymin ymax]); if((res=='S') | (res=='s')) % se o usuário respondeu em maiúsculo ou minúsculo for i=1:n plot(x(i),y(i), 'o'); % plota o gráfico end disp('Pressione qualquer tecla para continuar') pause; end for i=1:n for j=1:n a(i,j) = x(i)^(j-1); end end coef = a \ y'; res=input('Voce deseja ver o grafico do polinômio interpolador? S/N [S] ','s'); if isempty(res) res='S'; end if((res=='S') | (res=='s')) % se o usuário respondeu em maiúsculo ou minúsculo h = (xmax - xmin)/100; xx = xmin : h : xmax; yy = polyval(fliplr(coef'),xx); plot(xx,yy); % plota o gráfico do polinômio interpolador end ss=sprintf('Os coeficientes do polinomio interpolador na ordem a0 a1 a2 ... an são:'); disp(' '); disp(ss); coef % lista os coeficientes do polinômio interpolador 29 Exemplo: Utilizando o algoritmo de solução de sistemas, encontre os coeficientes do polinômio interpolador P2(x) = a0 + a1 x + a2 x2 da tabela abaixo x -1 0 2 f(x) 4 1 -1 » solucao Entre os pontos de interpolação na forma [x0 x1 ... xn][-1 0 2] Entre os valores da função na forma [y0 y1 ... yn][4 1 -1] Voce deseja ver o grafico dos pontos da funcao dada? S/N [S] s Pressione qualquer tecla para continuar Voce deseja ver o grafico dopolinômio interpolador? S/N [S] s Os coeficientes do polinomio interpolador na ordem a0 a1 a2 ... an são: coef = 1.0000 -2.3333 0.6667 1) Utilizando o algoritmo de solução de sistemas, encontre os coeficientes do polinômio interpolador da tabela abaixo X 0.1 0.2 0.3 0.4 f(x) 5 13 -4 -8 30 Depois de encontrado os coeficientes do polinômio interpolador, teste os pontos da tabela nele. O que você observou ? Obs: Verifique o determinante da matriz de Vandermonde deste problema, o condicionamento da matriz do sistema. FORMA INTERPOLADORA DE LAGRANGE Sejam x0, x1,...., xn n +1 pontos distintos. Consideremos para k = 0,1,...,n, os seguintes polinômios lk(x) de grau n: Para f0 = f(xo), f1 = f(x1), ..., fn = f(xn) é o polinômio de interpolação de f(x). A fórmula acima é conhecida como Forma de Lagrange para o polinômio de interpolação O Programa a seguir resolve o polinômio interpolador usando a forma de lagrange function lagrange x=input('Entre os pontos de interpolação na forma [x0 x1 ... xn]: '); y=input('Entre os valores da função na forma [y0 y1 ... yn]: '); xx=input('Entre o valor do ponto de avaliação do polinômio interpolador: '); res=input('Voce deseja ver o grafico dos pontos da funcao dada? S/N [S] ','s'); if isempty(res) ) x- (x ... ) x- (x ) x- (x ... ) x- (x ) x-(x ... ) x-(x ) x-(x ... )-x(x )( nk1kk1-kk0k n1k1-k0 + + =xlk { { j k se 1, , j k se 0, )( = ≠=xjlk ∑ = = n 0 k kk (x)l f )(xPn 31 res='S'; end n = length(x); xmin = min(x) - 1; xmax = max(x) + 1; ymin = min(y) - 1; ymax = max(y) + 1; if((res=='S') | (res=='s')) hold; axis([xmin xmax ymin ymax]); for i=1:n plot(x(i),y(i), 'o'); end disp('Pressione qualquer tecla para continuar') pause; end sol = pol(n, x, y, xx); ss=sprintf('O valor do polinômio interpolador no ponto %f é: %f', xx,sol); disp(' '); disp(ss); disp(' '); res=input('Voce deseja ver o grafico do polinômio interpolador? S/N [S] ','s'); if isempty(res) res='S'; end if((res=='S') | (res=='s')) h = (xmax - xmin)/100; xxx = xmin : h : xmax; m = length(xxx); 32 for i=1:m yy(i) = pol(n, x, y, xxx(i)); end plot(xxx,yy); end function solucao = pol(n, x, y, xx) p = 1; soma = 0; for i=1:n dd = xx-x(i); if (dd == 0) solucao = y(i); return; end p = p*dd; for j=1:i-1 dd = dd*(x(i)-x(j)); end for j=i+1:n dd = dd*(x(i)-x(j)); end soma = soma + y(i)/dd; end solucao = p*soma; Exercícios: 1. Suponha uma função f(x), tal que conhecemos apenas os pontos mostrados na tabela. Determine usando o algoritmo acima de Lagrange o valor de f(0,73) 33 x 0 1 f(x) 1,35 2,94 Obs: Veja abaixo a facilidade que o OCTAVE OU MATLAB nos oferece: No OCTAVE ou MATLAB o comando polyfit encontra o polinômio interpolador, o número 1 dentro dos parênteses indica o grau do polinômio: >> x = [0 1]; >> y = [1.35 2.94] >> p=polyfit(x,y,1) p = 1.5900 1.3500 O comando polyval usa o polinômio encontrado para calcular o valor de x >> x = 0.73 >> polyval(p,x) ans = 2.5107 Para Determinar a interpolação de um ponto, o OCTAVE OU MATLAB disponibiliza o comando interp1 >> x = [0 1] >> y = [1.35 2.94] >> p073 = interp1(x,y,0.73,’linear’) p073 = 2.5107 34 FICHAS DE ATIVIDADES DE CÁLCULO NUMÉRICO MÉTODOS NUMÉRICOS PARA A SOLUÇÃO DE SISTEMAS DE EQUAÇÕES LINEARES Métodos Diretos São os métodos para a resolução de sistemas lineares Ax = b, cuja matriz A é não singular. Tais métodos forneceriam a solução exata do sistema, exceto os erros de arredondamento efetuando um número finito de operações. Eliminação de Gauss Seja o sistema linear Ax = b, em que A є M(n,n) é não singular. O Método de Eliminação de Gauss, com pivotamento na diagonal, consiste em transformar o sistema linear original num sistema linear equivalente com matriz dos coeficientes triangular superior, pois estes são de resolução imediata. O Programa abaixo resolve o sistema Ax = b, através da Eliminação de Gauss com pivotamento parcial. function Gauss_Parcial A = input('Entre com a Matriz A '); % Pede para o usuário entrar com a Matriz A b= input('Entre com a matriz b '); % Pede para o usuário entrar com a Matriz b tic % Inicia o temporizador do OCTAVE ou MATLAB [m,n]=size(A); % iguala m = ao número de linhas da Matriz A e n = ao número de colunas da Matriz A a=[A b]; % define a nova matriz for j=1:n-1 ipiv=j; 35 amax=abs(a(j,j)); for i=j+1:n if abs(a(i,j))>amax % verifica se o pivô é o elemento de maior módulo entre os coeficientes ipiv=i; amax=abs(a(i,j)); end end if amax==0 % caso for zero, sai do for break end if ipiv>j for k=1:n+1 x=a(ipiv,k); a(ipiv,k)=a(j,k); a(j,k)=x; end end for i=j+1:n lambda(i,j)=a(i,j)/a(j,j); a(i,j)=lambda(i,j); for k=j+1:n+1 a(i,k)=a(i,k)-lambda(i,j)*a(j,k); end end end if a(n,n)==0 % caso for zero, sai do for break else 36 a(n,n+1)=a(n,n+1)/a(n,n); end for i=n-1:-1:1 s=0; for j=i+1:n s=s+a(i,j)*a(j,n+1); end a(i,n+1)=(a(i,n+1)-s)/a(i,i); end % Matriz ampliada = a for z=1:n % formando o vetor x x(z)=a(z,n+1); end x=x'; % igualando x a sua transposta toc % mostra para o usuário o tempo que demorou disp('A solucao desse sistema é o vetor'); x % mostra o vetor solução para o usuário Exemplo » eliminacao_gauss_parcial Entre com a Matriz A [3 2 4 ; 0 0.33 0.66 ; 0 0 -8] Entre com a matriz b [1 ;1.66; 0] A solução desse sistema é o vetor x = -3.0202 5.0303 = =+ =++ 0 8x- 1.66 0.66x 0.33x 1 4x 2x 3 3 32 321x 37 n1,2,..., i 0, =≠ 0 elapsed_time = 0 Exercício 1. Resolva o sistema abaixo, pelo método de eliminação de Gauss. Métodos Iterativos Um método é dito iterativo quando fornece uma seqüência de aproximações, cada um de seus termos obtidos dos anteriores pela repetição do processo. Um método iterativo para resolver um sistema linear A x = b, consiste em transformá-lo em um sistema linear equivalente da forma x = C x + g E computar a seguinte seqüência: x (k+1) = Cx(k) + g , k = 0, 1, 2, ..., Onde x(0) é uma aproximação inicial para a solução X do sistema. Método de Jacobi - Richardson Consideremos um sistema Ax = b com aii O Método de Jacobi - Richardson é definido através do processo iterativo: X(k+1) = Cx(k) + g, k = 0,1,2,... Usando a ferramenta OCTAVE ou MATLAB O Programa abaixo resolve o método de Jacobi – Richardson =+ =++ =++ 3 2x - 3x 4x 2 2x x x 1 4x 2x 3 321 321 321x 38 function jacobi A = input('Entre com a matriz A'); % Pede para o usuário entrar com a matriz A b = input('Entre com a matriz b'); % Pede para o usuário entrar com a matriz b x0 = input('Entre com o x0'); % Pede para o usuário entrar com x0 tol = input('Entre com a tolerância do erro'); % Pede para o usuário entrar com o erro L=-tril(A,-1); % extrai a parte triangular inferior da matriz U=-triu(A,1);% extrai a parte triangular superior da matriz D=diag(diag(A)); % extrai os elementos da diagonal principal da matriz N=L+U; C=D\N; % Monta a matriz C G=D\b; % Monta a matriz G iteracoes=1; x=C*x0+G; %monta x while norm(x-x0)>tol*norm(x) % faça enquanto a norma de (x-xo) > erro * a norma de (x) x0=x; x=C*x0+G; % monta x iteracoes=iteracoes + 1; end x % mostra o resultado ao usuário iteracoes % mostra o número de iterações ao usuário erro_aproximado = norm(x-x0)/norm(x) % mostra o erro ao usuário 39 n1,2,..., i 0, =≠ Exercícios 1) Resolver o sistema linear Ax = b, onde Pelo método iterativo de Jacobi-Richardson com x(0) = (0,0,0,0) e 210−=ε Método de Gauss-Seidel Consideremos um sistema Ax = b com aii O método de Gauss-Seidel pode ser considerado como uma variante do método de Jacobi-Richardson., ele incorpora os valores atualizados de x imediatamente após o seu cálculo. A forma de Gauss-Seidel para a equação é dada por: (L+D)x = -U.x+b O processo iterativo de Gauss-Seidel é expresso por: X(k+1) = G.x(k) + (L+D)-1.b O Programa abaixo em OCTAVE ou MATLAB resolve o método de Gauss – Seidel function gauss_seidel A = input('Entre com a matriz A'); b = input('Entre com a matriz b'); x0 = input('Entre com o x0'); tol = input('Entre com a tolerância do erro'); L=tril(A,-1); % extrai a parte triangular inferior da matriz U=-triu(A,1); % extrai a parte triangular superior da matriz = = 13 5 21- 6- b ; 5 1 0 1 0 2 1 0 1 1- 20 1 0 0 6 10 A 40 D=diag(diag(A)); % extrai os elementos da diagonal principal da matriz M=D+L; C=M\U; G=M\b; iteracoes=1; x=C*x0+G; while norm(x-x0)>tol*norm(x) x0=x; x=C*x0+G iteracoes=iteracoes + 1; end x % mostra o vetor solução ao usuário iteracoes % informa o número de iterações ao usuário erro_aproximado = norm(x-x0)/norm(x) % Mostra o erro ao usuário Exemplo » gauss_seidel Entre com a matriz A [3 2 4 ; 0 0.333 0.666 ; 0 0 -8] Entre com a matriz b [1 ;1.666; 0] Entre com o x0 [0;0;0] Entre com a tolerância do erro 0.001 x = -3.0020 5.0030 41 0 iteracoes = 3 erro_aproximado = 0 1) Resolva o sistema linear Pelo método de Gauss-Seidel com x(0) = (0,0,0,0) e 210−=ε = = 0 6 5 b ; 6 3 3 1 4 3 1 1 5 A 42 Soluções Numéricas de Equações Diferenciais Ordinárias: Problemas de Valor Inicial A razão mais forte de introduzirmos métodos numéricos para aproximar soluções de problemas de valor inicial (PVI ) é a dificuldade de se encontrar, as soluções de certas equações na forma analítica ou mesmo podem não existir uma expressão simples que as represente. Dado o PVI: y’ = f(x, y) y(x0) = y0 Se para calcular o valor yj = y(xj) , usamos yj-1 teremos um método de passo simples Método de Euler Um método numérico que podemos aplicar a solução aproximada de um PVI: y’ = f(x, y), y(x0) = y0 é o método de Euler. Como conhecemos x0 e y0 = y(x0), então sabemos calcular y’(x0) = f(x0, y0). Assim a reta que passa por (x0, y0) com coeficiente angular y’(x0), r0(x) é conhecida: r0(x) = y(x0) + (x – x0)y’(x0) Escolhido h = xk+1 – xk, y(x1) = y1 = r0 (x1) = y0 + hy’(x0), ou seja y1 = y0 + h f(x0, y0). De um modo geral podemos calcular yk+1 = yk + h f(xk, yk). Usando a ferramenta OCTAVE OU MATLAB O Programa abaixo resolve um PVI usando o método de Euler. 43 function euler funcao = input('Entre com a função y ' ); x0=input('Entre com o valor inicial x ' ); y0=input('Entre com o valor inicial y ' ); pontos = input('Entre com o número pontos do intervalo ' ); h = input('Entre com o h '); y=y0; for i = 0 : pontos; x =x0 + i*h ; y = y + eval(funcao) * h end Exercícios “Existem 10 tipos de estudantes, os que conhecem o sistema binário e os que não conhecem!” 1. Converta os números decimais para a base binária: a) 27 b) 2345 c) 1958 d) 33.56 e) 2012 f) 0.4 2. Converta os números binários em para a base decimal: a) 11111011100 b) 1111.0111 c) 11.11 d) 1010101 3. Usando a técnica de arredondamento, representar os números abaixo com 4 casas decimais: a) 0.1267899 b) 23.456797 c) 11.233333 d) 5.897234 4. O ano de 2009 foi o Ano Internacional da Astronomia. Muitos cientistas antigos efetuaram cálculos astronômicos com erros, comparados aos valores reais conhecidos hoje com o avanço das técnicas de medições. Sabemos que a distância média da Terra à Lua é de 384000 km. A distância da Terra a Lua obtida por Hiparco de Nicéia na segunda metade do séc. II a.C. foi de 402500 km. a) Calcule o erro absoluto cometido por Hiparco. Qual é o valor do erro absoluto em porcentagem? 44 b) Calcule o erro relativo cometido por Hiparco. Qual é o valor do erro relativo em porcentagem? 5. Resolver a equação 06x 2 =− , usando o seguinte processo iterativo: ...1,0)6( 2 1 1 =+=+ k x xx k kk com 410−=ε no critério de parada partindo de um ponto inicial x0 = 1. 6. Faça um mapa conceitual detalhado sobre os erros em processos numéricos considerando as definições, introduzindo labels indicando se aprendeu (A), não aprendeu (N), se gostou (G) e se detestou (D ), achou interessante (I) etc. Obs. Os mapas conceituais podem ser feitos com os softwares disponíveis como: Xmind (http://www.xmind.net ), CMAPS (http://cmap.ihmc.us/) ou mesmo com a barra de desenhos do office, word ou powerpoint. 1. Seja uma função f(x) definida conforme a tabela abaixo: x 0 1 2 3 f(x) -5.6 -4 8.1 9 Determine o polinômio interpolador de f(x), avalie f(2.3) usando: a) Lagrange b) Newton - Gregory. 2. Seja uma função f(x) definida conforme abaixo: x 0.1 0.2 0.3 0.4 f(x) 8 3.9 4.8 -8.9 Determine o polinômio interpolador de f(x) nos pontos dados, usando Newton Gregory na variável u. Avalie f(0.35). 3. Estude o polinômio interpolador de Lagrange e o limitante superior para o erro. 4. Seja a função f(x) = ex + cos(x) + 1 tabelada como segue: x 0 0.5 1.1 f(x) 3 3.53 4.46 45 Usando o polinômio interpolador de Lagrange, avalie f(0.6) e um limitante superior para o erro. 5. O calor específico da água em função da temperatura em Co é dado por: t 30 35 40 45 c 0.99826 0.99818 0.99828 0.99890 Com o Software Numérico - Referência Bibliográfica [1], usando o polinômio interpolador de Newton-Gregory, calcule aproximadamente o calor específico para t = 37.5 Co. 6. A partir dos seus conhecimentos de aproximação de funções, resolver o problema da temperatura em relação a profundidade de um lago, proposto no início deste capítulo, usando um polinômio interpolador de grau 2. Analise os resultados obtidos. 7. Usando o Método dos Mínimos Quadrados, determine 21 axa)x(g += que melhor se ajusta aos dados da tabela abaixo: x -2 -1 0 1 2 3 4 f(x) -4.98 -3.00 -1.01 0.99 3.01 4.98 7.01 Calcule ∑= 7 1i 2 i)x(e e, analise os resultados obtidos. 8. Com o Software Numérico e usando o Método dos Mínimos Quadrados determine uma função g(x) que melhor se ajusta aos dados da tabela abaixo: x -2 -1 0 0.1 1 2 3 f(x) 6.00 1.01 0 0.12 3.00 9.98 20.98 Calcule o erro ∑ = 7 1i 2 i )x(e e, analise os resultados obtidos. 9. Considere o problema de previsão de escoamento de água, exibido neste capítulo: a) Faça um gráfico dos dados da tabela. b) Usando O Método dos Mínimos Quadrados, determine a melhor reta que se ajusta aos dados da tabela e faça uma previsão do escoamento anual de água se a precipitação for de 120 cm. 10. Usando o Software Octave ou Matlab, resolva os exercícios 7) e 8). 11. Faça um Mapa Conceitual detalhado, sobre os tópicos de interpolação e ajuste de curvas - MMQ, introduzindo labels indicando se aprendeu (A), não aprendeu (N), se gostou (G) e se detestou (D), achou interessante (I) etc. 46 1. Calcule I = ∫ ++ − 7.0 1.0 x6 dx)3x4.8e( usando: a) Regra dos Trapézios com 6 pontos; b) Regra 1/3 de Simpson com 6 subintervalos; c) Calcule um limitante superior para o erro em cada caso. 2. Seja uma função f(x) tabelada como segue x -1 0 1 2 3 4 5 f(x) 1 0.51 0.42 0.82 1.91 0.99 1.88 Calcule ∫ − 5 1 )( dxxf , usando a Regra dos Trapézios e a Regra 1/3 de Simpson. 3. Calcule ∫ ++ 1 0 2 )5.3)cos(6.4( dxxx , usando a Regra dos Trapézios com 6 pontos e um limitante superior para o erro. 4. Estude a Regra 3/8 de Simpson e um limitante superior para o erro e, resolva o exercício 2) - Referência Bibliográfica [1]. 5. Calcular ∫ ++ 2 1 3 )65.8( dxxe x usando: Regra dos Trapézios com 4 sub-intervalos, Regra 1/3 de Simpson com 6 sub- intervalos, a Regra 3/8 Simpson com 9 sub-intervalos e, um limitante superior para o erro. 6. Determine o menor número de sub-intervalos em que podemos dividir o intervalo [0 1] para obter I = ∫ − 1 0 2 )5( dxe x usando a Regra dos Trapézios com erro menor ou igual 0.001. 6. Resolva o exercício 6) usando a Regra 1/3 Simpson, a Regra 3/8 de Simpson e para a divisão encontrada calcular a integral I. 7. Uma linha reta foi traçada de modo a tangenciar as margens de um rio nos pontos A e B. Para medir a área entre o rio e a reta AB foram traçadas perpendiculares em relação a AB com um intervalo de 0.05 m. Qual é esta área? Perpendiculares 1 2 3 4 5 6 7 8 9 47 Comprimento(m) 3.28 4.02 4.64 5.26 4.98 3.62 3.82 3.68 3.26 Faça uma interpretação gráfica do problema e, resolva-o usando seus conhecimentos de Cálculo Numérico. 8. Com o Software Matlab, usando a Regra dos Trapézios, calcular as integrais das seguintes funções: a) dx)1.3x)x(sen( 5 1 2 +−∫ b) dx)8.2)xcos(e( 3 1 x ∫ − −+ 9. Com o Software Numérico - Referência Bibliográfica [1], usando a Regra 1/3 de Simpson, calcule o valor aproximado da integral das seguintes funções: a) dxxe x )9.45( 4 1 ++∫ − , usando 6 sub-intervalos e um limitante superior para o erro. b) dxxx )26( 5.2 1 3 ++∫ , usando 9 pontos e um limitante superior para o erro. 10. Faça um Mapa Conceitual detalhado, sobre Integração Numérica, introduzindo labels indicando se aprendeu (A), não aprendeu (N), se gostou (G) e se detestou (D), achou interessante (I) etc. 1. Usando o Método de Euler, resolva as seguintes equações diferenciais com valor inicial: a) y’ = 4 - 2x , com y(0) = 2. Usando h = 0.01 calcule y(0.05); b) y’ =1 - y/x , com y(2) = 2. Usando h = 0.1 calcule y(2.4); c) y’ = -x/y , com y(0) = 20. Usando h = 0.2 calcule y(1.0). 2. Usando o Método de Euler Aperfeiçoado, calcule a solução aproximada para as seguintes equações diferenciais com valor inicial: a) y’ = -x /y com y(0) = 20. Usando h = 0.2, calcule y(1.2); b) y’= y - x com y(0) = 2. Usando h = 0.1, calcule y(0.9). 48 3. Com o Software Numérico - Referência Bibliográfica [1], usando o Método de Euler calcule a solução aproximada para as seguintes equações diferenciais com valor inicial: a) y’ = -2 y +1 com y(0) = 1. Usando h = 0.1 e depois h = 0.01, calcule y(0.9). O que você pode afirmar sobre a qualidade dos resultados obtidos? Justifique suas afirmações teoricamente. b) y’ = y com y(0) = 1. Usando h = 0.2, calcule y(2.0) e um limitante superior para o erro. 4. Escreva as equações discretizadas da equação diferencial parabólica da difusão para: a) h = 0.1 e k = 0.1 b) h = 0.5 e k = 0.3 5. Discretize a equação diferencial parcial parabólica da difusão, )( ( )tx x u tx t u ,, 2 2 ∂ ∂ = ∂ ∂ utilizando o Método das Diferenças Finitas para valores de passos no tempo 05.0k = e no espaço 1.0h = . Considere as condições de contorno u(0,t) = u(2,t) = 0, 0 < t < T, e as condições iniciais u(x,0) = , 1 2≤≤ x , para calcular o valor de u(x,t) nos pontos (0.9,0.05), (1, 0.05), (1.1, 0.05) e (1, 0.1). 6. Discretize a equação diferencial parcial parabólica da difusão, )( ( )tx x u tx t u ,, 2 2 2 ∂ ∂ = ∂ ∂ α utilizando o Método das Diferenças Finitas para valores do coeficiente de difusão 1=α . Escolha valores para os passos no tempo k e no espaço h e encontre um valor aproximado para a solução numa região quadriculada de lado 1, considerando as condições de contorno u(0,t) = u(1,t) = 0, 0 < t < T, e as condições iniciais u(x,0) = 1, 0 1≤≤ x . Plote os valores das aproximações obtidas nos pontos da malha. 7. Faça um Mapa Conceitual detalhado sobre métodos numéricos para as Equações Diferenciais Ordinárias, introduzindo labels indicando se aprendeu (A), não aprendeu (N), se gostou (G) e se detestou (D ), achou interessante (I) etc. 49 8. Faça um Mapa Conceitual detalhado sobre métodos numéricos para as sobre Equações Diferenciais Parciais, introduzindo labels indicando se aprendeu (A), não aprendeu (N), se gostou (G) e se detestou (D ), achou interessante (I) etc. Referências Hanselman, D. e Littlefield, B., Matlab 6 Curso Completo, Prentice Hall, São Paulo, (2003) Vendrametto Junior, C. E. e Arenales, S. H. V. , MATLAB: fundamentos e programação, EDUFSCar (2000)
Compartilhar