############################################################################## # FÍSICA COMPUTACIONAL II # # por # # Francisco Carlos Lavarda # ############################################################################## Tutorial de MAXIMA - Raízes =========================== OBJETIVO: OBTER AS RAIZES DE FUNÇÕES REAIS PARA QUALQUER TIPO DE FUNÇÃO VIA O MÉTODO DA BISSECÇÃO ------------------------------------------------------ INTERPOLATE ----------- ** Objetivo: achar a primeira raiz de uma função num dado intervalo [a,b]. Condições: f(a) e f(b) devem possuir sinais contrários. ** Prática: achar a primeira raiz de sin(x)-x/2 no intervalo [0,10]. ** Definir uma função: f(x):=sin(x)-x/2.0; ** Por precaução, verificar se há pelo menos uma raiz no intervalo. 1- Obter o valor de f(0): f(0); 2- Obter o valor de f(10): f(10); Os dois valores devem ser de sinais opostos. ** Obter a primeira raiz do intervalo: interpolate(f(x),x,0,10); ** Obter a segunda raiz do intervalo (observe que a agora é maior que o valor da primeira raiz): interpolate(f(x),x,0.1,10); FIND_ROOT (DVJ) --------- ** Aparentemente a função interpolate está fora de uso em algumas versões do Maxima, nas quais a função find_root desempenha o mesmo papel sendo usada da mesma maneira. É só trocar a palavra "interpolate" por "find_root". PARA QUALQUER FUNÇÃO VIA O MÉTODO DE NEWTON-RAPHSON --------------------------------------------------- NEWTON(f(x),x,x0,eps) --------------------- Objetivo: achar a raiz de f(x) mais próxima de x0 sendo que |f(raiz)|0. ** Prática: usando a mesma função já definida, vamos procurar suas raízes. ** Primeiro passo: esta função é preciso carregar antes de usar: (RMR & CAC) load(newton1); ** Procurar pela raiz mais próxima de x=0 com precisão de 10**-5: newton(f(x),x,0,0.00001); ** Procurar pela raiz mais próxima de x=1 com precisão de 10**-5 (isto deve dar a segunda raiz encontrada com interpolate): newton(f(x),x,1,0.00001); GRÁFICOS -------- ** Confira pelo gráfico da função com a qual estamos trabalhando se achamos as suas raízes (somente para as versões gráficas do Maxima): plot2d(f(x),[x,-1,11]); CASO ESPECIAL: POLINÔMIOS ------------------------- ALLROOTS -------- ** Use a função ALLROOTS para achar de uma só vez, toda as raízes de um polinômio qualquer. Para isto, escreva o polinômio em questão como argumento da função. Por exemplo, para obter as raízes de x**2-2: allroots(x**2-2); REALROOTS --------- ** Use a função REALROOTS para achar de uma só vez, toda as raízes REAIS de um polinômio qualquer. Para isto, escreva o polinômio em questão como argumento da função. Por exemplo, para obter as raízes de x**2-2: (DVJ) realroots(x**2-2); PARA QUALQUER CASO: ------------------- SOLVE ----- ** A função SOLVE pode ser usada também, dando todas as raízes da função. Escreve-se como argumento de SOLVE a função igualada a zero: solve(x^2-5*x+6=0,x); Não recomendei antes pois não descobri como obrigar a função a calcular numericamente as raizes em casos como sin(x)-x/2=0 em que apresenta-se a solução analítica. Tente resolver este pepino e me diga qual é a solução!