CÓDIGO Método de PUNTO FIJO en PYTHON

Hallar las raíces de ecuaciones algebraica y trascendentes usando el método de la punto fijo ,código con Python.
imagen-libro

MÉTODO DE PUNTO FIJO

Sea la ecuación $f(x)=0$, donde $x$ este del lado izquierdo de la ecuación:
$x=g(x)$                                                              $(1)$
Esta transformación se realiza mediante operaciones algebraicas o simplemente sumando x a cada lado de la ecuación original.
La ecuación $(1)$ proporciona una formula para predecir un nuevo valor de $x$ en función del valor anterior de $x$.
De esta manera, dado un valor inicial para la raíz $x_i$ la ecuacion $(1)$ se utiliza para obtener una nueva aproximación $x_{i+1}$, expresada por la formula iterativa.
$x_{i+1}$=g(x_i)$
para decidir cuando finaliza el método el $e_a$:
$e_a=|\frac{x_{i+1}-x_i}{x_{i+1}}|100%}$
debe cumplir:
$e_a<e_s$ 
$e_s$ es la tolerancia estimada.

CODIGO:

# -*- coding: utf-8 -*-
"""
Created on Fri May  8 23:16:21 2020

@author: ygyel
"""
import sympy as sp
import numpy as np
import pandas as pd
x=sp.symbols('x')

def funcion(ecua='x+2'):
    global x
    return sp.sympify(ecua)
""" ecuacion tipo: string
    x_0: valor inicial tipo:float
    e_s tolerancia estimada tipo:float"""
def MetodoPF(ecuacion,x_0,es):
    global x
    ecuacion=funcion(ecuacion)+x #tal q sea g(x)
    ea=100
    x_r=x_0 #x_i+1
    iteracion=0 #inicio del contador en 0
    while ea>es:
        x_anterior=x_r# x_anterior = x_i
        x_r=ecuacion.evalf(subs={x:x_anterior})#xr=g(x_anterior)
        iteracion+=1#contador incrementado en 1
        if x_r !=0:
            ea=abs((x_r-x_anterior)/x_r)*100
    return x_r
#iniamos el programa con lo siguiente parametros
a=MetodoPF('exp(-x)-x',0,0.01)
print(a)

RESULTADO


raiz aproximada:  0.567157044001298
los resultados se debe verificar sustituyendo la raiz aproximada en la ecuacion original y determinar si el resultado se aproxima a 0.
>> comprobacion=funcion('exp(-x)-x')
>>>comprobacion.evalf(subs={x:a})
>>>-2.15537950191144e-5
con lo q si comprobamos q la raiz_aproximada evaluada en la funcion si se aproxima a cero.

Comentarios

Publicar un comentario