Foros-FIUBA Foros HostingPortal
 FAQ  •  Buscar  •  Wiki  •  Apuntes  •  Planet  •  Mapa  •  Eyeon  •  Chat
Preferencias  •  Grupos de Usuarios
Registrarse  •  Perfil  •  Entrá para ver tus mensajes privados  •  Login
Ver tema siguiente
Ver tema anterior

Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente
Autor Mensaje
Coudet
Nivel 6


Edad: 34
Registrado: 29 Nov 2009
Mensajes: 294

Carrera: Mecánica
argentina.gif
MensajePublicado: Vie Nov 19, 2010 2:35 pm  Asunto:  Duda con valores en simple precisión Responder citandoFin de la PáginaVolver arriba

Buenas, tengo una duda con un ejercicio de pascal: se trata de un programa de pascal que tiene que calcular la derivada por medio de una aproximación de una secante a la función, para eso el usuario ingresa los coeficientes del polinimio y el punto donde quiere calcular la derivada. La cuestión en realidad es que para ese método me hace falta un "error" de aproximación, y esa aproximación, dice el enunciado, "debe ser la óptima para valores almacenados en simple precisión".
En fin, el programa ya lo tenemos prácticamente hecho, puede calcular la derivada y eso, el problema es que no confiamos en lo que pusimos como aproximación y he ahí la duda.
Lo que planteamos en un principio, no sabemos si erróneamente o no, es que por ser en simple precisión está guardado en 8 bits, y pensamos en el número decimal de 8 bits de menor módulo posible, lo cual nos da el 2^(-7) en decimal (0,0078125) pero descreemos que eso esté bien, ¿qué dicen?

_________________
-----

La Biblioteca de Apuntes está formada por y para alumnos de FIUBA, colaboremos entre todos para que resulte lo más útil y completa posible.
http://www.taringa.net/posts/ciencia-educacion/10489413/Biblioteca-de-Apuntes---FIUBA.html

Aquario Género:Masculino Caballo OcultoGalería Personal de CoudetVer perfil de usuarioEnviar mensaje privado
Sebastian Santisi
Administrador Técnico


Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451


argentina.gif
MensajePublicado: Vie Nov 19, 2010 3:04 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Pascal... ¿TurboPascal?; es un compilador de 16bits, ni idea cómo represente.

El estándar para números de punto flotantes es el IEEE-754, ahí los números de simple precisión son de 32 bits.

Acá tenés la representación: http://materias.fi.uba.ar/7502E/ieee.html

No sé en la implementación del compilador que estés usando si se usan esos o alguna cosa propia de Pascal no soportada a nivel hardware.

_________________
Image[tex] ${. \ \ \ \ \ \ \ \ \ .}$ [/tex][tex] ${\Large Usá \LaTeX, no seas foro...}$ [/tex]

Aries Género:Masculino Perro OfflineGalería Personal de Sebastian SantisiVer perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
memovidal10
Nivel 4


Edad: 34
Registrado: 16 Mar 2009
Mensajes: 98

Carrera: Industrial
CARRERA.industrial.gif
MensajePublicado: Vie Nov 19, 2010 3:32 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Es en el FreePascal
Nosotros queremos calcular la derivada de un polinomio de grado 4 por medio de la aproximación secante a la función. Nosotros planteamos [p(x)-p(x+h)]/h
pero como pascal no permite usar limite de h tendiendo a 0, lo que queremos es tomar el valor mas pequeño de h para que la aproximación sea la optima en valores almacenados en simple precisión. Pensamos en darle a H el valor mas pequeño que se pueda almacenar en simple precisión. Es correcto eso? En ese caso, cual es el numero mas pequeño en simple precisión?
Gracias por la respuesta!


Piscis Género:Masculino Caballo OfflineGalería Personal de memovidal10Ver perfil de usuarioEnviar mensaje privado
Sebastian Santisi
Administrador Técnico


Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451


argentina.gif
MensajePublicado: Vie Nov 19, 2010 3:40 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

La parte numérica, ni idea, toco de oido.

Del enlace que te pasé, el simple más pequeño es [tex]2^{-127}[/tex]... de todos modos, tomá en cuenta que el épsilon entre dos números varía según entre qué número y qué número esté (o sea, cuanto más grande lo que representás, más grande la distancia entre valores distintos).

Si sabés de qué orden es el exponente del simple en los valores con los que estás operando, del tamaño de la mantisa deberías poder obtener cuánto vale el épsilon para ese rango.

_________________
Image[tex] ${. \ \ \ \ \ \ \ \ \ .}$ [/tex][tex] ${\Large Usá \LaTeX, no seas foro...}$ [/tex]

Aries Género:Masculino Perro OfflineGalería Personal de Sebastian SantisiVer perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
MirianQ
Nivel 8


