8

記号的な数学の問題を解こうとした後、約 17000 文字の式を取得しました。私はMatlabのシンボリックツールボックスを使用していますが、どんな提案も受け付けています(Mathematicaなど)。

明らかな理由から、式をそのまま質問にコピー アンド ペーストすることはしません。代わりにリンクがあります

Matlabコマンドsimplifyとコマンドを実行してsimplecollect、状況は改善されませんでした (さらに悪化したものもあります)。

しかし、式が一時的なパラメーターを使用して段階的に評価されるかどうかは気にしません。何かのようなもの:

 z1 = a^2*y1;
 %Now the expression can be simplified by using z1 as alias!
 z1+z1^2 ....

一時変数を使用してこのような段階的な単純化を自動的に行う方法はありますか? また、あなたが考えることができる他の方法はもっともらしいです。

4

2 に答える 2

6

一般的な部分式の削除 (CSE) を試すことができます。これはから盗まれた例です

Mathematica を入手して、式を別の方程式で簡略化する

InputForm[Experimental`OptimizeExpression[(3 + 3*a^2 + Sqrt[5 + 6*a + 5*a^2] +
      a*(4 + Sqrt[5 + 6*a + 5*a^2]))/6]]

==>

Out[206]//InputForm=
Experimental`OptimizedExpression[Block[{Compile`$1, Compile`$3, Compile`$4, 
   Compile`$5, Compile`$6}, Compile`$1 = a^2; Compile`$3 = 6*a; 
   Compile`$4 = 5*Compile`$1; Compile`$5 = 5 + Compile`$3 + Compile`$4; 
   Compile`$6 = Sqrt[Compile`$5]; (3 + 3*Compile`$1 + Compile`$6 + 
     a*(4 + Compile`$6))/6]]
于 2012-01-30T01:58:53.297 に答える
2

コメントで書いたように、Mathematica の単純化ツールは、Matlab の同様のコマンドよりも効率的であるようです。あなたはMatlabのユーザーだと思われるので、Mathematica の単純化コマンドのうち2つだけを使用する方法をここで詳しく説明します. 長い式を次のように定義すると、

longExpression = (x3^2*(y2+y3-a*y1-a*y2-2*a*y3-...

次に、使用できます

Simplify[longExpression]  
and 
FullSimplify[longExpression]

最後の式は、わずか 1535 文字の素晴らしく明確な式を生成します (多くのように聞こえますが、変数はそれほど多くありません)。おそらく、これは問題を単純化するのに十分です。そうでない場合は、お知らせください。

于 2012-01-30T14:43:02.997 に答える