Autor
|
Tema: Método de Newton (Leído 3,091 veces)
|
estudiante_1
Desconectado
Mensajes: 47
|
Me da error el siguiente código. Lo que quiero es mostrar una especie de lista con Iteracion 1, valor de la aproximación x etc este es el código: def f(x): return exp(x)-(5* x**2)-5 def df(x): return exp(x)-(10* x)
def newton(f, df, x0, tol): """Calcula una raíz de $f(x)=0$ mediante el método de Newton, a partir de x0""" max_iters = 100 iter = 0 while iter<max_iters: x1 = x0-f(x0)/df(x0) # Punto fijo en Newton if abs(x1-x0) < tol: #hacemos iteraciones hasta que las dferencias consecutivas sea tol return x1 , iter #En la función devolvemos la lista con los dos valores x0 = x1 iter = iter+1 print ("Error de convergencia") x = newton(f, df, x0=7, tol=1e-11) print (x)
c= 1
for iter in range(1,99): x1= x0-f(x0)/df(x0) x0= x1 print("iteracion",c,",raiz aproximada,",x0) c= c+1
|
|
|
En línea
|
|
|
|
tincopasan
Desconectado
Mensajes: 1.286
No es lo mismo conocer el camino que recorrerlo.
|
te diré varias cosas: 1) voy a suponer que es python 3.x ya que en ningún lugar lo dice 2)no muestras cual error te da, así que lo que sigue es por simple observación 3)hay que declarar el código utf-8 4)hay que importar el modulo math 5)hay graves errores de indentación ya que hay variables declaradas fuera de la función 5)no creo que alguien adivine cual es el problema sino sos más claro
|
|
|
En línea
|
|
|
|
estudiante_1
Desconectado
Mensajes: 47
|
Hola, perdona es que es mi primera vez en python Estoy usando juypyter notebook python 3. Tengo ahora mismo lo siguiente: from __future__ import division, print_function # Sólo para Python 2 import numpy as np import matplotlib.pyplot as plt %matplotlib inline from pylab import *
def f(x): return exp(x)-(5* x**2)-5 def df(x): return exp(x)-(10* x)
def newton(f, df, x0, tol): """Calcula una raíz de $f(x)=0$ mediante el método de Newton, a partir de x0""" max_iters = 100 iter = 0 while iter<max_iters: x1 = x0-f(x0)/df(x0) # Punto fijo en Newton if abs(x1-x0) < tol: #hacemos iteraciones hasta que las dferencias consecutivas sea tol return x1 , iter #En la función devolvemos la lista con los dos valores x0 = x1 iter = iter+1 print ("Error de convergencia") x = newton(f, df, x0=7, tol=1e-11) print (x)
y el error es el siguiente. NameError Traceback (most recent call last) <ipython-input-4-89b96b21ad01> in <module>() 15 print ("Error de convergencia") 16 ---> 17 x = newton(f, df, x0=7, tol=1e-11) 18 print (x)
<ipython-input-4-89b96b21ad01> in newton(f, df, x0, tol) 8 iter = 0 9 while iter<max_iters: ---> 10 x1 = x0-f(x0)/df(x0) # Punto fijo en Newton 11 if abs(x1-x0) < tol: #hacemos iteraciones hasta que las dferencias consecutivas sea tol 12 return x1 , iter #En la función devolvemos la lista con los dos valores
<ipython-input-4-89b96b21ad01> in f(x) ----> 1 def f(x): return exp(x)-(5* x**2)-5 2 def df(x): return exp(x)-(10* x) 3 4 def newton(f, df, x0, tol): 5 """Calcula una raíz de $f(x)=0$ mediante el método de Newton, a partir de x0"""
NameError: name 'exp' is not defined
In [ ]:
No sé como declarar el utf-8 ni importar el módulo math.
|
|
|
En línea
|
|
|
|
estudiante_1
Desconectado
Mensajes: 47
|
E intentándolo ahora mismo de otra forma llego a que . from __future__ import division, print_function # Sólo para Python 2 import numpy as np import matplotlib.pyplot as plt %matplotlib inline from pylab import * def newton(f, df, x0, tol=1e-11, maxiter=100): """Cálculo de una solución de $f(x)=0$ mediante el método de Newton. Argumentos: f: Función considerada df: Función derivada de f x0 : Estimación inicial tol: Tolerancia (diferencia entre dos iteraciones sucesivas) maxiter: Número máximo de iteraciones admitidas Valores devueltos: (x, niter) con x: Aproximación del punto fijo niter: Número de iteraciones realizadas """ k = 0 error = tol while k<maxiter and error >= tol: x1 = x0-f(x0)/df(x0) # Iteración de punto fijo error = abs(x1-x0) x0 = x1 # Preparamos la siguiente iteración k = k+1 # Si se llegó al número máximo de iteraciones, lanzar una excepción if k==maxiter: raise ValueError("Error de convergencia!") # Si todo fue bien, devolvemos la solución y el número de iteraciones return x1, k x0 = 7 # Inicialización sugerida por la regla de Fourier x, niter = newton(f,df,x0) print("Aproximación por el m. de Newton:", x) print("Número de iteraciones:", niter) print("Resíduo: |f(x)| = %1.16f" % abs(f(x))) OBviamente con su respectivos errores. TypeError Traceback (most recent call last) <ipython-input-10-6e031eb10445> in <module>() 1 x0 = 7 # Inicialización sugerida por la regla de Fourier ----> 2 x, niter = newton(f,df,x0) 3 print("Aproximación por el m. de Newton:", x) 4 print("Número de iteraciones:", niter) 5 print("Resíduo: |f(x)| = %1.16f" % abs(f(x)))
<ipython-input-7-ffca3434fb25> in newton(f, df, x0, tol, maxiter) 15 error = tol 16 while k<maxiter and error >= tol: ---> 17 x1 = x0-f(x0)/df(x0) # Iteración de punto fijo 18 error = abs(x1-x0) 19 x0 = x1 # Preparamos la siguiente iteración
mtrand.pyx in mtrand.RandomState.f (numpy\random\mtrand\mtrand.c:22229)()
TypeError: f() takes at least 2 positional arguments (1 given)
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Metodos Numericos (Metodo Biserccion, falsa posicion,Newton Raphson,Secante)
Java
|
GaLaN GaLaNaSo 3000
|
1
|
18,592
|
11 Abril 2012, 05:27 am
por Carlos Luna
|
|
|
Calculador de Binomio de Newton [Python]
Python
|
CaronteGold
|
9
|
21,418
|
17 Febrero 2022, 20:46 pm
por werty2310
|
|
|
metodo de newton rapson para calcular las raices de una funcion con n grado
Programación C/C++
|
kiara_luna
|
1
|
19,287
|
30 Septiembre 2011, 01:45 am
por kiara_luna
|
|
|
Programacion del polinomio de Newton Ayuda!!
Programación C/C++
|
Carlos Luna
|
2
|
6,675
|
5 Abril 2012, 22:17 pm
por Carlos Luna
|
|
|
Metodo Newton-Raphson Error en compilacion
Java
|
Virux23
|
2
|
3,157
|
28 Febrero 2013, 14:03 pm
por Oblivi0n
|
|