公告:本站正式转型为非交互式静态网站!
转型:本站将通过笔记和博客的形式继续为大家服务,关于 Mathematica 问答服务请移步至QQ群:365716997
联系:如有问题请联系QQ群管理员,或发送邮件至:lixuan.xyz@qq.com。
感谢:最后非常感谢大家多年来的支持与帮助!
参考《互联网跟帖评论服务管理规定》《中华人民共和国网络安全法》《网络信息内容生态治理规定》《互联网用户账号信息管理规定》

—— 2022-11-27

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

语法高亮:在编辑器中点击

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

支持LaTex数学公式
行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”,
行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”

社区建议QQ群:365716997

分类

+2 投票
2.0k 浏览

最近计算一个结构力学问题,结果十分冗长,需要化简,采用前几次化简的技巧,许多地方达不到化简预期目的,已经给出了详细的替换规则,可是替换后还是...

A = {{0, 0, 1, 0}, {0, 0, 0, 1}, {-(k11/m1), -(k12/m1), 0, 
    0}, {-(k21/m2), -(k22/m2), 0, 0}};
Eigenvalues[A];
Eigenvectors[A];

代码运行后运行下面的一段代码,运行时间略长,但可以返回结果的

\[EmptySet] = 
Inner[Times, Transpose[ Eigenvectors[A]], E^(Eigenvalues[A] t), 
List];
((\[EmptySet].(Inverse[\[EmptySet]] /. t -> 0) // FullSimplify // 
Collect[#, Cosh[_]] & // 
Collect[#, Sinh[_]] &) /. (2 (2 k12 k21 - k11 k22 ) m1 m2) :> 
Expand@(2 (2 k12 k21 - k11 k22 ) m1 m2)) /. 
k22^2 m1^2 + 4 k12 k21 m1 m2 - 2 k11 k22 m1 m2 + k11^2 m2^2 -> 
Expression1 /. {Sqrt[Expression1] - k22 m1 + k11 m2 -> 
Expression2, Sqrt[Expression1] + k22 m1 - k11 m2 -> Expression3, 
Sqrt[Expression1] - k22 m1 - k11 m2 -> Expression4, 
Sqrt[Expression1] + k22 m1 + k11 m2 -> 
Expression5, -Sqrt[Expression1] - k22 m1 - 
k11 m2 -> -Expression5} /. {Expression3 Expression5 -> 
Expression6, Expression2 Expression4 -> Expression7} /.
(k12 k21 - k11 k22)^p_ Expression1 ^Rational[p_, 2] -> Expression8^p

但是好多地方替换失效...

下面把这个问题一部分简化一下

FullSimplify[1/Sqrt[
 2 k22^2 m1^2 + 4 (2 k12 k21 - k11 k22) m1 m2 + 2 k11^2 m2^2], 
 Assumptions -> {k22^2 m1^2 + 2 (2 k12 k21 - k11 k22) m1 m2 + 
     k11^2 m2^2 == k}]

分类:函数 | 用户: mma-2-2-2 (1.3k 分)
修改于 用户:amita

1个回答

+3 投票
 
已采纳

遇到这种问题其实你自己可以检查出的。通用的方法就是把不能替换的地方复制出来,看看FullForm,你就会发现他和你的pattern不匹配。

如果一定要用这种方法的话,通用的修改规则:把换不了的复制到rule里面加上就可以了。比如说这个,你在换Expression1的时候加上:

(2 Subsuperscript[k, 22, 2] Subsuperscript[m, 1, 2]+4 (2 Subscript[k, 12] Subscript[k, 21]-Subscript[k, 11] Subscript[k, 22]) Subscript[m, 1] Subscript[m, 2]+2 Subsuperscript[k, 11, 2] Subsuperscript[m, 2, 2]):>2Expression1

就能得到你要的结果。

就这种换元化简问题来说,这种方法太笨了,基本不可行,因为只要是形式稍有变化,比如说乘个系数,或者是哪两项被合并了,pattern就会失效。这里的一些方法可以解决你的问题,code我就不复制到这了。

http://mathematica.stackexchange.com/questions/3822/can-i-simplify-an-expression-into-form-which-uses-my-own-definitions?lq=1

 

用户: happyfish (1.8k 分)
修改于 用户:amita
以前我一直以为代码复制到MMA会自动变为下标,后来发现根本不是,用下标不便于大家观察公式,已经把下标替换了 谢谢你
我用TermErsetzung是能替换的,而且效果貌似也不错,你可以试试
我试过了,可以把2提到根号外面去,太感谢了,就是代码太复杂了,不好消化,总之万分感谢
...