+ Responder tema
Página 1 de 2 1 2 ÚltimoÚltimo
Resultados 1 al 10 de 17

Tema: Aproximacion de funciones. Haskell.

  1. #1
    Chana
    Guest

    Aproximacion de funciones. Haskell.

    Hola a todos.

    Me piden construir funciones que devuelvan listas infinitas con los términos de las siguientes series:



    Esa sé hacerla:

    Código:
    exp' :: Double -> [Double]
    exp' x = &#91;&#40;1/fact&#40;n&#41;&#41;*&#40;x**n&#41;|n<-&#91;0,1..&#93;&#93;

    El problema lo tengo con esta:


  2. #2
    Chana
    Guest

    Aproximacion de funciones. Haskell.

    He escrito esto:

    Código:
    senn &#58;&#58; Double -> &#91;Double&#93;
    senn x = &#91;&#40;&#40;-1&#41;**&#40; &#91;1, 3..&#93;!!n&#41;&#41;*&#40;1/fact&#40;n&#41;&#41;*&#40;x**&#40;n&#41;&#41;|n<-&#91;1, 3..&#93;&#93;
    Pero no compila.

    Bueno, como alternativa podría crear dos listas, una con los términos positivos y otra con los términos negativos. Luego se unen convenientemente y problema zanjado, pero quisiera saber si alguien puede ayudarme con ese lío que tengo de exponentes.

    Creo que el problema va a ser que (-1) es negativo.
    El operador (^) parece que podría arreglarme el problema, sin embargo no me compila si lo pongo.



    Saludos, y felices fiestas.

  3. #3
    Senior Member luis esc es una joya en bruto luis esc es una joya en bruto luis esc es una joya en bruto luis esc es una joya en bruto Avatar de luis esc
    Fecha de ingreso
    10 ago, 08
    Mensajes
    2,783
    Agradecimientos

    Aproximacion de funciones. Haskell.

    Hola Chana,

    esto lo estas haciendo en Haskell?
    Es que lo digo porque esas dos aproximaciones yo las tengo hechas pero en C++.
    No se si te podria servir de algo.

    Respecto al signo menos que va alternandose con el signo positivo, almenos en C++, cuando construyo el bucle for (porque de hecho esas aproximaciones no son mas que bucles for puesto que conoces el numero de iteraciones, que no son mas que el numero de sumandos que quieres en el desarrollo en serie, y que porsupuesto es finito), lo que hago es que delante de la fraccion (que construyo como cociente de las variables numerador(num) y denominador(den), es decir: num/den ) la multiplico por la variable signo, y justo antes de acabar el bucle pongo:
    signo=(-1)*signo de tal forma que cada vez que vuelve a iterar cambia el signo, y asi va alternandose. Alomejor una idea similar podrias usar en Haskell,no?

    Saludos y suerte
    Lo que interesa de un anillo no es la naturaleza conjuntista d sus elementos sino cómo los relacionan las leyes internas

    El núcleo de la teoría de extensiones algebraicas consiste en obtener informacion de una extension normal K/k a partir del conjunto G(K/k), el grupo de Galois

    Ivorra

  4. #4
    Senior Member Fortuna tiene un aura espectacular Fortuna tiene un aura espectacular
    Fecha de ingreso
    01 ene, 05
    Mensajes
    1,472
    Agradecimientos

    Re: Aproximacion de funciones. Haskell.

    Prueba a hacer esta sustitución

    donde %2 es el resto de dividir por 2.
    Stephen Hawking:No sólo Dios juega definitivamente a los dados sino que además a veces los lanza a donde no podemos verlos.
    http://ciencia.astroseti.org/hawking/dios.php

  5. #5
    Chana
    Guest

    Aproximacion de funciones. Haskell.

    Hola.

    Gracias a ambos por responder.

    Luis, puede que esté yo equivocado (estoy aún aprendiendo Haskell), pero para usar los típicos bucles for, do, while, que usamos en c++ habría que definirlos de alguna forma (vamos, que no vienen predefinidos). Es más, en la programación docente de la asignatura no he visto nada de bucles :\. Principalmente usamos la recursividad. Es algo que a mi me chocaba un poco al principio, pero esto de la programación funcional es bastante diferente a c++.

    La idea tuya es buena, además es la que pretendía usar, pero haciendo uso de las listas por comprensión. Se genera una lista infinita con los sumandos de la serie, y luego sumas cuantos términos quieras de la lista. Lo bueno de Haskell es que como usa la evaluación perezosa, no necesita calcular la lista infinita (lo cual no acabaría nunca) para sumar los "r" términos que le pidamos.

    algo del estilo:

    [(1/fact(n))*(x^n)*(-1)^n] con n tomando los valores impares. En realidad esto me recuerda a un for

    La idea de Fortuna también es buena, no se me había ocurrido. Pero me da un error al compilar :


    Código:
    senn &#58;&#58; Double -> &#91;Double&#93;
    
    senn x = &#91;&#40;&#40;mod &#40;2&#40;n+1&#41;&#41; 2&#41;-1&#41;*&#40;1/fact&#40;n&#41;&#41;*&#40;x**&#40;n&#41;&#41;|n->&#91;1, 3..&#93;&#93;

    el error es: Instances of (Num (Double -> Double), Integral Double) required for definition of senn.

    Bueno, el problema en sí lo tengo solucionado como dije en el primer post, pero tengo curiosidad en saber porque esas soluciones que aportais dan error al compilar.

    Saludos.

  6. #6
    Senior Member Fortuna tiene un aura espectacular Fortuna tiene un aura espectacular
    Fecha de ingreso
    01 ene, 05
    Mensajes
    1,472
    Agradecimientos

    Aproximacion de funciones. Haskell.

    Cita Iniciado por Chana
    La idea de Fortuna también es buena, no se me había ocurrido. Pero me da un error al compilar :


    Código:
    senn &#58;&#58; Double -> &#91;Double&#93;
    
    senn x = &#91;&#40;&#40;mod &#40;2&#40;n+1&#41;&#41; 2&#41;-1&#41;*&#40;1/fact&#40;n&#41;&#41;*&#40;x**&#40;n&#41;&#41;|n->&#91;1, 3..&#93;&#93;

    el error es: Instances of (Num (Double -> Double), Integral Double) required for definition of senn.
    No sería

    senn :: Double -> [Double]

    senn x = [((mod (2*(n+1)) 2)-1)*(1/fact(n))*(x**(n))|n->[1, 3..]]
    Stephen Hawking:No sólo Dios juega definitivamente a los dados sino que además a veces los lanza a donde no podemos verlos.
    http://ciencia.astroseti.org/hawking/dios.php

  7. #7
    Chana
    Guest

    Aproximacion de funciones. Haskell.

    Hola.

    Ups, si es cierto. Pero ahora me sale este error:
    Instance of Integral Double required for definition of senn

  8. #8
    Administrator n0mad será famoso muy pronto n0mad será famoso muy pronto
    Fecha de ingreso
    30 mar, 05
    Mensajes
    6,078
    Agradecimientos

    Aproximacion de funciones. Haskell.

    Cita Iniciado por Chana
    He escrito esto:

    Código:
    senn &#58;&#58; Double -> &#91;Double&#93;
    senn x = &#91;&#40;&#40;-1&#41;**&#40; &#91;1, 3..&#93;!!n&#41;&#41;*&#40;1/fact&#40;n&#41;&#41;*&#40;x**&#40;n&#41;&#41;|n<-&#91;1, 3..&#93;&#93;
    Pero no compila.

    Bueno, como alternativa podría crear dos listas, una con los términos positivos y otra con los términos negativos. Luego se unen convenientemente y problema zanjado, pero quisiera saber si alguien puede ayudarme con ese lío que tengo de exponentes.

    Creo que el problema va a ser que (-1) es negativo.
    El operador (^) parece que podría arreglarme el problema, sin embargo no me compila si lo pongo.



    Saludos, y felices fiestas.
    Llevo con un gripazo y fiebre desde el viernes asi que no tengo mucho tiempo para meterme al foro ??:

    Lo que has escrito ahi, desde luego no es el desarrollo en Taylor de la funcion seno (independientemente de que compile o no). Lo puedes ver comprobando que solo incluye terminos negativos.

    Recuerdo cual es su desarrollo en serie (o al menos una de las formas posibles de escribirlo):



    Asi que podemos escribir el conjunto de sus n primeros terminos como:



    Asi escrito lo tenemos a huevo para pasarlo a Haskell...

    Código:
    sinn x = &#91; &#40;-1&#41;^n * x^&#40;2*n+1&#41;/fact &#40;2*n+1&#41; | n <- &#91;0,1..&#93;&#93;
    NOTA: haskell puede inferir los tipos de lo que escribes!! Puedes ayudar al compilador a optimizar ciertas expresiones o documentar tu propio codigo escribiendolas tu, en este caso tu mismo has usado:

    Código:
    sinn &#58;&#58; Double -> &#91;Double&#93;
    Es una buena practica de programacion ponerle los tipos, pero si estas aprendiendo puedes usar la inferencia de Haskell para aprender que tipos deberias haber puesto.

    Por supuesto todavia queda dar una definicion de fact y aqui esta la clave para resolver los errores de compilacion que tenias:
    Código:
    fact &#58;&#58; &#40;Integral a, Num b&#41; => a -> b
    fact n = fromIntegral &#40;product &#91;1..n&#93;&#41;
    Y que hace fromIntegral? pues lo que dice su nombre coge un numerito que estaba restringido a ser un entero y lo interpreta como cualquier numero dentro de la clase Num (enteros, double, float)

    Las clases en Haskell y los tipos que pertenecen a dichas clases:
    http://www.haskell.org/onlinereport/classes.gif

    Y por que lo tienes que hacer asi? Pues porque:

    Código:
    &#40;/&#41; &#58;&#58; Fractional a => a -> a -> a
    **O puedes usar cualquier de estas otras: http://www.willamette.edu/~fruehr/ha...evolution.html

    "Get out of my way, or I'll pee right through ya!"   Richard Feynman

  9. #9
    Chana
    Guest

    Aproximacion de funciones. Haskell.

    Hola,

    Vaya, que despiste. El tema de los tipos en Haskell me está costando. Muchas gracias por todo.

    Que te mejores.

    Saludos.

  10. #10
    Senior Member Fortuna tiene un aura espectacular Fortuna tiene un aura espectacular
    Fecha de ingreso
    01 ene, 05
    Mensajes
    1,472
    Agradecimientos

    Aproximacion de funciones. Haskell.

    Preparado para que me acuchilleis! :(
    Que lenguaje mas feo ??: y tedioso :x . Además parece que es muy lento.

    ¿Para que sirve?, ¿que le veis?. Sólo he ledido como ventaja, que cuando consigues que compile no comete bugs.
    Stephen Hawking:No sólo Dios juega definitivamente a los dados sino que además a veces los lanza a donde no podemos verlos.
    http://ciencia.astroseti.org/hawking/dios.php

+ Responder tema

Temas similares

  1. Aproximación cuasiestática
    Por Harold4 en el foro Física clásica
    Respuestas: 0
    Último mensaje: 12/06/2011, 17:12
  2. Aproximación semiclásica
    Por neutrino en el foro Física moderna
    Respuestas: 0
    Último mensaje: 03/06/2011, 09:47
  3. Matrices en Haskell
    Por Chana en el foro Informática
    Respuestas: 1
    Último mensaje: 11/02/2009, 14:22
  4. Partes de una lista. Haskell.
    Por Chana en el foro Informática
    Respuestas: 7
    Último mensaje: 06/01/2009, 20:22
  5. Instancias en Haskell.
    Por Chana en el foro Informática
    Respuestas: 6
    Último mensaje: 03/01/2009, 14:59

Etiquetas para este tema

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes