Transpose :: nmtx error saat menggunakan simbol Formal Yunani di NDSolveValue

Dec 18 2020

Bug diperkenalkan di 12.0 atau sebelumnya, bertahan hingga 12.2.


Pertimbangkan panggilan berikut ke NDSolveValueuntuk sistem ODE dengan 2 variabel dependen, di mana kita dapat memilih variabel dependen pertama symbol,, menjadi simbol apa pun kecuali yatau 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) *)

Jika kita memilih simbol Latin biasa, simbol Yunani biasa, atau simbol Latin Formal, ini berfungsi dengan baik:

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

Tetapi jika kita memilih simbol Yunani Formal, kita mendapatkan kesalahan:

solver[\[FormalAlpha]]

Transpose::nmtx: Dua tingkat pertama {\[FormalAlpha], NDSolve`xs$2814}tidak dapat dialihkan.
Part::partw: Bagian 2 dari Transpose[{\[FormalAlpha], NDSolve`xs$2814}]tidak ada.
dll.

Ada apa dengan simbol formal Yunani yang menyebabkan barang rusak?

Menariknya, simbol multi-karakter yang mengandung bahasa Yunani Formal diperbolehkan:

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

Perhatikan juga bahwa kesalahan tidak terjadi jika hanya ada 1 variabel dependen di NDSolveValue.

Jawaban

3 xzczd Dec 18 2020 at 19:39

v12.2 mengeluarkan ndodeperingatan. Ini sepertinya bug yang terkait dengan fungsi tidak berdokumen Internal`ProcessEquations`FindDependentVariables(saya tahu dari posting ini BTW):

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}} *)

Seperti yang bisa kita lihat, gagal menemukan single \[FormalAlpha]. Tetapi fungsi ini tidak muncul di Trace[NDSolveValue[………], TraceInternal->True], dan saya tidak tahu mengapa NDSolveberhasil menangani kasus 1 variabel dependen.

Untungnya, masalahnya mudah dielakkan. Cukup atur DependentVariablesopsinya:

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