problema con 1 ejercicio

Agrupa todas las consultas sobre los lenguajes de programacion como C, C++, Python, Java ...

problema con 1 ejercicio

Notapor maier91 » Dom Dic 12, 2010 6:02 pm

tENGO que escibir un programa en python iterativo que aproxime el valor (m)*1/2, para un valor de m introducido
por el usuario, mediante el cálculo de las raíces de la función f(x) = x2 .. m utilizando
el método de Newton-Raphson. El punto de partida será x0 = 1 y el número de iteraciones a
realizar 5. sabiendo que:
mcd(a,b)=mcd(b,a%b)
Modifica el programa para que el número de iteraciones que se realicen sean las necesarias
para asegurar que el resultado en una iteración es muy similar al de la iteración anterior. Entenderemos
que dos resultados son muy similares entre sí, si se cumple jxn ..xn..1j < 0;000001.
Utiliza la función abs() de python para calcular el valor absoluto. ESto es lo q hecho pero no me sale si alguien me puede ayudar

Código: Seleccionar todo
def raiz(m):
       
        n=1
        x=1
       
        while n<=inter:
            y=x-(((x**2)-m)/(2*x))
            y=x
            n=n+1
        return(x)   

    print("Vamos a aproximar el valor de la raiz de un numero cualquiera utilizando el metodo de newton-rapshon")
    m=float(input("Introduce el valor que quires aproximar"))
    inter=int(input("Introduce el numero de interacciones que quieres realizar"))
    print("El resultado es")
    print(raiz(m))
maier91
 
Mensajes: 6
Registrado: Dom Dic 12, 2010 5:58 pm

Re: problema con 1 ejercicio

Notapor kaiser » Dom Dic 12, 2010 7:51 pm

Tu único problema es que dentro del bucle while has hecho y=x en lugar de x=y. Aquí te dejo mi código (que es un poco más compacto) para el primer apartado del ejercicio. Intenta hacer tu el segundo, que lo bonito de programar es pensar.

Código: Seleccionar todo
def raiz(m):
   x = 1.0
   for j in range(1, 6):
      x = x -(((x**2)-m)/(2*x))
   return x

sol = raiz(int(raw_input("Introduzca el número cuya raíz desea aproximar: ")))
print "El resultado es: ", sol
De la API al IDE y del IDE a la API.
Avatar de Usuario
kaiser
 
Mensajes: 121
Registrado: Mié Nov 24, 2010 7:47 pm
Ubicación: Madrid (España)

Re: problema con 1 ejercicio

Notapor maier91 » Dom Dic 12, 2010 8:13 pm

gracias por resolverme el problema, la parte deabajo podria ser algo asi o voy muy desencaminada:

Código: Seleccionar todo
def aproximar(m):
    x=1
    y=0
    n=1
    while abs(x-y)<0.00001:
        y=x-(((x**2)-m)/(2*x))
        x=y
        n=n+1
       
    return(n)

m=float(input("Introduce el valor que quires aproximar"))
print("El resultado es:",aproximar(m))
maier91
 
Mensajes: 6
Registrado: Dom Dic 12, 2010 5:58 pm

Re: problema con 1 ejercicio

Notapor kaiser » Dom Dic 12, 2010 8:52 pm

Ah que eres una chica, haber empezado por ahí, si quieres te doy clases particulares de programación o lo que sea... buff no me hagas caso, que es que en telemática nos faltan muchas chicas xDD.

Vas bastante bien encaminada solo que:

- Te falta un 0 en 0.00001, sería 0.000001 según el enunciado.
- El while sería > 0.000001, no <.
- Tienes que retornar x no n.
- Puedes borrar todas las n que usas.

Te dan una pista del mcd, que todavía no se para que sirve en el código, asi que no sé si habrá que implementar algo del mcd en el código o no. Ya lo miraré con más detenimiento.

Un Saludo!
De la API al IDE y del IDE a la API.
Avatar de Usuario
kaiser
 
Mensajes: 121
Registrado: Mié Nov 24, 2010 7:47 pm
Ubicación: Madrid (España)

Re: problema con 1 ejercicio

Notapor maier91 » Mié Dic 15, 2010 7:52 pm

XD pues no te diria que no a no de las claees porq ando bastant deseperada con esto de la programacion jajaj. Ya terminado la funcion y ya me sale aqui te lo dejo . gracias por todo


Código: Seleccionar todo
def raiz(m):
   
    n=1
    x=1
   
    while n<=inter:
        y=x-(((x**2)-m)/(2*x))
        x=y
        n=n+1
    return(x)   

print("Vamos a aproximar el valor de la raiz de un numero cualquiera utilizando el metodo de newton-rapshon")
m=float(input("Introduce el valor que quires aproximar"))
inter=int(input("Introduce el numero de interacciones que quieres realizar"))
print("El resultado es")
print(raiz(m))


def aproximar(m):
    x=1
    dif=100
   
    while dif>0.000001:
       
        y=x-(((x**2)-m)/(2*x))
        x=y
        dif=abs(x-y)
       
   
       
    return(x)

m=float(input("Introduce el valor que quires aproximar"))
print("El resultado es:",aproximar(m))

maier91
 
Mensajes: 6
Registrado: Dom Dic 12, 2010 5:58 pm

Re: problema con 1 ejercicio

Notapor kaiser » Mié Dic 15, 2010 8:25 pm

Las clases particulares España - América van a ser un poco complicadas xD, pero aquí estamos en el foro para lo que quieras, así que no dudes en preguntar. De hecho creo que tu código no es correcto ya que si te fijas haces lo siguiente:

Código: Seleccionar todo
while dif>0.000001:
       
        y=x-(((x**2)-m)/(2*x))
        x=y
        dif=abs(x-y)


es decir primero haces x=y y luego restas x-y, por lo que el resultado siempre va a ser 0 y el while solo se ejecutará una vez, mejor haz la asignación x=y después de calcular dif:

Código: Seleccionar todo
def aproximar(m):
    x = 1.0
    dif = 1
    while dif > 0.000001:
        y = x-(((x**2)-m)/(2*x))
        dif = abs(x-y)
        x = y
    return(x)

sol = aproximar(int(raw_input("Introduzca el número cuya raíz desea aproximar: ")))
print "El resultado es:", sol


Un Saludo!
De la API al IDE y del IDE a la API.
Avatar de Usuario
kaiser
 
Mensajes: 121
Registrado: Mié Nov 24, 2010 7:47 pm
Ubicación: Madrid (España)


Volver a Sobre lenguajes de programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado