MathematicaのSolveとReduceのバグ(10.2で修正)


10.2で修正されました。

Mathematica 10, 10.1のSolveとReduceには,ベクトルや行列が等しくないという条件を正しく扱えないという,かなり深刻なバグがあります。(製造元には報告済みです。)

例として,
x^2+y^2 == 1かつy == 1/Sqrt[2]
という方程式を
{x, y} != {-1/Sqrt[2], 1/Sqrt[2]}
という条件のもとで解きます。

Solve[And[
  x^2 + y^2 == 1,
  y == 1/Sqrt[2],
  {x, y} != {-1/Sqrt[2], 1/Sqrt[2]}],
 {x, y}]

Mathematica 9.0.1では
{x -> 1/Sqrt[2], y -> 1/Sqrt[2]}
という正しい解が得られます。

Mathematica 10.1では
解なし
という間違った結果になります。

いろいろ試してみると,Solveの中に書いた
{x, y} != {-1/Sqrt[2], 1/Sqrt[2]}
という条件が,
x != -1/Sqrt[2] || y != 1/Sqrt[2]
ではなく,
x != -1/Sqrt[2] && y != 1/Sqrt[2]
と解釈されているようです。

Reduceでも同じ問題が起こります。

Reduce[{x, y} != {0, 0}, {x, y}]

Mathematica 9.0では
x!=0 || y!=0
という正しい解が得られます。

Mathematica 10.1では
x!=0 && y!=0
という間違った解が得られます。

というわけで,Mathematica 10.1では,SolveやReduceの中に,ベクトルや行列が等しくないという条件は書けません。とりあえずの解決策は,Or[x != 0, y != 0]のように成分ごとに書くことですが,これでは2次元限定ですし,そもそもMathematicaで成分を書いたら負けな気がするので,「例えば,Mathematica 10.1を避ける」でも仕方ないでしょう。

製造元のウェブサイトには,「世界で最も信頼できる最新技術計算システム」とありますが,それはないと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です