2011-03-17 16 views
5

Si tengo una función general, f(z,a), z y a son reales, y la función f toma valores reales para todos z excepto en algún intervalo (z1,z2), donde se vuelve compleja. ¿Cómo determino z1 y z2 (que será en términos de a) utilizando Mathematica (o es posible)? ¿Cuáles son las limitaciones?Obtener puntos de ramificación de la ecuación

Para un ejemplo de prueba, considere la función f[z_,a_]=Sqrt[(z-a)(z-2a)]. Para z y a reales, esto toma valores reales excepto en el intervalo (a,2a), donde se vuelve imaginario. ¿Cómo encuentro este intervalo en Mathematica?

En general, me gustaría saber cómo se podría encontrar matemáticamente para un caso general. Para una función con solo dos variables como esta, probablemente sería sencillo hacer una gráfica de contorno de la superficie de Riemann y observar los cortes de las ramas. Pero, ¿y si se trata de una función multivariante? ¿Hay un enfoque general que uno puede tomar?

Respuesta

3

Lo que parece ser una superficie Riemann parametrizada por 'a'.Considere la relación algebraica (o analítica) g (a, z) = 0 que se engendraría a partir de esta rama de una superficie de Riemann parametrizada. En este caso, es simplemente g^2 - (z - a) * (z - 2 * a) == 0. En términos más generales, puede obtenerse utilizando Groebnerbasis, como se indica a continuación (no hay garantía de que esto siempre funcione sin una cierta cantidad de usuarios) intervención).

grelation = First[GroebnerBasis[g - Sqrt[(z - a)*(z - 2*a)], {x, a, g}]] 

Fuera [472] = 2 a^2 - g^2 - 3 az + z^2

Una condición necesaria para los puntos de ramificación, como funciones del parámetro 'a', es que el cero establecido para 'g' no da una función (de un solo valor) en una vecindad de tales puntos. Esto a su vez significa que la derivada parcial de esta relación con respecto a g desaparece (esto es del teorema de la función implícita del cálculo multivariable). Así que encontramos dónde grelate y su derivada desaparecen, y resuelven para 'z' en función de 'a'.

Solve[Eliminate[{grelation == 0, D[grelation, g] == 0}, g], z] 

de salida [481] = {{z -> a}, {z -> 2 a}}

Daniel Lichtblau Wolfram Research

+0

@ d'o-o'b Gracias por señalar mi error. Cambié variables de pruebas anteriores, pero no lo hice de manera uniforme. Si le das la variable de interés a GroebnerBasis, creo que funcionará. Para su ejemplo: Primero [GroebnerBasis [..., x] debería hacer lo que tiene en mente. Mi ejemplo debe tener un cambio similar, por lo que en lugar de especificar {x, a, g} solo especificamos z. –

+0

Agregaré que la confusión en mi código refleja un poco de confusión de mi parte. Creo que lo que (a menudo) funcionará es especificar, en la lista de variables, todas las variables que aparecen en denominadores, radicales, etc. Es decir, aquellas variables en las que la entrada no es ya un polinomio. En mi primer ejemplo, eso sería {z, a}. En el tuyo sería {b, x}. –

+0

@Daniel: el paso 'Eliminar 'ha estado funcionando durante más de un día en mi computadora portátil. Ahora no soy tan avanzado en mma, así que conoces alguna forma de suministrar condiciones (por ejemplo, algunas de ellas son distintas de cero, reales, etc. por lo que mma no tiene que preocuparse por dividir por cero, etc. .) ... por ahora, me he resignado a esperar que termine cada vez que lo hace (que parece que nunca). –

2

Para sistemas polinomiales (y algunos tipos de otros), Reduce puede hacer el trabajo.

E.g.

In[1]:= Reduce[Element[{a, z}, Reals] 
      && !Element[Sqrt[(z - a) (z - 2 a)], Reals], z] 
Out[1]= (a < 0 && 2a < z < a) || (a > 0 && a < z < 2a) 

Este tipo de enfoque también funciona (a menudo dando soluciones muy complicadas para las funciones con muchos cortes de rama) para otras combinaciones de funciones elementales que he marcado.

Para encontrar los cortes de ramas (en lugar de la clase simple de puntos de ramificación que le interesan) en general, no conozco un buen enfoque. El mejor lugar para encontrar las convenciones detalladas que utiliza Mathematica es en el sitio functions.wolfram.

sí recuerdo la lectura de un buen papel en este hace un tiempo ... Voy a tratar de encontrarlo ....


Eso es! El enfoque más fácil que he visto para el análisis de corte de rama utiliza el unwinding number. Hay un documento "Reasoning about the elementary functions of complex analysis" sobre esto la revista "Inteligencia Artificial y Computación Simbólica". Puede encontrar documentos similares en una de las páginas de inicio de los autores: http://www.apmaths.uwo.ca/~djeffrey/offprints.html.

+0

Aquí hay un post sobre esto en [mapleprimes] (http://www.mapleprimes.com/posts/36148-Unwinding-Number-Some-Rules-For-Working) – Simon

+1

@ d'o-o'b: No se apresure a aceptar esta pobre excusa por una respuesta . Puedes desalentar a alguien que realmente sabe de lo que están hablando al publicar ... – Simon

+0

Aunque no veo nada malo con tu enfoque, tienes razón. Acepté porque me devolvió lo que esperaba, sin embargo, debo esperar para ver si alguien más tiene un mejor enfoque. Además, este no es un enfoque adecuado para funciones más complicadas ... algunas que son aparentemente simples, como una cúbica general. no se calculó incluso después de 15 horas de tiempo de ejecución en un MBP. –

1

Para las funciones generales no puede hacer que Mathematica lo calcule. Incluso para polinomios, encontrar una respuesta exacta lleva tiempo. Creo que Mathematica utiliza algún tipo de eliminación de cuantificadores cuando usa Reducir, , lo que lleva tiempo.

sin restricciones en sus funciones (son polinomios, continuo, liso?) uno puede construir fácilmente funciones que Mathematica no puede simplificar aún más: f [x_, y_]: = Abs [Zeta [y + 0,5 + x * I]] * I

Si esta función es real para x arbitrarias y cualquier -0,5 < y < 0 o 0 < y < 0,5, entonces habrá encontrado un contraejemplo a la conjetura de zeta de Riemann, y yo Estoy seguro de que Mathematica no puede dar una respuesta correcta.

+0

gracias. Ya llegué a esa conclusión. Mi ecuación es un cubo irreductible y no he podido sacar nada de MMA. –