如何将数值前因纳入千里马中的一个根本?

时间:2017-03-10 16:23:54

标签: numerical maxima

(%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),因此即使结果的数量级也不明显。

1 个答案:

答案 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

需要进行一些实验才能找出合适的规则r1fr2f。请注意,这些规则与...^0.5匹配,但不匹配sqrt(...)(即指数= 1/2而不是0.5)。当然,如果您想匹配sqrt(...),您可以为此创建其他规则。

不保证能为您效劳 - 规则可能过多或过少。无论如何,这值得一试。