NDSolveValue में ग्रीक औपचारिक प्रतीक का उपयोग करते समय ट्रांज़िशन :: nmtx त्रुटि

Dec 18 2020

बग को 12.0 या उससे पहले पेश किया गया, जो 12.2 से बना रहा।


NDSolveValueODE की प्रणाली के लिए 2 आश्रित चर के साथ निम्नलिखित कॉल पर विचार करें , जहाँ हम पहले निर्भर चर को चुन सकते हैं symbol, सिवाय किसी भी प्रतीक के yया 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) *)

यदि हम साधारण लैटिन प्रतीकों, साधारण ग्रीक प्रतीकों या औपचारिक लैटिन प्रतीकों का चयन करते हैं, तो यह ठीक काम करता है:

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

लेकिन अगर हम किसी भी औपचारिक यूनानी प्रतीक को चुनते हैं, तो हमें त्रुटियाँ मिलती हैं:

solver[\[FormalAlpha]]

Transpose::nmtx: पहले दो स्तरों को {\[FormalAlpha], NDSolve`xs$2814}स्थानांतरित नहीं किया जा सकता है।
Part::partw: भाग 2 का Transpose[{\[FormalAlpha], NDSolve`xs$2814}]अस्तित्व नहीं है।
आदि।

यह ग्रीक औपचारिक प्रतीकों के बारे में क्या है जो चीजों को तोड़ने का कारण बनता है?

दिलचस्प बात यह है कि, फॉर्मल ग्रीक वाले बहु-चरित्र प्रतीक ठीक हैं:

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

यह भी ध्यान दें कि यदि केवल 1 आश्रित चर नहीं है तो त्रुटि उत्पन्न होती है NDSolveValue

जवाब

3 xzczd Dec 18 2020 at 19:39

v12.2ndode चेतावनी से बाहर निकलता है । यह अनिर्दिष्ट फ़ंक्शन से संबंधित बग प्रतीत होता है Internal`ProcessEquations`FindDependentVariables(मैं इसे इस पोस्ट 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}} *)

जैसा कि हम देख सकते हैं, यह एकल खोजने में विफल रहता है \[FormalAlpha]। लेकिन यह फ़ंक्शन दिखाई नहीं देता है Trace[NDSolveValue[………], TraceInternal->True], और मुझे नहीं पता कि NDSolve1 आश्रित चर मामले को संभालने में सफल क्यों होता है।

सौभाग्य से, समस्या को दरकिनार करना आसान है। बस DependentVariablesविकल्प सेट करें :

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