Loading [MathJax]/jax/element/mml/optable/BasicLatin.js

5 votos

Cómo resolver xlog2xc=0 ?

Estoy optimizando los parámetros de un algoritmo para minimizar su tiempo de ejecución. Sustituyendo algunas variables para limpiar la presentación, básicamente necesito resolver xlog2xc=0 pero he olvidado cómo resolver una ecuación de esta forma. ¿Cómo puedo hacerlo?

6voto

Amit Naidu Puntos 113

Se puede utilizar Lambert's W -función para resolver esto. Pero tenga en cuenta que para 0<c4e2 la solución no es única:

enter image description here

Para completar, las posibles soluciones son: x=exp[2W0(±c2)], exp[2W1(c2)]0<c4e2x=exp[2W0(c2)]4e2<c Dónde W0 y W1 son las dos ramas del W como se describe en el enlace de la wikipedia. No sé qué software utilizas, pero no es necesario recurrir a la búsqueda de raíces numéricas: el W -se implementa en matemáticas , matlab y C++ .


EDITAR

Ya que has preguntado por la asintótica, añadiré que para grandes c tenemos x(c)=exp[2W0(c2)]=O(clog2c) . En realidad, el siguiente límite se mantiene exactamente: lim Obtuve este resultado jugando con mathematica, y no me molesté en demostrarlo.

Tenga en cuenta, sin embargo, que se necesita un muy grande c para alcanzar este límite. Doy aquí el gráfico de esta relación en función de c :

enter image description here

-5voto

Zignd Puntos 3551

No estoy seguro de si se puede hacer esto analíticamente, pero se podría hacer bastante rápido numéricamente y eso parece que debería ser suficiente. Sólo tienes que escribir x \log^2 x - c = 0 como x = \exp\left( (c/x)^{1/2} \right ) y luego encontrar numéricamente un punto fijo. Esto funcionará si c es positivo y si tu conjetura inicial es positiva, de lo contrario podrías tener problemas.

Un cálculo rápido muestra los siguientes valores para 20 iteraciones con un valor inicial de x=10 y c=1 :

{10, 1.37194, 2.34844, 1.92042, 2.05774, 2.00795, 2.02527, 2.01916,
2.02131, 2.02055, 2.02082, 2.02072, 2.02076, 2.02074, 2.02075,
2.02075, 2.02075, 2.02075, 2.02075, 2.02075, 2.02075}.

Sin embargo, este método puede ser bastante inestable para ciertas elecciones de c.

Como has mencionado, probablemente podrías intentar aproximar con una expansión de Taylor. El método de Newton utiliza una serie de taylor de segundo orden para encontrar las raíces. Pero, supongo que te gustaría alguna manera de encontrar la x apropiada más directamente o más automáticamente. Para aproximar con una serie de Taylor tendrías que elegir un punto alrededor del cual expandir. Si eliges expandir alrededor de x=b al segundo orden, entonces obtendrías la aproximación x \log ^2(x)-c \approx \left(b \log ^2(b)-c\right)+(x-b) \left(\log ^2(b)+2 \log (b)\right)+\frac{(x-b)^2 (\log (b)+1)}{b}+O\left((x-b)^3\right) . A continuación, se podría resolver para x, dado c: x = \frac{2 b-b \log ^2(b) \pm\sqrt{b} \sqrt{4 c \log (b)+b \log ^4(b)+4 c}}{2 (\log (b)+1)}

Una expansión de Taylor de mayor grado complicaría bastante este paso de resolución y habría que lidiar con más raíces.

Sin embargo, creo que el problema aquí es que no sabrías por dónde expandirte. Y expandir alrededor de un punto en particular y utilizarlo para todos los valores de c sería problemático porque la aproximación puede ser bastante mala cuanto más lejos te encuentres del punto de expansión. No estoy muy seguro de qué hacer. Pero, ¡suerte!

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X