1

Mathematica を使用して幾何学に関連するいくつかの簡単な方程式を解き、その後、それらの解を別の言語でハードコーディングしています†。多くのページのコードを使用するよりも、解を多項式の根としてコーディングする方が簡潔になります。

取りましょう:

Solve[{
   dist^2 == xstep^2 + ((h - 2 r)/(NR - 1))^2,
   dist^2 == (w - 2 r - NC xstep)^2 + (h/2 - r - dist/2)^2
         },{xstep, dist}]

これにより、分数、平方根、および 4 乗根を含む「非常に大きな出力」が生成されます。明らかに、解かれた 2 つの変数は 4 次方程式の根です。

シンボルを含む式で動作する MinimalPolynomial[] のバージョンはありますか? 必要なのは、dist の 4 次の 5 つの係数だけです。

ありがとうございました。

† 「別の言語」は PostScript であり、//PostScriptForm 関数を作成する専門知識はありません。実際、繰り返し式を再計算することと「… dup … roll」を使用することの間の最適なバランスを見つけることは、一般的なケースでは遅くなります。

4

2 に答える 2

0

私は "Substitutions" (ここにアーカイブされています) と呼ばれるパッケージを作成しました。これは部分式の階層を引き出し、複雑な式のコーディングを最小限に抑えます。古い MathSource ライブラリに含まれていました。説明は次のとおりです。

特に Mathematica をソフトウェア開発に使用する場合,複雑な式に置換を適用して形式を減らすと便利なことがよくあります.大きな式の場合、この作業は面倒になることがあります。Substitutions[] は、式を単純化するための有用な置換セットを見つけるプロセスを支援するように設計されています。

今ではかなり古いですが、まだ動作するはずです。

于 2013-06-18T21:08:39.343 に答える
0

Reduceはあなたが望むものかもしれません:

あなたのシンボルグループのいくつかをA、B、Cに統合しました(必要ではなく、画面に収まるようにします)

Reduce[{dist^2 == xstep^2 + (A)^2 && 
        dist^2 == (C - NC xstep)^2 + (B - dist/2)^2 , {xstep, dist}]]

これにより、一連の条件でかなり大きな出力が生成されます。

さまざまな縮退ケースを排除する既知の制約がある場合は、指定するのに役立ちます(これらは作成しました)

$Assumptions = B != 0  && B^2 != 3 C^2  && NC^2 != 3/4;

$Assumptions は Simplify で使用されますが、Reduce 式に明示的に追加する必要があります。

Simplify[Reduce[{dist^2 == xstep^2 + (A)^2 && 
    dist^2 == (C - NC xstep)^2 + (B - dist/2)^2  && $Assumptions }, {xstep, dist}]]

出力.. あまりにも厄介ではない.. ルート式には、求める係数が含まれています..

 (xstep == 
      Root[9 A^4 - 40 A^2 B^2 + 16 B^4 - 24 A^2 C^2 + 32 B^2 C^2 + 
   16 C^4 + (48 A^2 C NC - 64 B^2 C NC - 
      64 C^3 NC) #1 + (18 A^2 - 40 B^2 - 24 C^2 - 24 A^2 NC^2 + 
      32 B^2 NC^2 + 96 C^2 NC^2) #1^2 + (48 C NC - 
      64 C NC^3) #1^3 + (9 - 24 NC^2 + 16 NC^4) #1^4 &, 1] || 
   xstep == 
    Root[9 A^4 - 40 A^2 B^2 + 16 B^4 - 24 A^2 C^2 + 32 B^2 C^2 + 
      16 C^4 + (48 A^2 C NC - 64 B^2 C NC - 
       64 C^3 NC) #1 + (18 A^2 - 40 B^2 - 24 C^2 - 24 A^2 NC^2 + 
       32 B^2 NC^2 + 96 C^2 NC^2) #1^2 + (48 C NC - 
       64 C NC^3) #1^3 + (9 - 24 NC^2 + 16 NC^4) #1^4 &, 2] || 
  xstep == 
   Root[9 A^4 - 40 A^2 B^2 + 16 B^4 - 24 A^2 C^2 + 32 B^2 C^2 + 
   16 C^4 + (48 A^2 C NC - 64 B^2 C NC - 
      64 C^3 NC) #1 + (18 A^2 - 40 B^2 - 24 C^2 - 24 A^2 NC^2 + 
      32 B^2 NC^2 + 96 C^2 NC^2) #1^2 + (48 C NC - 
      64 C NC^3) #1^3 + (9 - 24 NC^2 + 16 NC^4) #1^4 &, 3] || 
   xstep == 
    Root[9 A^4 - 40 A^2 B^2 + 16 B^4 - 24 A^2 C^2 + 32 B^2 C^2 + 
    16 C^4 + (48 A^2 C NC - 64 B^2 C NC - 
      64 C^3 NC) #1 + (18 A^2 - 40 B^2 - 24 C^2 - 24 A^2 NC^2 + 
      32 B^2 NC^2 + 96 C^2 NC^2) #1^2 + (48 C NC - 
      64 C NC^3) #1^3 + (9 - 24 NC^2 + 16 NC^4) #1^4 &, 4]) && 
   3 A^2 + 4 B dist + xstep (8 C NC + 3 xstep) == 
       4 (B^2 + C^2 + NC^2 xstep^2)
于 2013-06-18T21:09:04.070 に答える