Edad: 35
Registrado: 29 Feb 2008
Mensajes: 675
Ubicación: Siempre desvirtuando... siempre.
Carrera: Electrónica y Informática
CARRERA.informatica.3.jpg
MensajePublicado: Vie Nov 19, 2010 3:42 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

http://sistemas.itlp.edu.mx/tutoriales/pascal/u2_2_5.html

Hay estan los rangos de los ipos de datos en Pascal.

Y yo calculo que esta bien lo que decis de darle a h el valor mas pequeño represntable con ese tipo de dato que usas. Ahora pensa igual que el resultado tambien deberia poder almacenarse en una variable que lo pueda contener. A lo que voy, si usas un real para almacenar el resultado, como es simple precision, fijate que el resultado entre en esa variable. De lo contrario podrias usar doble precision.

Quizas si le das a h un valor tan chico, el resultadpo no te entre en la variable que querias guardar.

_________________
Image

Libra Género:Femenino Dragón OcultoGalería Personal de MirianQVer perfil de usuarioEnviar mensaje privado
memovidal10
Nivel 4


Edad: 34
Registrado: 16 Mar 2009
Mensajes: 98

Carrera: Industrial
CARRERA.industrial.gif
MensajePublicado: Vie Nov 19, 2010 4:06 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Mirian entiendo lo que decis... El enunciado dice que el valor alcanzazo "debe ser el optimo para valores almacenados en simple precisión"... Es eso lo que no termino de entender, como logro que sea el optimo? Tomo el valor mas chico de h? Probe con 1,5E-45 y todas las derivadas que calculo me dan 0...


Piscis Género:Masculino Caballo OfflineGalería Personal de memovidal10Ver perfil de usuarioEnviar mensaje privado
Sebastian Santisi
Administrador Técnico


Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451


argentina.gif
MensajePublicado: Vie Nov 19, 2010 4:21 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

MirianQ escribió:
http://sistemas.itlp.edu.mx/tutoriales/pascal/u2_2_5.html

Hay estan los rangos de los ipos de datos en Pascal.

Eso es de TurboPascal; en FreePascal vale IEEE-754: http://www.freepascal.org/docs-html/prog/progsu144.html

_________________
Image[tex] ${. \ \ \ \ \ \ \ \ \ .}$ [/tex][tex] ${\Large Usá \LaTeX, no seas foro...}$ [/tex]

Aries Género:Masculino Perro OfflineGalería Personal de Sebastian SantisiVer perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
Coudet
Nivel 6


Edad: 34
Registrado: 29 Nov 2009
Mensajes: 294

Carrera: Mecánica
argentina.gif
MensajePublicado: Vie Nov 19, 2010 4:37 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Paso el enunciado en limpio por si no se llega a entender: Realizar un programa que calcule el valor de la derivada de la función AX^4+BX^3+CX^2+DX+E. Por medio de una aproximación de una secante a la función. El usuario debe poder elegir el punto y la aproximación debe ser la óptima para valores almacenados en simple precisión.

Es eso: y sin ánimo de confundir quiero agregar que ya hicimos el programa que calcula las derivadas con el método que pide ahí, pero la aproximación que usamos debe estar mal, esa es la duda, cuál es el "h" mencionado en el mensaje de memo que tendríamos que usar. Mas que nada teniendo en cuenta también que usando h = 1E-38 (valor sacado de la página que linkeó MirianQ) nos da siempre cero la derivada

_________________
-----

La Biblioteca de Apuntes está formada por y para alumnos de FIUBA, colaboremos entre todos para que resulte lo más útil y completa posible.
http://www.taringa.net/posts/ciencia-educacion/10489413/Biblioteca-de-Apuntes---FIUBA.html

Aquario Género:Masculino Caballo OcultoGalería Personal de CoudetVer perfil de usuarioEnviar mensaje privado
Sebastian Santisi
Administrador Técnico


Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451


argentina.gif
MensajePublicado: Vie Nov 19, 2010 4:43 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

El tema es lo que dije sobre el tema de la representación.

Los flotantes funcionan como mantisa y exponente; cuanto más grande el exponente, la mantisa, en valores absolutos rinde menos.

Estás haciendo varias operaciones. Es importante en primer lugar que [tex]x \neq x + h[/tex] y que [tex]p(x) \neq p(x + h)[/tex]. Si esas dos cosas no se cumplen, entonces los dos números son indistinguibles y obviamente te va a dar cero. El problema no es por la h dividiendo, es por la suma y por la evaluación del polinomio.

Tu épsilon depende del tamaño del exponente. El valor más chico que vas a tener para cada exponente es en el que la mantisa sea 1.0000000...0001 (en binario).

_________________
Image[tex] ${. \ \ \ \ \ \ \ \ \ .}$ [/tex][tex] ${\Large Usá \LaTeX, no seas foro...}$ [/tex]

