elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting (Moderador: Eleкtro)
| | |-+  Método de Newton
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Método de Newton  (Leído 398 veces)
estudiante_1

Desconectado Desconectado

Mensajes: 47


Ver Perfil
Método de Newton
« en: 25 Abril 2017, 17:41 »

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:
 
 
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 Desconectado

Mensajes: 923


No es lo mismo conocer el camino que recorrelo.


Ver Perfil
Re: Método de Newton
« Respuesta #1 en: 25 Abril 2017, 19:58 »

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 Desconectado

Mensajes: 47


Ver Perfil
Re: Método de Newton
« Respuesta #2 en: 26 Abril 2017, 16:00 »

Hola, perdona es que es mi primera vez en python
Estoy usando juypyter notebook python 3.
Tengo ahora mismo lo siguiente:

 
Código:
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.
 
Código:
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 Desconectado

Mensajes: 47


Ver Perfil
Re: Método de Newton
« Respuesta #3 en: 26 Abril 2017, 16:04 »

E intentándolo ahora mismo de otra forma llego a que .

 
Código:
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 *
Código:
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
Código:
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.

 
Código:
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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines