python – 数学表达式中String类型的字符串操作

想象一下

exp(49/200)+(x-49/200)

我想传递函数“roundn”的参数,无论是不是加法或减法的操作
所以我的表情变成了

roundn(exp(roundn(49/200, n)), n) + (x - roundn(49/200, n)

我想要操纵的表达是这样的:

exp(49/200)+exp(49/200)*(x-49/200)+1/2*exp(49/200)*(x-49/200)^2+1/6*exp(49/200)*(x-49/200)^3+1/24*exp(49/200)*(x-49/200)^4+1/120*exp(49/200)*(x-49/200)^5+1/720*exp(49/200)*(x-49/200)^6+1/5040*exp(49/200)*(x-49/200)^7+1/40320*exp(49/200)*(x-49/200)^8+1/362880*exp(49/200)*(x-49/200)^9+1/3628800*exp(49/200)*(x-49/200)^10+1/39916800*exp(49/200)*(x-49/200)^11

解决方法:

也许你认为你想要这样做,但你真的不想这样做.新的Pythoners通常认为他们需要舍入浮点数,因为在评估时他们会得到意想不到的结果(如1.0 / 10 = 0.100000000000001).我没有在你的表达式上做一些愚蠢的字符串替换,而是为round(49/200,n)创建了一个变量,并进行了一些格式清理. exp(49/200)也不需要评估13次,只需执行一次并参考计算值.

zz = round(49/200,n)
e_zz = exp(zz)
ans = (e_zz + 
    e_zz * (x-zz) +
    1/2 * e_zz * (x-zz)**2 +
    1/6 * e_zz * (x-zz)**3 +
    1/24 * e_zz * (x-zz)**4 +
    1/120 * e_zz * (x-zz)**5 +
    1/720 * e_zz * (x-zz)**6 +
    1/5040 * e_zz * (x-zz)**7 +
    1/40320 * e_zz * (x-zz)**8 +
    1/362880 * e_zz * (x-zz)**9 +
    1/3628800 * e_zz * (x-zz)**10 +
    1/39916800 * e_zz * (x-zz)**11)

将e提高到四舍五入的数字几乎是不合适的.同样地,将四舍五入的数字提高到11’次幂. (另请注意,在Python中,取幂运算符是**,而不是^.)

编辑:
如果S.Lott没有建议代数简化,我会原样保留原样.但是* e_zz可以在每个术语中被考虑,使得更简单(并且可能更快):

zz = round(49/200,n)
e_zz = exp(zz)
ans = e_zz * (1 + 
    (x-zz) +
    1/2 * (x-zz)**2 +
    1/6 * (x-zz)**3 +
    1/24 * (x-zz)**4 +
    1/120 * (x-zz)**5 +
    1/720 * (x-zz)**6 +
    1/5040 * (x-zz)**7 +
    1/40320 * (x-zz)**8 +
    1/362880 * (x-zz)**9 +
    1/3628800 * (x-zz)**10 +
    1/39916800 * (x-zz)**11)
上一篇:【ABAP系列】SAP ABAP 的替代和校验


下一篇:Loadrunner查询博客列表并循环删除博客列表中的所有博客