Transpose :: NDSolveValue'da Yunanca Biçimsel sembolü kullanırken nmtx hatası

Dec 18 2020

12.0 veya önceki sürümlerde ortaya çıkan hata, 12.2.


NDSolveValueİlk bağımlı değişkeni veya symboldışında herhangi bir sembol olarak seçebileceğimiz 2 bağımlı değişkenli bir ODE sistemi için aşağıdaki çağrıyı düşünün :yt

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

Sıradan Latin sembollerini, sıradan Yunan sembollerini veya Resmi Latin sembollerini seçersek, bu iyi çalışır:

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

Ancak herhangi bir Resmi Yunan sembolü seçersek, hatalar alırız:

solver[\[FormalAlpha]]

Transpose::nmtx: İlk iki seviyenin yeri {\[FormalAlpha], NDSolve`xs$2814}değiştirilemez.
Part::partw: Bölüm 2 Transpose[{\[FormalAlpha], NDSolve`xs$2814}]mevcut değil.
vb.

Şeylerin bozulmasına neden olan Yunan Biçimsel sembolleriyle ilgili nedir?

İlginç bir şekilde, Biçimsel Yunanca içeren çok karakterli semboller uygundur :

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

Ayrıca, içinde yalnızca 1 bağımlı değişken varsa, hatanın oluşmayacağına dikkat edin NDSolveValue.

Yanıtlar

3 xzczd Dec 18 2020 at 19:39

v12.2 tükürüyor ndodeuyarı. Bu , belgelenmemiş işlevle ilgili bir hata gibi görünüyor Internal`ProcessEquations`FindDependentVariables(bunu bu BTW gönderisinden biliyorum ):

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

Gördüğümüz gibi single'ı bulamıyor \[FormalAlpha]. Ancak bu işlev görünmüyor ve 1 bağımlı değişken durumunu ele almakta Trace[NDSolveValue[………], TraceInternal->True]neden NDSolvebaşarılı olduğuna dair hiçbir fikrim yok .

Neyse ki, sorunun üstesinden gelmek kolaydır. Sadece DependentVariablesseçeneği ayarlayı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}]]