python sympy.symbols 使用到float如何处理(程序抛出异常)

m0_37700780 2019-08-21 09:34:10
import math
from sympy import *
from scipy.stats import norm
import sympy

C3 = sympy.symbols('C3')
E3 = C3
E4 = 1062936600
E5 = 0.0386
E6 = 5.67
E7 = 0.4
E8 = E3*norm.cdf((math.log(E3/E4)+(E5+pow(E7,2)/2)*E6)/E7/pow(E6,0.5))-E4*math.exp(-E5*E6)*norm.cdf((math.log(E3/E4)+(E5+pow(E7,2)/2)*E6)/E7/pow(E6,0.5)-E7*pow(E6,0.5))

E8 = E3*norm.cdf((math.log(E3/E4)+(E5+pow(E7,2)/2)*E6)/E7/pow(E6,0.5))-E4*math.exp(-E5*E6)*norm.cdf((math.log(E3/E4)+(E5+pow(E7,2)/2)*E6)/E7/pow(E6,0.5)-E7*pow(E6,0.5))
File "E:\Anaconda3\lib\site-packages\sympy\core\expr.py", line 256, in __float__
raise TypeError("can't convert expression to float")
TypeError: can't convert expression to float

如何处理这类异常 ,我试用float(C3) 也会报这个异常
...全文
853 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
m0_37700780 2019-08-22
  • 打赏
  • 举报
回复
主要是 math.log(E3/E4) 会报 ("can't convert expression to float") 这个错误, 我如果把math.log(E3/E4)改为了sympy.log(E3/E4)之后,在norm.cdf中又会报("cannot determine truth value of Relational")的错误。
不知道norm.cdf 在 sympy库中有没有 可以代替的函数。
黄哥Python培训 2019-08-21
  • 打赏
  • 举报
回复
去检查这个表达式 E3*norm.cdf((math.log(E3/E4)+(E5+pow(E7,2)/2)*E6)/E7/pow(E6,0.5))-E4*math.exp(-E5*E6)*norm.cdf((math.log(E3/E4)+(E5+pow(E7,2)/2)*E6)/E7/pow(E6,0.5)-E7*pow(E6,0.5)) 写错了。 建议用变量去代替部分计算公式,最后用多个变量组合成一个表达式。

37,741

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