Calculando seno(x)/x com o interpretador Hall. Problema Seja, por exemplo, calcular o valor do limite fundamental f(x)=sen(x)/x quando x tende a zero. Considerações Fazendo-se a substituição do valor 0 (zero) na expressão de f(x), temos f(x) = sen(0)/0 e que resulta em uma expressão 0/0 !!! A questão então é, qual será o valor de f(x) quando x -> 0 ? Vamos usar o interpretador Hall para nos ajudar a resolver esse problema. Solução A solução consistirá então em fazermos x se aproximar do valor 0 e calcular o valor de f(x) para sabermos o que está acontecendo com a função. Há duas formas de fazer x tender a 0: ● ● Podemos partir de valores que são maiores que 0 e ir decrementando até valores muito próximos de 0. Note que, x não poderá assumir o valor 0 pois em nossas considerações anteriores vimos que um valor 0 (zero) para x nos leva a expressão 0/0. Esse processo é conhecido como “limite à direita”. Podemos partir de valores que são menores que 0 e ir incrementando até valores muito próximos de 0. Note que, x não poderá assumir o valor 0 pois em nossas considerações anteriores vimos que um valor 0 (zero) para x nos leva a expressão 0/0. Esse processo é conhecido como “limite à esquerda”. O algoritmo Bom, iremos desenvolver os dois algoritmos e analisar os resultados gerados. Há um teorema do cálculo que diz que: “se os limites a esquerda e a direita existirem e forem iguais, então o limite da função existe e é dado pelo valor encontrado”. Abaixo está o programa que faz x tender a 0 pela direita, isto é, partimos de valores que são maiores que 0 e decrementamos até se aproximar de 0. Aqui cabe uma pergunta, Que valor de decremento utilizar ? Em nosso exemplo utilizamos 15. A resposta a essa pergunta envolve considerações de precisão nos resultados mas, não é o nosso caso neste exemplo simples. Veja o código abaixo: Interpretador Hall 1 algoritmo() { real L; real x; // o valor do limite // a variavel independente // calcula o valor do seno passando o arco x em graus // de 180 a 15, de 15 em 15 para (x:=180 ate 10 decr 15) { L := seno(x,g) / (x*3.141592/180.0); escreva("para x = ",x," => f(x) = ",L); } } Obs: Veja no código acima que a chamada à função seno, L := seno(x,g), é realizada com dois argumentos: o valor do ângulo e a unidade de medida. Tradicionalmente, os ângulos são medidos em graus, radianos e grados. A letra 'g' como argumento da função especifica que o ângulo x está sendo passado em graus. Para se passar um ângulo em radianos deve-se usar a letra 'r'. A opção para grados não está disponível. Abaixo pode-se ver a tela de execução do algoritmo acima: (a tela abaixo é de uma execução do interpretador hall no ambiente do FreeBSD. A execução em ambiente windows apresentará o mesmo resultado). Partimos de um ângulo de 180 graus e caminhamos até 15, decrementando de 15 em 15. Observe como o valor de f(x) cresce de 0 até um valor que é próximo de 1 quando o valor de x atinge 15 graus. Interpretador Hall 2 Poderemos aproximar mais ainda os nossos cálculos e verificar o que está acontecendo. Vamos reescrever o mesmo algoritmo, fazendo agora x variar de 1 em 1 partindo do valor 10 graus. Veja abaixo o algoritmo... algoritmo() { real L; real x; // o valor do limite // a variavel independente // calcula o valor do seno passando o arco x em graus // de 10 a 1, de 1 em 1 } para (x:=10 ate 1 decr 1) { L := seno(x,g) / (x*3.141592/180.0); escreva("para x = ",x," => f(x) = ",L); } O resultado de execução do algoritmo acima pode ser vista na figura abaixo, veja... Interpretador Hall 3 Veja que o valor da função f(x) está cada vez mais próximo de 1 à medida que o valor de x tende a 0. Vamos fazer um terceiro algoritmo e ver o que acontece. Nesse terceiro programa vamos fazer a variável x começar de 1 e decrescer até atingir o valor 0.1, decrescendo de 0.1 em 0.1. Veja o algoritmo abaixo: algoritmo() { real L; real x; // o valor do limite // a variavel independente // calcula o valor do seno passando o arco x em graus // de 1 a 0.1, de 0.1 em 0.1 para (x:=1 ate 0.1 decr 0.1) { L := seno(x,g) / (x*3.141592/180.0); escreva("para x = ",x," => f(x) = ",L); } } Abaixo está a tela de execução do algoritmo acima, acompanhe... Interpretador Hall 4 Bom, é fácil observar como cada vez mais o valor da função f(x) se aproxima de 1 quando x tende a 0. Em nosso exemplo, pode-se até observar que a função atingiu o valor 1 para x igual a 0.1. Naturalmente que, na verdade esse valor está vinculado à capacidade de realizar cálculos do computador assim como ao tipo de dado que foi utilizado no programa para se modelar o problema. Obviamente que, se solicitarmos mais casas decimais nos cálculos, o valor de f(x) passará a ser mais exato e você poderá observar que, na verdade, o valor de f(x) quando x for 0.1 será alguma coisa como 0.999999..., diferentemente de 1 como apresentado acima. Isso acontece pois, nos computadores usamos valores discretos ao passo que, matemáticamente falando, as funções são definidas e estudadas no domínio dos números reais, isto é, em um conjunto com valores contínuos. E, claro, esse processo pode-se seguir indefinidamente...mas, até quando ? O que ou quando parar ? A precisão definida para os resultados é o juiz e, é ela que dirá quando o resultado fornecido pelo programa está correto. Poderíamos, por exemplo, estipular que, gostaríamos de valores para f(x) com dez casas decimais ou uma precisão de 0.0000001. Muito bem. Nos exercícios acima fizemos os programas com limite à direita, isto é, com valores que tendem a 0 através de valores que são maiores que 0. Faça você agora, os mesmos algoritmos com limite à esquerda e compare os resultados. Será que f(x) também tenderá a 1 ? Bom trabalho ! [email protected] Interpretador Hall 5