(%i2) x : expand(cosh(1)*sqrt(3+5*t));
(%o2) cosh(1) sqrt(5 t + 3)
(%i3) expand(float(x));
0.5
(%o3) 1.543080634815244 (5.0 t + 3.0)
如何让Maxima将前因纳入激进派?我正在寻找在这种情况下产生类似
的东西 0.5
(%o3) (11.90548922 t + 7.143293537)
对于数量这么小的数字,这不是什么大问题,但对于数值计算,Maxima倾向于替换可能涉及非常大的分母的理性近似,因此我最终得到的因子是前因子非常小(如6.35324353×10 -23 )并且平方根内的数字是非常大的数字(如5212548545863256475196584785455844385452665612552468),因此即使结果的数量级也不明显。
答案 0 :(得分:0)
这是一个使用模式匹配的解决方案。
(%i1) matchdeclare (cc, numberp, [bb, aa], all) $
(%i2) defrule (r1f, cc*bb^0.5, foof(cc,bb));
0.5
(%o2) r1f : bb cc -> foof(cc, bb)
(%i3) defrule (r2f, aa*cc*bb^0.5, aa*foof(cc,bb));
0.5
(%o3) r2f : aa bb cc -> aa foof(cc, bb)
(%i4) foof(a,b):= (expand(a^2*b))^0.5 $
(%i5) apply1 (1.543080634815244*(5.0*t + 3.0)^0.5, r1f, r2f);
0.5
(%o5) (11.90548922770908 t + 7.143293536625449)
(%i6) apply1 (1.543080634815244*x*y*(5.0*t + 3.0)^0.5, r1f, r2f);
0.5
(%o6) (11.90548922770908 t + 7.143293536625449) x y
(%i7) apply1 (1/(1 + 345.43*(2.23e-2*u + 8.3e-4)^0.5), r1f, r2f);
1
(%o7) --------------------------------------------
0.5
(2660.87803327 u + 99.03716446700001) + 1
需要进行一些实验才能找出合适的规则r1f
和r2f
。请注意,这些规则与...^0.5
匹配,但不匹配sqrt(...)
(即指数= 1/2而不是0.5)。当然,如果您想匹配sqrt(...)
,您可以为此创建其他规则。
不保证能为您效劳 - 规则可能过多或过少。无论如何,这值得一试。