5

Mathematica では、のような式をどのように単純化できa == b || a == -bますa^2 = b^2か? 私が試したすべての関数 (Reduce、Simplify、および FullSimplify を含む) はそれを行いません。

aこれを任意の (多項式) 式およびに対して機能させたいことに注意してくださいb。別の例として、

a == b || a == -b || a == i b || a == -i b

(虚数の場合i) および

a^2 == b^2 || a^2 == -b^2

両方とも に簡略化する必要がありますa^4 == b^4

注:解決策は、他の無関係な論理ケースに害を及ぼさないように、論理レベルで機能する必要があります。例えば、

a == b || a == -b || c == d

なるべき

a^2 == b^2 || c == d.
4

2 に答える 2

11

一連の可能性をゼロに等しくなければならない積に変換できます。

expr = a == b || a == -b || a == I*b || a == -I*b;
eqn = Apply[Times, Apply[Subtract, expr, 1]] == 0

Out[30]= (a - b)*(a - I*b)*(a + I*b)*(a + b) == 0

これを単純化します。

Simplify[eqn]

Out[32]= a^4 == b^4

ダニエル・リヒトブラウ

于 2011-05-31T16:41:35.370 に答える
7

ブール式は、次のように代数形式に変換できます。

In[18]:= (a == b || a == -b || a == I b || a == -I b) /. {Or -> Times,
    Equal -> Subtract} // Expand

Out[18]= a^4 - b^4


編集

変換で他の変数の一部を除外することに対応して、Or変換関数を記述し、次のように使用できSimplifyます。

In[41]:= Clear[OrCombine];
OrCombine[Verbatim[Or][e__Equal]] := Module[{g},
  g = GatherBy[{e}, Variables[Subtract @@ #] &];
  Apply[Or, 
   Function[
     h, ((Times @@ (h /. {Equal -> Subtract})) // Expand) == 0] /@ g]
  ]

In[43]:= OrCombine[(a == b || a == -b || a == I b || a == -I b || 
   c == d)]

Out[43]= a^4 - b^4 == 0 || c - d == 0

または:

In[40]:= Simplify[(a == b || a == -b || a == I b || a == -I b || 
   c == d), TransformationFunctions -> {Automatic, OrCombine}]

Out[40]= a^4 == b^4 || c == d
于 2011-05-31T16:42:52.560 に答える