Pregunta de Octave

3 views
Skip to first unread message

Jaime Anguiano Olarra

unread,
Oct 4, 2006, 11:07:00 AM10/4/06
to GCubo Ayuda
Hola a todos,

Tengo una ecuación trascendente que quiero resolver
numéricamente:

tan(x) = -a*x

a es una constante conocida con valor entre [1.223 y 1.554].
No necesito resolverlo para el rango. Me bastaría saberlo para
cualquiera de esos valores. Pero no encuentro la forma de que
Octave no me de la misma respuesta que una HP de Ciencias que
me dan 0 por respuesta. Google ya no me da más de momento.

Obviamente esa es una solución pero necesitaría otra, que la
hay.

Actualmente uso:

octave> global x
octave> tan(x) == -1.554 * x

o cualquier otro valor de a.

Para quién esté interesado es una ecuación importante que
aparece durante el cálculo de la energía de enlace del deuterón.

Muchas gracias de antemano,

J

Manuel López-Ibáñez

unread,
Oct 7, 2006, 8:42:15 AM10/7/06
to ja...@gnome.org, GCubo Ayuda
Hola Jaime,

no tengo ni idea de Octave, pero en R (www.r-project.org) hay una
función llamada uniroot().

Creo que la clave está en limitar la búsqueda al intervalo donde
sabemos que está la solución. Seguro que esto se puede hacer mejor
(cualquier sugerencia es bienvenida) pero así es como lo he hecho yo:

1) Primero buscamos a ojo el intervalo

> curve(tan, 1, 5)
> curve(-1.223*x, 1, 5, add=TRUE)
> curve(-1.554*x, 1, 5, add=TRUE

Vemos que se cruzan approximademente dentro de los intervalos [1.6, 2.5]
y [4.72, 5]. Hay que tener cuidado de no incluir la asíntota donde el
valor es ¿indefinido? no me acuerdo como se dice :)
Cogemos el primero (como podíamos haber cogido el segundo)

2) Definir la ecuación tan(x) + a*x = 0

> f <- function (x,a) tan(x) + a*x

3) Calcular la raíz

> str(uniroot(f, c(1.6, 2.5), tol = 1e-20, a = 1.223), dig=20)
List of 4
$ root : num 1.96509771192677
$ f.root : num -4.4408920985006261617e-16
$ iter : int 9
$ estim.prec: num 8.8817841970012523234e-16

Para a = 1.223, x es igual a 1.96509771192677

Igual para a = 1.554

> str(uniroot(f, c(1.6, 2.5), tol = 1e-20, a = 1.554), dig=20)
List of 4
$ root : num 1.8977201822176725798
$ f.root : num -4.4408920985006261617e-16
$ iter : int 10
$ estim.prec: num 8.8817841970012523234e-16


Seguro que hay mejores maneras de hacer esto (y me extraña que no haya
una forma de resolverlo exactamente), pero quizás te sirva para algo.

Saludos,

Manu.


______________________________________________
LLama Gratis a cualquier PC del Mundo.
Llamadas a fijos y móviles desde 1 céntimo por minuto.
http://es.voice.yahoo.com

Antonio Zugaldia

unread,
Oct 7, 2006, 12:14:00 PM10/7/06
to Manuel López-Ibáñez, ja...@gnome.org, GCubo Ayuda
Por si a alguien le es de ayuda, adjunto un PDF con el proceso en
Mathematica (no es libre, pero funciona en GNU/Linux). Como dice
Manuel, no hay solución analítica, hay que buscar una solución
numérica viendo primero gráficamente donde están las soluciones.

A.

> Llamadas a fijos y m�viles desde 1 c�ntimo por minuto.
> http://es.voice.yahoo.com
>
>
> >
>


--
Antonio Zugaldia <azug...@gmail.com>
http://www.zugaldia.net/

jaime.pdf

Jaime Anguiano Olarra

unread,
Oct 8, 2006, 11:44:56 AM10/8/06
to Manuel López-Ibáñez, GCubo Ayuda
Hola!,

Muchas gracias por la ayuda. Le echaré un ojo. Acabo de llegar
de viaje :-).

Sobre lo de la solución exacta... no existe. Es una ecuación
trascendente y no hay más remedio que obtener la solución por
aproximaciones:

Probé ya el Regula Falsi y la aproximación de Born (a mano).
El caso es que la solución no converge, de hecho oscila en signo
por esos métodos. Antes de salir de viaje dejé listo el término
general de la sucesión de Newton-Raphson. Si no sale por ese método
ya me habré quedado sin los típicos que usamos en Física y tendré
que buscar algo entre libros :-/

Agur!,

J

> Llamadas a fijos y mviles desde 1 cntimo por minuto.
> http://es.voice.yahoo.com

Jaime Anguiano Olarra

unread,
Oct 9, 2006, 12:06:08 PM10/9/06
to Manuel López-Ibáñez, GCubo Ayuda
Yehop!.

Una cosa más por si alguien se quedó con the fly behind the ear.
Quizás Fabian nos pueda ilustrar con otras soluciones mejores.

Acabo de probar el Newton-Raphson con la ecuación y da una solución
convergente en:

1.90 aproximadamente de módulo. 1.898...

Así que ya está. Muchas gracias.

El fastidio es que tengo una HP 49G+ que se supone que es la caña
de España y un Octave muy bonito pero para cosas tan básicas como
esta tengo que recurrir a cálculos a mano. Ya me ha fallado con
alguna que otra cosa más.

Ayyyy... (<- Parece un anuncio del Ficeb)

Una vez más muchas gracias.

Jaime Anguiano Olarra

unread,
Oct 9, 2006, 12:17:02 PM10/9/06
to Manuel López-Ibáñez, GCubo Ayuda

Y una última nota.

Hay un procedimiento basado en Física para extraer ese resultado.
Lo qué??.
Es un ejemplo instructivo para quiénes anden interesados en esos
temas.

Usando el Principio de Incertidumbre de Heisenberg se resuelve esa
ecuación en el siguiente enlace:

http://faii.etsii.upm.es/dfaii/Docencia/Material%
20Docente/Pro_Fisica_Moderna/7%20El%20deuter%C3%B3n.pdf#search=%
22deuteron%22

J

Reply all
Reply to author
Forward
0 new messages