2013-07-15 62 views
0

我正在開發一些方程去嵌入式控制器,因此試圖將它們減少到最簡單(最少的條件)可能。不幸的是,對於我需要的5個等式,wxmaxima正在吐出的內容差不多長達半頁。令我感到不快的是,他們是我無法讓wxmaxima執行的明顯簡化。例如:Maxima缺少明顯的簡化

-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) 

同樣,這是一個長期的表達填充有類似的潛在簡化之一一部分。所有變量都是實數常量,除Te,Ts和Tw兩個項外,其中包括Te',Te「等,它們都是實數變量,我試過因子(如果應用於整個表達式,則不起作用)radcan ,ratsimp,fullratsimp,合併,collectterms,但似乎沒有任何工作的一個表達的是下面的,你需要以下聲明,以使單引號和雙引號被用作一個變量的一部分。

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

這裏是充滿表現之一:

(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) 
+0

你有沒有試過:'trigsimp','trigrat'和'trigreduce'? –

回答

1

您可以嘗試

load (scifac); 
declare("`", alphabetic); 
expr: (-8*m5*sin(Te)*Te`^2*L1^2-8*m4*sin(Te)*Te`^2*L1^2); 
gcfac(expr); 
               2 2 
(%o2)     - 8 (m5 + m4) sin(Te) Te` L1 

我使用`(反引號)不是'(撇號)。

也許optimize可能是有用的。

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 

我也使用反引號,但只是因爲我相信'是r eserved;並且在聲明反引號之後,我不必聲明所有變量。