0

私は、組み込みコントローラーで使用するための方程式をいくつか開発しているため、それらを可能な限り単純な (最小の項) に削減しようとしています。残念ながら、wxmaxima が吐き出すものは、必要な 5 つの方程式のそれぞれについて、ページの半分近くの長さです。私をいらいらさせているのは、それらが wxmaxima で実行できない明らかな単純化であることです。例えば:

-8*m5*sin(Te)*Te'^2*L1^2-8*m4*sin(Te)*Te'^2*L1^2

次のように削減できます。

-8*sin(Te)*L1^2*Te'^2*(m4+m5)

繰り返しますが、これは同様の潜在的な単純化で満たされた長い式の1 つの小さな部分です。すべての変数は、実変数である Te'、Te" などを含む Te、Ts、および Tw 項を除いて実定数です。 factor を試しました (式全体に適用すると機能しません) radcan 、ratsimp、fullratsimp、combine、collectterms ですが、何も機能していないようです. 式の 1 つを以下に示します.アポストロフィと二重引用符を変数の一部として使用できるようにするには、次の宣言が必要です:

declare("w'", alphabetic)$
declare("e'", alphabetic)$
declare("s'", alphabetic)$
declare("w\"", alphabetic)$
declare("e\"", alphabetic)$
declare("s\"", alphabetic)$

以下は完全な式の 1 つです。

(2*m5*Ts"*L2^2-m5*Te"*L2^2+8*m5*cos(Te/2)*Te'*Ts'*L1*L2+16*m5*sin(Te/2)*Ts"*L1*L2-4*m5*cos(Te/2)*Te'^2*L1*L2-8*m5*sin(Te/2)*Te"*L1*L2-2*m5*pcx5*sin(Tw)*Tw'^2*
L2-4*m5*pcx5*Ts'*sin(Tw)*Tw'*L2+2*m5*pcx5*Te'*sin(Tw)*Tw'*L2+2*m5*pcx5*cos(Tw)*Tw"*L2+4*m5*pcx5*Ts"*cos(Tw)*L2-2*m5*pcx5*Te"*cos(Tw)*L2+16*m5*sin(Te)*Te'
*Ts'*L1^2+16*m4*sin(Te)*Te'*Ts'*L1^2+8*m3*sin(Te)*Te'*Ts'*L1^2-16*m5*cos(Te)*Ts"*L1^2-16*m4*cos(Te)*Ts"*L1^2-8*m3*cos(Te)*Ts"*L1^2+16*m5*Ts"*L1^2+16*m4*Ts"*L1^2+
10*m3*Ts"*L1^2+2*m2*Ts"*L1^2-8*m5*sin(Te)*Te'^2*L1^2-8*m4*sin(Te)*Te'^2*L1^2-4*m3*sin(Te)*Te'^2*L1^2+8*m5*cos(Te)*Te"*L1^2+8*m4*cos(Te)*Te"*L1^2+4*m3*cos(Te)*Te"*
L1^2-8*m5*Te"*L1^2-8*m4*Te"*L1^2-8*m3*Te"*L1^2+4*m5*pcx5*cos((2*Tw+Te)/2)*Tw'^2*L1-4*m5*pcx5*cos((2*Tw-Te)/2)*Tw'^2*L1+8*m5*pcx5*Ts'*cos((2*Tw+Te)/2)*Tw'*L1-4*m5*pcx5*Te'*
cos((2*Tw+Te)/2)*Tw'*L1-8*m5*pcx5*Ts'*cos((2*Tw-Te)/2)*Tw'*L1+4*m5*pcx5*Te'*cos((2*Tw-Te)/2)*Tw'*L1+4*m5*pcx5*sin((2*Tw+Te)/2)*Tw"*L1-4*m5*pcx5*sin((2*Tw-Te)/2)*Tw"*L1+8*m5*
pcx5*Ts"*sin((2*Tw+Te)/2)*L1-6*m5*pcx5*Te"*sin((2*Tw+Te)/2)*L1+4*m5*pcx5*Te'*Ts'*cos((2*Tw+Te)/2)*L1-3*m5*pcx5*Te'^2*cos((2*Tw+Te)/2)*L1-8*m5*pcx5*Ts"*sin((2*Tw-Te)/2)*L1+2*m5*
pcx5*Te"*sin((2*Tw-Te)/2)*L1+4*m5*pcx5*Te'*Ts'*cos((2*Tw-Te)/2)*L1-m5*pcx5*Te'^2*cos((2*Tw-Te)/2)*L1+8*m3*pcx3*sin(Te)*Te'*Ts'*L1+4*m2*pcx2*sin(Te)*Te'*Ts'*L1+8*m4*
pcx4*cos(Te/2)*Te'*Ts'*L1-8*m3*pcx3*cos(Te)*Ts"*L1-4*m2*pcx2*cos(Te)*Ts"*L1+16*m4*pcx4*sin(Te/2)*Ts"*L1+4*m3*pcx3*Ts"*L1-4*m3*pcx3*sin(Te)*Te'^2*L1-2*m2*pcx2*
sin(Te)*Te'^2*L1-4*m4*pcx4*cos(Te/2)*Te'^2*L1+4*m3*pcx3*cos(Te)*Te"*L1+2*m2*pcx2*cos(Te)*Te"*L1-8*m4*pcx4*sin(Te/2)*Te"*L1+2*m5*pcx5^2*Tw"+2*Izz5*Tw"+2*m1*
pcy1^2*Ts"+2*m5*pcx5^2*Ts"+2*m4*pcx4^2*Ts"+2*m3*pcx3^2*Ts"+2*m2*pcx2^2*Ts"+2*m1*pcx1^2*Ts"+2*Izz5*Ts"+2*Izz4*Ts"+2*Izz3*Ts"+2*Izz2*Ts"+2*Izz1*Ts"-
(m5*pcx5^2+m4*pcx4^2+2*(m2*pcx2^2+Izz2)+Izz5+Izz4)*Te")/(2)
4

2 に答える 2

0

私の方法が標準的かどうかはわかりませんが、マキシマで計算を行うときはいつでも次のコマンドを使用します

ratsimp();

あなたの例では、私はやったでしょう

load(scifac)$
declare("`", alphabetic)$
ratsimp(-8*m5*sin(Te)*Te'^2*L1^2-8*m4*sin(Te)*Te'^2*L1^2);

これにより、出力が生成されます

(-8*m5-8*m4)*sin(Te)*Te`^2*L1^2

バッククォートも使用しましたが、それは ' が予約されていると信じているからです。また、バックティックを宣言した後は、すべての変数を宣言する必要はありませんでした。

于 2013-09-14T01:13:31.753 に答える