Aries Género:Masculino Perro OfflineGalería Personal de Sebastian SantisiVer perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
Spike Spiegel
Nivel 9


Edad: 36
Registrado: 10 Ago 2007
Mensajes: 1507

Carrera: Informática
blank.gif
MensajePublicado: Vie Nov 19, 2010 4:46 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Es un error numérico llevar h al mínimo posible. Cuando digo numérico, me refiero a lo relacionado con Análisis Numérico.

Cuando te pide que la aproximación sea óptima, te está pidiendo que uses el h que minimice la cota de error, creo.

No sé, me suena extraño/ridículo que pidan cosas así existiendo una materia específica para ver el tema.

_________________
[tex]\mbox{Detrás de todo 'tengo hambre' hay un gran 'comete esta'}[/tex]

Virgo Género:Masculino Gato OfflineGalería Personal de Spike SpiegelVer perfil de usuarioEnviar mensaje privadoEnviar emailVisitar sitio web del usuarioYahoo MessengerMSN Messenger
MirianQ
Nivel 8


Edad: 35
Registrado: 29 Feb 2008
Mensajes: 675
Ubicación: Siempre desvirtuando... siempre.
Carrera: Electrónica y Informática
CARRERA.informatica.3.jpg
MensajePublicado: Vie Nov 19, 2010 4:48 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Que te de cero, lo unico que me dice es que al calcular x y x+h, te esta dando igual... eso se debe a que el h que le estas sumando a x es muy chiquito y no es representable y/o significativo para la operacion matematica. Proba con un h mas o menos grande , un 0.05 y anda bajando hasta que te de algo razonable.

Nosotros en numerico usabamos un h = 0.05 -o de ese orden - , porque si te ibas mas abajo habia errores o cosas locas que no contribuian a la estabilidad del algoritmo (o algo asi, que se yo).

EDIT: uds dos muy universitarios, yo lo explique como maestra jardinera Smile

_________________
Image

Libra Género:Femenino Dragón OcultoGalería Personal de MirianQVer perfil de usuarioEnviar mensaje privado
Sebastian Santisi
Administrador Técnico


Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451


argentina.gif
MensajePublicado: Vie Nov 19, 2010 4:55 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

MirianQ escribió:
Que te de cero, lo unico que me dice es que al calcular x y x+h, te esta dando igual... eso se debe a que el h que le estas sumando a x es muy chiquito y no es representable y/o significativo para la operacion matematica. Proba con un h mas o menos grande , un 0.05 y anda bajando hasta que te de algo razonable.

Nosotros en numerico usabamos un h = 0.05 -o de ese orden - , porque si te ibas mas abajo habia errores o cosas locas que no contribuian a la estabilidad del algoritmo (o algo asi, que se yo).

El problema depende del valor de x.

Ejemplo, de la consola de Python (usa doubles, IIRC):
Código:
>>> 0.05 + 100000000000000
100000000000000.05
>>> 0.05 + 1000000000000000
1000000000000000.0
>>> '%.8f' % (0.05 + 100000000000000)
'100000000000000.04687500'
>>> '%.8f' % (0.05 + 1000000000000000)
'1000000000000000.00000000'
>>>


Eso sólo para la parte x + h; después, de los valores de A, B, C y D dependerá el valor del polinomio y si no se rompe ahí también.


La solución, de todos modos, es posible; pero implica hacer manejos de bit y creo que está fuera del alcance.

El enunciado tiene algo mal condicionado; o esperan que la respuesta sea: Para valores de x, A, B, C y D entre tal y tal, el valor de h funciona.

_________________
Image[tex] ${. \ \ \ \ \ \ \ \ \ .}$ [/tex][tex] ${\Large Usá \LaTeX, no seas foro...}$ [/tex]

Aries Género:Masculino Perro OfflineGalería Personal de Sebastian SantisiVer perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
memovidal10
Nivel 4


Edad: 34
Registrado: 16 Mar 2009
Mensajes: 98

Carrera: Industrial
CARRERA.industrial.gif
MensajePublicado: Vie Nov 19, 2010 5:03 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

El usuario elije los valores de A, B, C, D y E... Y el punto en el que desea conocer la derivada... El valor de h depende de lo que elija el usuario dicen? Porq yo en el algoritmo lo puse como una constante y voy probando... Con 1E-7, 1E-8 funciona y da valores bien aproximados ... El tema es que no se si respeta lo que pide el enunciado de aproximacion optima a simple precision...


Piscis Género:Masculino Caballo OfflineGalería Personal de memovidal10Ver perfil de usuarioEnviar mensaje privado
4WD
Administrador


