Te juro que llevaba como 2 horas buscando como hacer este método por python y apenas logré encontrarte Fue exactamente lo que estaba buscando y me despejaste muchas dudas Muchísimas gracias
Hola, no. No lo tengo. De hecho por eso lo puse así, el código es totalmente visible para que cualquiera lo copie y modifique (además no es tan largo). No tengo respaldo de nada... y no porque no quisiera, sino porque en menos de un año se me dañaron 3 discos duros :( Feliz día.
Hola. Un problema del punto fijo es que toca despejar una "x" (o la variable incógnita) de alguna manera para formar una expresión de la forma x = g(x) siendo g(x) una función contractiva (creo que ese es el término). Si no lo es, buscar otro despeje... incluso a veces también ensayar varios valores de arranque. Esta parte del método es muy "artesanal", por lo que diría que es muy complicado crear una función que realice todo el proceso de manera automática (supongo que eso es lo que estás buscando). Sin embargo sí es posible crear una función de Python a la que le entregues como parámetros la función g, la variable incógnita (x, t, o la que sea), el valor de arranque y la tolerancia. Eso no tiene mayor complicación, pero te sugiero usar el módulo sympy para un manejo cómodo de las variables y las sustituciones.
import cmath,math,os,sys; def main(): puntofijo(); def puntofijo(): x=float(input('Ingresa valor inicial(X0): ')); tolerancia=float(input('Ingresa el porcentaje de error: ')); N=int(input('Numero maximo de iteraciones: ')); f=input('Ingrese la función f(x), ya despejada g(f(x)): '); er=100; i=0; print('#iteracion\tg(f(x))\t\terror') while(i=tolerancia): temp=x; x=eval(f); er=abs((x-temp)); print("%d\t\t%.4f\t\t%.4f"%(i,x,er)); i+=1; print(" La solucion mas aproximada es: %.4f con un error de %.4f"%(x,er)); if __name__=="__main__": main();
Hola. MIra, le hice unos cambios menores (la mayoría relacionada con aspectos conceptuales... ej. una cosa es la tolerancia y otra es error porcentual, y el error verdadero no teóricamente no se conoce, sino que se estima un aproximado relacionado con el orden de magnitud, etc.) A mi me corrió sin problemas como te lo envío comparando los resultados con los obtenidos con otros programas matemáticos (ten cuidado cómo importas esas librerías, el orden de las iteraciones, etc.). No tengo mucho tiempo ahora para explicar más los detalles, así que ahí va: from math import * def puntofijo(): print('Método del punto fijo: x=g(x)'); x=float(input('Ingresa valor inicial(X0): ')); tolerancia=float(input('Máxima tolerancia permitida: ')); N=int(input('Numero maximo de iteraciones: ')); f=input('Ingrese la función g(x): '); er=100; i=1; print('#iteracion\tg(f(x))\t\terror estimado') while(i=tolerancia): temp=x; x=eval(f); er=abs((x-temp)); print("%d\t\t%.12f\t%.12f"%(i,x,er)); i+=1; print(" La solucion mas aproximada es %s con un error estimado inferior a %s."%(x,tolerancia)); puntofijo() Una nota final: de nada sirve por ejemplo pedir un máximo error permitido de 1e-10 por ejemplo si vas a entregar la solución con apenas 4 decimales. Feliz día.
Te juro que llevaba como 2 horas buscando como hacer este método por python y apenas logré encontrarte
Fue exactamente lo que estaba buscando y me despejaste muchas dudas
Muchísimas gracias
Se supone que el programa debe recibir f(x) y posteriormente calcular g(x).
Tienes el link del código?
Hola, no. No lo tengo. De hecho por eso lo puse así, el código es totalmente visible para que cualquiera lo copie y modifique (además no es tan largo). No tengo respaldo de nada... y no porque no quisiera, sino porque en menos de un año se me dañaron 3 discos duros :(
Feliz día.
como lo hago para cualquier función como lo haría????
Hola. Un problema del punto fijo es que toca despejar una "x" (o la variable incógnita) de alguna manera para formar una expresión de la forma x = g(x) siendo g(x) una función contractiva (creo que ese es el término). Si no lo es, buscar otro despeje... incluso a veces también ensayar varios valores de arranque. Esta parte del método es muy "artesanal", por lo que diría que es muy complicado crear una función que realice todo el proceso de manera automática (supongo que eso es lo que estás buscando). Sin embargo sí es posible crear una función de Python a la que le entregues como parámetros la función g, la variable incógnita (x, t, o la que sea), el valor de arranque y la tolerancia. Eso no tiene mayor complicación, pero te sugiero usar el módulo sympy para un manejo cómodo de las variables y las sustituciones.
pero si ya digita la función despejada.yo pido la función despejada y me escribe 2x el x no me lo esta leyendo solo me lee. sabes q podria hacer hay
import cmath,math,os,sys;
def main():
puntofijo();
def puntofijo():
x=float(input('Ingresa valor inicial(X0): '));
tolerancia=float(input('Ingresa el porcentaje de error: '));
N=int(input('Numero maximo de iteraciones: '));
f=input('Ingrese la función f(x), ya despejada g(f(x)): ');
er=100;
i=0;
print('#iteracion\tg(f(x))\t\terror')
while(i=tolerancia):
temp=x;
x=eval(f);
er=abs((x-temp));
print("%d\t\t%.4f\t\t%.4f"%(i,x,er));
i+=1;
print("
La solucion mas aproximada es: %.4f con un error de %.4f"%(x,er));
if __name__=="__main__":
main();
Hola. MIra, le hice unos cambios menores (la mayoría relacionada con aspectos conceptuales... ej. una cosa es la tolerancia y otra es error porcentual, y el error verdadero no teóricamente no se conoce, sino que se estima un aproximado relacionado con el orden de magnitud, etc.) A mi me corrió sin problemas como te lo envío comparando los resultados con los obtenidos con otros programas matemáticos (ten cuidado cómo importas esas librerías, el orden de las iteraciones, etc.). No tengo mucho tiempo ahora para explicar más los detalles, así que ahí va:
from math import *
def puntofijo():
print('Método del punto fijo: x=g(x)');
x=float(input('Ingresa valor inicial(X0): '));
tolerancia=float(input('Máxima tolerancia permitida: '));
N=int(input('Numero maximo de iteraciones: '));
f=input('Ingrese la función g(x): ');
er=100;
i=1;
print('#iteracion\tg(f(x))\t\terror estimado')
while(i=tolerancia):
temp=x; x=eval(f);
er=abs((x-temp));
print("%d\t\t%.12f\t%.12f"%(i,x,er));
i+=1;
print("
La solucion mas aproximada es %s con un error estimado inferior a %s."%(x,tolerancia));
puntofijo()
Una nota final: de nada sirve por ejemplo pedir un máximo error permitido de 1e-10 por ejemplo si vas a entregar la solución con apenas 4 decimales.
Feliz día.
Perdona la redacción... en serio escribí todo a las carreras. Ahora me percato de varios errores en mi explicación.