Transpose :: nmtx error saat menggunakan simbol Formal Yunani di NDSolveValue
Bug diperkenalkan di 12.0 atau sebelumnya, bertahan hingga 12.2.
Pertimbangkan panggilan berikut ke NDSolveValue
untuk sistem ODE dengan 2 variabel dependen, di mana kita dapat memilih variabel dependen pertama symbol
,, menjadi simbol apa pun kecuali y
atau 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 dariTranspose[{\[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
v12.2 mengeluarkan ndode
peringatan. 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 NDSolve
berhasil menangani kasus 1 variabel dependen.
Untungnya, masalahnya mudah dielakkan. Cukup atur DependentVariables
opsinya:
With[{symbol = \[FormalAlpha]},
NDSolveValue[{symbol'[t] == 1, y'[t] == 1, symbol[0] == 0, y[0] == 0}, {symbol, y},
{t, 0, 1}, DependentVariables -> {symbol, y}]]