Iteração e Pontos Fixos Iteração é um dos pontos chave da programação numérica. Iterar consiste em repetir uma mesma operação diversas vezes levando a uma aproximação cada vez melhor da solução exata. Vamos começar escolho um número qualquer. Insira o número no MATLAB digitando: seu_numero Essa é a forma de atribuir um valor a uma variável no MATLAB. O número escolhido é armazenado na variável x para ser utilizada depois. Se você, por exemplo, começar com: 3 O MATLAB respode com: 3 Podemos agora entrar com o comando: sqrt(x + 1) No MATLAB, sqrt é o nome da função raiz quadrada (square root). A quantidade à direita do igual é calculada e o resultado é armazenado na variável x, sobrescrevo o valor anterior. No teclado do seu computador, provavelmente, contém um conjunto de quatro teclas em formato de seta. A tecla seta para cima permite chamar novamente o comando anterior. Use a tecla seta para cima, seguida da tecla enter para executar repetidas vezes o seguinte comando: sqrt(x + 1) Considerando que você começou com 3, temos:
16 experimentos com matlab 3 2 1.7321 1.6529 1.6288 1.6213 1.6191 1.6184 1.6181 1.6181 1.6180 1.6180 Após 10 passos, o valor permanece constante em 1, 6180. Tente fazer o mesmo para outros valores iniciais, você obterá o mesmo resultado. O MATLAB realiza suas computações utilizando cerca de 16 casas decimais, mas mostra apenas cinco casas. Para ver mais casas decimais, é necessário utilizar o comando: format long O número que você encontrou é um dos número mais famosos da matemática, φ, a Razão Áurea. Em MATLAB, o sinal de igual é um operador de atribuição. Ele indica: compute o valor à direita e armazene na variável à esquerda, então a atribuição sqrt(x + 1) usa o valor atual de x para computar sqrt(x + 1) e armazena o novo resultado em x. Na matemática, o sinal de igual tem um significado diferente. A expressão 1 + x é uma equação. Uma locução para essa equação é conhecida como ponto fixo 2. A função f (x) = 1 + x tem apenas um ponto fixo e a forma mais simples de encontrá-lo é resolvo a equação quadrática. A raiz positiva da equação quadrática é dada por: 2 A expressão ponto fixo apresenta significados diferentes em diversas áreas. Na área de computação numérica, se utiliza quando o número de casas decimais após a virgua é fixo, em oposição ao ponto flutuante (float)
iteração e pontos fixos 17 φ = 1 + 5 2 Podemos computar o valor de φ no MATLAB com o comando: phi = (1 + sqrt(5))/2 Que gera, como resultado: phi = 1.618033988749895 Outra forma de enter o ponto fixo é enter que é o ponto de interseção entre os gráficos de y = x e y = 1 + x. O comando 1:0.02:4; gera um vetor x conto os número de 1 a 4 em passos de 0, 02. O comando y1 = x; y2 = sqrt(1+x); plot(x,y1,' ',x,y2,' ',phi,phi,'o') produz uma figura com três componentes. Os primeiros dois componentes são gráficos de x e x + 1. O argumento - diz à função plot para desenhar linhas sólidas. O último componente do gráfico é um ponto onde ambas as coordenadas são iguais à φ. O argumento o diz à função plot para desenhar um círculo. Figure 1: Ponto fixo em φ = 1, 6180. A Razão Áurea aparece em diversos lugares na matemática e
18 experimentos com matlab um dos casos mais comuns é o Retângulo de Ouro, que tem a propriedade de removo um quadrado do retângulo, sobra um retângulo menor, tal quer a proporção entre os lados permanece a mesma. Considerando que um dos lados é unitário e chamando o outro lado de φ, temos: 1 φ = φ 1 1 Multiplicando ambos os lados por φ, obtemos a mesma equação quadrática utilizada para calcular o ponto fixo: φ 2 φ 1 = 0 Utilizar a tecla seta para cima pra executar um comando muitos vezes é uma solução simples, mas existem construções especiais para executarmos comandos múltiplas vezes, so os principais os laços while e for. Um laço for executa um bloco de código um número determinado de vezes 3 for k = 1:31 sqrt(1 + x) Esse código gera 32 linhas de saída, uma para a primeira atribuição e uma para cada execução do laço. Um laço while executa um bloco de código um número desconhecido de vezes. O término do laço é controlado por uma expressão lógica, que gera valores true (verdadeiro) ou false (falso). Abaixo está o código para o cálculo do ponto fixo utilizando o while: 3 while x ~= sqrt(1+x) sqrt(1+x) Esse código gera as mesmas 32 linhas do código utilizando o for, mas ele apresenta dois problemas. O primeiro possível problema é a condição de parada. A expressão sqrt(1+x) é a forma de escrever x = 1 + x. Utilizando aritmética exata, os dois lados da equação nunca iriam se igualar e o laço continuaria executando indefinidamente, porém, para economizar processamento e memória, o MATLAB utiliza aritmética de ponto flutuante e eventualmente o programa encontra valores para x e sqrt(1+x) iguais. A segunda crítica que pode ser aplicada a esse programa é que ele é ineficiente, visto que calcula sqrt(1+x) duas vezes para cada iteração do laço. Uma versão mais complicada, utilizando o while, que resolve os problemas citados seria:
iteração e pontos fixos 19 3 y = 0; while abs(x y) > eps(x) y = x; sqrt(1+x) O ponto e vírgula (;) no fim da atribuição à variável y indica que o resultado da operação não deve ser mostrado na tela. A quantidade eps(x) é o espaço de números de ponto flutuantes próximos de x. Números Números são formados dos algarismos de 0 a 9, um ponto decimal (opcional), um sinal + ou, a letra e seguida de um valor inteiro para representar uma potência de 10 e opcionalmente, as letras i ou j para representar a parte imaginária de um número complexo. O MATLAB também conhece o valor de π. A seguir estão alguns números: 42 9.6397238 6.0221415e23 3+4i pi Atribuições e Nomes de Variáveis Um comando de atribuição consiste de um nome, um sinal = e um número. O nome de uma variável, função ou comando é composto por uma letra seguida de um número qualquer de letras (maiúsculas ou minúsculas) algarismos e traços baixos. 42 phi = (1+sqrt(5))/2 Avogadros_constant = 6.0221415e23 camelcasecomplexnumber = 3+4i Expressões A potência é denotada por ˆ e tem precedência sobre todas as operações aritméticas. Multiplicação e divisão são representados por e / e tem precedência sobre adição e subtração. As operações de adição e subtração são denotadas por + e. Operações com a mesma precedência são avaliadas da esquerda para a direita. Expressões entre parêntesis são avaliada primeiro.
20 experimentos com matlab 3*4 + 5*6 3 * 4+5 * 6 2*(3 + 4)*3 2^4 + 10*29/5 3\126 52 8 2 Todas essas expressões geram um número muito importante. Porque esse número é importante? Exercícios Os exercícios devem ser enviados por e-mail em um documento pdf com o código utilizado em cada exercício e uma análise escrita de cada solução 1. Use o MATLAB para calcular cada uma das seguintes expressões matemáticas: (a) 43 2 (b) 4 (32 ) (c) (4 3 ) 2 (d) sen(1) (e) 2 4/3 (f) 4 32 (g) cos( π 3 ) 2. Escreva um comando no MATLAB que converta temperatura em Fahrenheit, f, para Celsius, c. c = alguma coisa envolvo c 3. O que é maior, π φ ou φ π? 4. Verifique que a razão áurea é um ponto fixo para cada uma das seguintes equações: (a) φ = 1 φ 1 (b) φ = 1 φ + 1 5. Escreva uma expressão matemática para a quantidade aproximada pelo seguinte programa (dica: é um somatório): s = 0; t = Inf; n = 0; while s ~= t n = n+1;
iteração e pontos fixos 21 s t = s; s = s + 1/n^4; 6. Podemos plotar funções no MATLAB. Para plotarmos o gráfico da função f = @(x) tan(sin(x)) sin(tan(x)) Onde o símbolo @ indica a criação de um função. O gráfico dessa função pode ser obtido utilizando: ezplot(f,[ pi,pi]) Varie n no código abaixo para ou valores 10, 100, 1000 e 10000 e indique a diferença observada. pi*( 2:1/n:2); comet(x,f(x))