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 escolhendo um número qualquer. Insira o número no MATLAB digitando:
x = 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:
x = 3
O MATLAB respode com: x =
3
Podemos agora entrar com o comando: x = 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, sobrescrevendo o valor anterior.
No teclado do seu computador, provavelmente, contém um con-junto 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:
x = sqrt(x + 1)
x = 3 x = 2 x = 1.7321 x = 1.6529 x = 1.6288 x = 1.6213 x = 1.6191 x = 1.6184 x = 1.6181 x = 1.6181 x = 1.6180 x = 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 deci-mais, é 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
x = 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 signifi-cado diferente. A expressão
x =√1+x
é uma equação. Uma locução para essa equação é conhecida como
ponto fixo2. 2A expressão ponto fixo apresenta
sig-nificados diferentes em diversas áreas. Na área de computação numérica, se utiliza quando o número de casas deci-mais após a virgua é fixo, em oposição ao ponto flutuante (float)
A função f(x) =√1+x tem apenas um ponto fixo e a forma mais simples de encontrá-lo é resolvendo a equação quadrática. A raiz positiva da equação quadrática é dada por:
φ= 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 entender o ponto fixo é entender que é o ponto de interseção entre os gráficos de y=x e y=√1+x. O comando x = −1:0.02:4;
gera um vetor x contendo 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.
um dos casos mais comuns é o Retângulo de Ouro, que tem a pro-priedade de removendo um quadrado do retângulo, sobra um retân-gulo 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, sendo os principais os laços whileefor. Um laçoforexecuta um bloco de código um número determinado de vezes
x = 3
for k = 1:31
x = sqrt(1 + x)
end
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çowhileexecuta um bloco de código um número descon-hecido de vezes. O término do laço é controlado por uma expressão lógica, que gera valorestrue(verdadeiro) oufalse(falso). Abaixo está o código para o cálculo do ponto fixo utilizando owhile: x = 3
while x ~= sqrt(1+x)
x = sqrt(1+x)
end
Esse código gera as mesmas 32 linhas do código utilizando ofor, mas ele apresenta dois problemas. O primeiro possível problema é a condição de parada. A expressãox = sqrt(1+x)é a forma de escrever x 6= √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 paraxesqrt(1+x)iguais. A segunda crítica que pode ser aplicada a esse programa é que ele é ineficiente, visto que calculasqrt(1+x)duas vezes para cada iteração do laço. Uma versão mais complicada, utilizando owhile, que resolve os problemas citados seria:
x = 3 y = 0;
while abs(x−y) > eps(x) y = x;
x = sqrt(1+x)
end
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 letraeseguida de um valor inteiro para representar uma potência de 10 e opcionalmente, as letrasi oujpara 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.
x = 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 oper-açõ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 pre-cedência são avaliadas da esquerda para a direita. Expressões entre parêntesis são avaliada primeiro.
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) 432 (b) 4(32) (c) (43)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 envolvendoc 3. O que é maior, πφou φπ?
4. Verifique que a razão áurea é um ponto fixo para cada uma das seguintes equações:
(a) φ= φ−11
(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
t = s;
s = s + 1/n^4;
end
s
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.
x = pi*(−2:1/n:2); comet(x,f(x))