有什么办法让Simplify不用sinh,cosh,cot之类的函数
mathematica吧
全部回复
仅看楼主
level 5
KeyTo9 楼主
Integrate[E^(-x), {x, 0, t}]
输出 1 - Cosh[t] + Sinh[t]
FullSimplify后没变,事实上这个式子最简结果1-E^(-t)
有时一些计算结果居然用cot之类的古书里才出现的函数表示了,现在我不用啊
F1过了,说Simplify是可以限定只用某些函数,可是要我全列出来我想用的函数办不到,有无禁止使用指定函数的办法?
有条路或许可以,用LeafCount把那些讨厌的函数复杂度调高,太麻烦 有无更好办法?版本11
2020年06月25日 09点06分 1
吧务
level 10
三角函数转指数可以用TrigToExp,其他的应该得自己替换吧
2020年06月25日 10点06分 2
我目前就是用替换 有时还需手算合并同类项[睡觉]
2020年06月25日 10点06分
不然就麻烦点,Simplify[Integrate[E^(-x), {x, 0, t}],Trig->True,TransformationFunctions->{Automatic,TrigToExp,ExpToTrig},ComplexityFunction->(If[FreeQ[Cosh|Sinh]@
#,LeafCount@#
,10000]&)]
2020年06月25日 11点06分
[阴险]果然要LeafCount
2020年06月25日 11点06分
@KeyTo9 因为LeafCount是内置函数所能够容易构成的最接近Automatic复杂度函数的函数了……内置的Automatic那个不给看……
2020年06月25日 11点06分
level 7
正在看古书的表示有被冒犯[滑稽]
这里能想到两个办法,第一使用 列出Simplify中你想要的所有函数是能办到的。使用Names["System`*"]获得所有系统函数的名字(有装package的这里注意加上package里你想用的函数),然后Complement掉你不想要的函数,剩下就是你想要的了。说起来我怎么没在Simplify里看到这个内容,能提示下怎么操作或者截张图让我看看吗?
第二你可以改写Cosh和Sinh的定义,只要你觉得通顺,做法如下。
Unprotect[Cosh, Sinh]
然后重写一遍Cosh和Sinh的定义,别写错了。最好把自变量的范围也考虑进去。
然后就可以拿着用了
2020年06月25日 15点06分 3
level 7
这是第二种方法的截图。
2020年06月25日 15点06分 4
这方法看样子能行,我再测试一下,毕竟对底层动手了 但愿别在什么古怪地方卡BUG了[真棒]
2020年06月26日 03点06分
那要不直接改$Post,对所有Sinh Coh自动替换?这样不会干涉其他函数的内部运作
2020年06月26日 05点06分
@asdasd1dsadsa 感觉可以,拿Simplify和ReplaceRepeated自己定规则,然后 $Post执行。
2020年06月26日 06点06分
@asdasd1dsadsa 学习了,还是首次知道$Post这么好用的东西[啊]
2020年06月26日 15点06分
吧务
level 9
Integrate[E^(-x),{x,0,t}]//TrigToExp
FullSimplify[Integrate[E^(-x),{x,0,t}],ComplexityFunction->StringLength@*ToString]
2020年06月26日 04点06分 5
妙啊,我还没用过这招呢
2020年06月26日 05点06分
[玫瑰]
2020年06月26日 15点06分
[阴险][大拇指]
2021年02月27日 05点02分
level 5
KeyTo9 楼主
TrigToExp 会误伤sin,cos, tan,在我的项目里不适合
2020年06月26日 15点06分 6
level 5
KeyTo9 楼主
(*不准用双曲函数 用2楼asdasd1dsadsa的方法 *)
killsinh[exp_]:=exp/.{Sinh[x_]->(E^(x)-E^(-x))/2,Cosh[x_]->(E^(x)+E^(-x))/2,ArcSinh[x_]->Log[x+Sqrt[1+x^2]]}
si2[exp_]:=Simplify[killsinh@exp,ComplexityFunction->(If[FreeQ[Cosh|Sinh|Tanh|Cot|Sec]@
#,LeafCount@#
,10000]&)];
测试例子
FullForm@si2[Sin[t]/(1 - Cos[t])]
结果是Times[-1, Power[Plus[-1, Cos[t]], -1], Sin[t]]
在前面多了个负号,实质上复杂度更大了,
这只是小小式子的问题,如果式子更复杂, 说不定会有其他BUG[阴险]
2020年07月05日 03点07分 7
这应该是LeafCount的问题
2020年07月05日 12点07分
1