NDSolveValue에서 그리스 형식 기호를 사용할 때 Transpose :: nmtx 오류

Dec 18 2020

12.0 또는 이전에 도입 된 버그, 12.2까지 지속됩니다.


NDSolveValue두 개의 종속 변수가있는 ODE 시스템에 대한 다음 호출을 고려하십시오. 여기서 or를 symbol제외한 모든 기호로 첫 번째 종속 변수를 선택할 수 있습니다 .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) *)

일반 라틴 기호, 일반 그리스 기호 또는 형식 라틴 기호를 선택하면 제대로 작동합니다.

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

또한에 종속 변수가 하나만있는 경우 오류가 발생하지 않습니다 NDSolveValue.

답변

3 xzczd Dec 18 2020 at 19:39

v12.2는 밖으로 뱉어 ndode경고. 이것은 문서화되지 않은 기능 과 관련된 버그 인 것 같습니다 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]. 하지만이 함수는에 나타나지 않으며 1 개의 종속 변수 케이스를 처리하는 데 성공한 Trace[NDSolveValue[………], TraceInternal->True]이유를 모르겠습니다 NDSolve.

다행히도이 문제는 쉽게 피할 수 있습니다. 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}]]