Lỗi Transpose :: nmtx khi sử dụng biểu tượng Trang trọng Hy Lạp trong NDSolveValue

Dec 18 2020

Lỗi được giới thiệu trong 12.0 trở về trước, vẫn tồn tại đến hết 12.2.


Hãy xem xét lệnh gọi sau NDSolveValuecho một hệ thống ODE có 2 biến phụ thuộc, trong đó chúng ta có thể chọn biến phụ thuộc đầu tiên symbol, là bất kỳ ký hiệu nào ngoại trừ yhoặc 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) *)

Nếu chúng ta chọn các biểu tượng Latinh thông thường, các biểu tượng Hy Lạp thông thường hoặc các biểu tượng Latinh Trang trọng, điều này hoạt động tốt:

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

Nhưng nếu chúng ta chọn bất kỳ biểu tượng Hy Lạp Trang trọng nào, chúng ta sẽ gặp lỗi:

solver[\[FormalAlpha]]

Transpose::nmtx: Hai cấp độ đầu tiên của {\[FormalAlpha], NDSolve`xs$2814}không thể được chuyển đổi.
Part::partw: Phần 2 của Transpose[{\[FormalAlpha], NDSolve`xs$2814}]không tồn tại.
Vân vân.

Điều gì là về các biểu tượng Trang trọng trong tiếng Hy Lạp khiến mọi thứ bị hỏng?

Điều thú vị là các biểu tượng nhiều ký tự có chứa tiếng Hy Lạp Trang trọng là OK:

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

Cũng lưu ý rằng lỗi không xảy ra nếu chỉ có 1 biến phụ thuộc trong NDSolveValue.

Trả lời

3 xzczd Dec 18 2020 at 19:39

v12.2 đưa ra ndodecảnh báo. Đây dường như là một lỗi liên quan đến chức năng không có giấy tờ Internal`ProcessEquations`FindDependentVariables(tôi biết nó từ bài đăng này 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}} *)

Như chúng ta có thể thấy, nó không thể tìm thấy duy nhất \[FormalAlpha]. Nhưng hàm này không hiển thị trong Trace[NDSolveValue[………], TraceInternal->True]và tôi không hiểu tại sao lại NDSolvethành công trong việc xử lý trường hợp 1 biến phụ thuộc.

May mắn thay, vấn đề là dễ dàng để vượt qua. Chỉ cần đặt DependentVariablestùy chọ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}]]