Transpose :: error nmtx al usar el símbolo griego formal en NDSolveValue

Dec 18 2020

Error introducido en 12.0 o anterior, que persiste hasta 12.2.


Considere la siguiente llamada a NDSolveValuepara un sistema de EDO con 2 variables dependientes, donde podemos elegir la primera variable dependiente`` symbolpara que sea cualquier símbolo excepto yo t:

solver[symbol : Except[y | t, _Symbol]] :=
  NDSolveValue[
    {symbol'[t] == 1, y'[t] == 1, symbol[0] == 0, y[0] == 0}
    , {symbol, y}
    , {t, 0, 1}
  ];

$Version
(* 12.0.0 for Linux x86 (64-bit) (April 7, 2019) *)

Si elegimos símbolos latinos ordinarios, símbolos griegos ordinarios o símbolos latinos formales, esto funciona bien:

solver[a]
solver[α]
solver[\[FormalA]]
(* OK *)

Pero si elegimos cualquier símbolo griego formal, obtenemos errores:

solver[\[FormalAlpha]]

Transpose::nmtx: Los dos primeros niveles de {\[FormalAlpha], NDSolve`xs$2814}no se pueden transponer.
Part::partw: La parte 2 de Transpose[{\[FormalAlpha], NDSolve`xs$2814}]no existe.
etc.

¿Qué tienen los símbolos formales griegos que hacen que las cosas se rompan?

Curiosamente, los símbolos de varios caracteres que contienen griego formal están bien:

solver[a\[FormalAlpha]]
solver[\[FormalAlpha]\[FormalAlpha]]
(* OK *)

También tenga en cuenta que el error no ocurre si solo hay 1 variable dependiente en NDSolveValue.

Respuestas

3 xzczd Dec 18 2020 at 19:39

v12.2 escupe ndodeadvertencia. Esto parece ser un error relacionado con la función no documentada Internal`ProcessEquations`FindDependentVariables(lo sé por esta publicación, por cierto):

Table[
 Internal`ProcessEquations`FindDependentVariables[{symbol'[t] == 1, y'[t] == 1, 
   symbol[0] == 0, y[0] == 0}, t], {symbol, {\[FormalAlpha], a\[FormalAlpha]}}]
(* {{y}, {a\[FormalAlpha], y}} *)

Como vemos, no consigue encontrar el single \[FormalAlpha]. Pero esta función no aparece Trace[NDSolveValue[………], TraceInternal->True]y no tengo idea de por qué NDSolvetiene éxito en el manejo del caso de 1 variable dependiente.

Afortunadamente, el problema es fácil de sortear. Simplemente configure la DependentVariablesopción:

With[{symbol = \[FormalAlpha]}, 
 NDSolveValue[{symbol'[t] == 1, y'[t] == 1, symbol[0] == 0, y[0] == 0}, {symbol, y}, 
   {t, 0, 1}, DependentVariables -> {symbol, y}]]