首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maxima缺失明显的简化

Maxima缺失明显的简化
EN

Stack Overflow用户
提问于 2013-07-15 04:40:26
回答 2查看 574关注 0票数 0

我正在开发一些在嵌入式控制器上使用的方程,从而尽量将它们简化为最简单的(最少的术语)。不幸的是,对于我所需要的5个方程,wxmaxima所吐出来的东西几乎只有半页长。令我恼火的是,它们显然是简化的,我无法让wxmaxima执行。例如:

代码语言:javascript
复制
-8*m5*sin(Te)*Te'^2*L1^2-8*m4*sin(Te)*Te'^2*L1^2

可减为:

代码语言:javascript
复制
-8*sin(Te)*L1^2*Te'^2*(m4+m5)

同样,这是一个包含类似的潜在简化的长表达式的部分。所有变量都是实常量,除了Te、Ts和Tw项(其中包括Te‘、Te“等),它们都是实变量。我尝试过因子(如果应用于整个表达式,则不起作用)、radcan、ratsimp、fullratsimp、combine、quote项,但似乎没有什么有用的。下面的表达式中有一个是需要声明的,允许将撇号和双引号作为变量的一部分使用:

代码语言:javascript
复制
declare("w'", alphabetic)$
declare("e'", alphabetic)$
declare("s'", alphabetic)$
declare("w\"", alphabetic)$
declare("e\"", alphabetic)$
declare("s\"", alphabetic)$

这里有一个完整的表达式:

代码语言:javascript
复制
(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)
EN

回答 2

Stack Overflow用户

发布于 2013-07-15 12:43:28

你可以试试

代码语言:javascript
复制
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

我使用‘(反勾) not’(撇号)。

也许优化是有用的。

票数 1
EN

Stack Overflow用户

发布于 2013-09-14 01:13:31

我不知道我的方法是否是标准的,但是每当我用maxima进行计算时,我就使用以下命令

代码语言:javascript
复制
ratsimp();

所以在你的例子中,我会

代码语言:javascript
复制
load(scifac)$
declare("`", alphabetic)$
ratsimp(-8*m5*sin(Te)*Te'^2*L1^2-8*m4*sin(Te)*Te'^2*L1^2);

这将生成输出。

代码语言:javascript
复制
(-8*m5-8*m4)*sin(Te)*Te`^2*L1^2

我也使用回勾,但只是因为我相信‘是保留的;并且,在声明回勾后,我不必声明所有的变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17646886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档