Edad: 39
Registrado: 07 Sep 2006
Mensajes: 2430
Ubicación: Ingeniero
Carrera: Mecánica
argentina.gif
MensajePublicado: Vie Nov 19, 2010 8:54 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Bueno, la respuesta ya más o menos te la respondieron entre todos, pero la ordeno un poco...

Tenés que minimizar el error y supongo que la fórmula que estás usando es [tex]\frac{f(x)-f(x+h)}{h}[/tex], así que el error es de orden 1 (orden h). Si es alguna otra fórmula loca, es una potencia. No importa, lo importante es que tenés que hacer [tex]h[/tex] tan pequeño como sea posible. Desde ese punto de vista, lo ideal es el mínimo que puedas representar (1e-38?).

Pero esa no es toda la restricción. También tenés que calcular [tex]x+h[/tex] y que te dé distinto de [tex]x[/tex]. Eso no es tan fácil y representa una restricción adicional a la anterior.

A diferencia de punto fijo (o coma), donde los intervalos entre dos números que se pueden representar son regulares, en punto flotante, la grilla no es regular. Es decir, la separación se va agrandando cuanto más grandes son los números (@SS: el [tex]\Delta[/tex] se agranda; [tex]\varepsilon [/tex]se suele usar para lo relativo, que es constante en punto flotante). Por eso la diferencia entre dos números que se pueden representar dependen del número que se trate.

Para resolver esto se define la unidad de máquina ([tex]\mu[/tex]) que permite acotar ese error de representación. La expresión de [tex]\mu[/tex] se puede demostrar que es [tex]\mu=0.5\cdot 10^{1-T}[/tex], donde [tex]T[/tex] es la cantidad de dígitos de la mantisa con la que estás trabajando, cuando se hace con redondeo. Capaz se podría hacer alguna acotación más fina pero no tiene sentido en este caso.

Lo que tenés que hacer es definir como constante [tex]\mu[/tex] y no [tex]h[/tex] (necesitás buscar cuántos dígitos de mantisa tiene el tipo de dato). Entonces, una vez que el usuario ingresó el [tex]x[/tex] donde quiere calcular la derivada, calculás [tex]h = \mu\cdot x[/tex].

Probá con varios valores de verificar que con eso efectivamente se cumpla que [tex]x[/tex] sea distinto de [tex]x+h[/tex]. Ese es el valor (en realidad es una cota bastante buena) mínimo que podés tomar para [tex]h[/tex] y poder calcular la derivada sin que se anule el numerador.

Esto se da en la unidad I de Análisis Numérico I y no tendrían por qué saberlo. Ergo, deberían haberlo explicado cuando presentaron el TP...

Saludos

_________________
ImageImage
ImageImage
ImageImage

Escorpio Género:Masculino Rata OfflineGalería Personal de 4WDVer perfil de usuarioEnviar mensaje privado
memovidal10
Nivel 4


Edad: 34
Registrado: 16 Mar 2009
Mensajes: 98

Carrera: Industrial
CARRERA.industrial.gif
MensajePublicado: Vie Nov 19, 2010 10:01 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Buenisimo! Muchas Gracias, ahora me cerro todo... Declare como constante MU, por lo que tengo entendido, la mantisa de un numero real almacendo en simple precisión ocupa 23 bits... O sea que MU=0.5E-22... Probé con ese pero parece que ese valor hace que x=x+h.
Me gustaría averiguar cuanto ocupa la mantisa de un numero real almacenado en simple precisión en el FreePascal, probe con MU=0,5E-10 y funca perfecto! Pero no se si la mantiza ocupa 11 bits... En fin, otra duda, yo uso la funcion [f(x)-f(x-h)]/h y el signo de la derivada me da bien, pero cuando uso x+h me da el signo al reves... Muchas gracias a todos por las respuestas claras y rápidas, raro que nos pidan esto cuando ni lo vimos... Saludos!


Piscis Género:Masculino Caballo OfflineGalería Personal de memovidal10Ver perfil de usuarioEnviar mensaje privado
Mostrar mensajes de anteriores:      
Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente

Ver tema siguiente
Ver tema anterior
Podés publicar nuevos temas en este foro
No podés responder a temas en este foro
No podés editar tus mensajes en este foro
No podés borrar tus mensajes en este foro
No podés votar en encuestas en este foro
No Podéspostear archivos en este foro
No Podés bajar archivos de este foro


Todas las horas son ART, ARST (GMT - 3, GMT - 2 Horas)
Protected by CBACK CrackerTracker
365 Attacks blocked.

Powered by phpBB2 Plus, phpBB Styles and Kostenloses Forum based on phpBB © 2001/6 phpBB Group :: FI Theme :: Mods y Créditos

Foros-FIUBA está hosteado en Neolo.com Cloud Hosting

[ Tiempo: 0.4995s ][ Pedidos: 20 (0.3641s) ]