0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Mathematica12.0における組込みシンンボルDSolveのバグ

Last updated at Posted at 2019-10-26

この記事は,2019年5月に公開された Mathematica 12.0 を対象とした記事です.今後公開されるバージョンでは,修正されているかもしれません修正されました .バージョン12.0.0上の組込みシンボルDSolveに不具合があります.

2020年5月3日 追記

2020年3月にリリースされたWolfram Language 12.1 (Mathematica 12.1)においては,この記事に記載されている現象が解消されています.筆者は,Wolfram社の公開リソース の一つである Wolfram Language Sandbox にて確認しました.

PUBLIC RESOURCES
https://www.wolfram.com/resources/

2020年3月11日 追記

この不具合について,筆者はWolfram EngineをJupyter Notebookに導入して同様な検証しました.Wolfram Language 12上で実行した結果,全く同じ結果が返されました.したがってMathematicaの核であるWolfram Languageに誤った結果を返す原因があると思われます.

2019年12月26日 追記

この不具合は,すべての微分方程式に対して発生するものではなく,微分方程式のなかでも“ある何かしらの条件を持った”微分方程式において発生します.この条件は,当記事の筆者は存じません.

組込みシンボルDSolve

このシンボルは,簡単に言えば微分方程式を解く機能があります.詳しくはリファレンスを参照してください:

DSolve(ドキュメントセンター)
https://reference.wolfram.com/language/ref/DSolve.html.ja?source=footer

例題として,次の微分方程式を解く:

sample
DSolve[{y'[x] == x + x^2 + y[x] + y[x]^2, y[0] == 1}, y[x], x]

結果はHermite多項式や,合流形超幾何関数を含み,正しくは

クリックで結果を開く
{{y[x] -> ((10 + 10 I) (-1)^(1/4)HermiteH[-(3/2) + I/4, 1/2 (-1)^(1/4) + (-1)^(1/4) x] Hypergeometric1F1[1/4 - I/8, 1/2, I/4] - (8 + 4 I) HermiteH[-(1/2) + I/4, 1/2 (-1)^(1/4) + (-1)^(1/4) x] Hypergeometric1F1[1/4 - I/8, 1/2, I/4] - (12 - 4 I) x HermiteH[-(1/2) + I/4, 1/2 (-1)^(1/4) + (-1)^(1/4) x] Hypergeometric1F1[1/4 - I/8, 1/2, I/4] - (6 + 2 I) (-1)^(1/4)HermiteH[-(3/2) + I/4, 1/2 (-1)^(1/4)] Hypergeometric1F1[1/4 - I/8, 1/2, (1/2 (-1)^(1/4) + (-1)^(1/4) x)^2] - (8 - 4 I) (-1)^(1/4)x HermiteH[-(3/2) + I/4, 1/2 (-1)^(1/4)] Hypergeometric1F1[1/4 - I/8, 1/2, (1/2 (-1)^(1/4) + (-1)^(1/4) x)^2] + (8 +  4 I) HermiteH[-(1/2) + I/4, 1/2 (-1)^(1/4)] Hypergeometric1F1[1/4 - I/8, 1/2, (1/2 (-1)^(1/4) + (-1)^(1/4) x)^2] + (12 -  4 I) x HermiteH[-(1/2) + I/4, 1/2 (-1)^(1/4)] Hypergeometric1F1[1/4 - I/8, 1/2, (1/2 (-1)^(1/4) + (-1)^(1/4) x)^2] - (3 - 4 I) (-1)^(1/4)HermiteH[-(3/2) + I/4, 1/2 (-1)^(1/4) + (-1)^(1/4) x] Hypergeometric1F1[5/4 - I/8, 3/2, I/4] + (1 - 3 I) HermiteH[-(1/2) + I/4, 1/2 (-1)^(1/4) + (-1)^(1/4) x] Hypergeometric1F1[5/4 - I/8, 3/2, I/4] - (2 + 4 I) x HermiteH[-(1/2) + I/4, 1/2 (-1)^(1/4) + (-1)^(1/4) x] Hypergeometric1F1[5/4 - I/8, 3/2, I/4] - (4 + 3 I) (-1)^(3/4)HermiteH[-(3/2) + I/4, 1/2 (-1)^(1/4)] Hypergeometric1F1[5/4 - I/8, 3/2, (1/2 (-1)^(1/4) + (-1)^(1/4) x)^2] - (8 + 6 I) (-1)^(3/4)x HermiteH[-(3/2) + I/4, 1/2 (-1)^(1/4)] Hypergeometric1F1[5/4 - I/8, 3/2, (1/2 (-1)^(1/4) + (-1)^(1/4) x)^2] - (5 -  5 I) HermiteH[-(1/2) + I/4, 1/2 (-1)^(1/4)] Hypergeometric1F1[5/4 - I/8, 3/2, (1/2 (-1)^(1/4) + (-1)^(1/4) x)^2] - (10 -  10 I) x HermiteH[-(1/2) + I/4, 1/2 (-1)^(1/4)] Hypergeometric1F1[5/4 - I/8, 3/2, (1/2 (-1)^(1/4) + (-1)^(1/4) x)^2])/(2 ((2 +    6 I) HermiteH[-(1/2) + I/4,   1/2 (-1)^(1/4) + (-1)^(1/4) x] Hypergeometric1F1[1/4 - I/8,   1/2, I/4] + (2 + 4 I) (-1)^(1/4)  HermiteH[-(3/2) + I/4, 1/2 (-1)^(1/4)] Hypergeometric1F1[  1/4 - I/8, 1/  2, (1/2 (-1)^(1/4) + (-1)^(1/4) x)^2] - (2 +    6 I) HermiteH[-(1/2) + I/4,   1/2 (-1)^(1/4)] Hypergeometric1F1[1/4 - I/8, 1/  2, (1/2 (-1)^(1/4) + (-1)^(1/4) x)^2] - (2 -    I) HermiteH[-(1/2) + I/4,   1/2 (-1)^(1/4) + (-1)^(1/4) x] Hypergeometric1F1[5/4 - I/8,   3/2, I/4]))}}
のようになります(そのはずです.筆者は検算しておりません).

発生する現象

さきの例題を,執筆時点(2019年10月26日)で最新の Mathematica12.0.0 で実行してみます.結果,

{{y[x] -> (-4 - 3 x)/(2 (-2 + 3 x))}}

のように与えられます.しかし,これは与えられた微分方程式を満たしません(手計算でもとの微分方程式に代入することで解でないことが確認できる).他にも,1階線形連立微分方程式を解こうとした場合にも(必ずではないが)間違った解が与えられることがあります.

このようなバグは公開後すぐに見つかったらしく,一部コミュニティでも投稿がありました:

Wrong answer from DSolve when solving a differential equation
https://mathematica.stackexchange.com/questions/197518/wrong-answer-from-dsolve-when-solving-a-differential-equation

対策方法

組込みシンボルDSolveは,2.0(1991年)で導入され,最近では(12.0)2019年に修正されました.しかし,修正と宣言されたものの,不具合を孕んでしまったようです.
したがって,バージョン12.0ではなく,過去のDSolveを組み込んであるバージョンを使うか,今後公開されるであろう公開された修正済みのものを使えばよいです.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?