【发布时间】:2020-04-26 19:05:12
【问题描述】:
我正在编写代码来解决物理问题。总而言之,我使用了 solve 函数来确定二次方的根,它们打印在一个有 2 个条目的列表中。我正在提取第一个值(即列表的第一个条目)并将其与随机生成的数字的值(或更具体地说,与函数 -ln(random #)的值进行比较。代码指示错误,只要列表的第一个条目(第一个根)是复杂的(即 A + BI)。因此,我很想看看如果我只考虑实部会发生什么。我应用了 np.real(A + BI) 并且返回是仍然是 A + BI,这仍然会导致错误。我尝试了几种仅提取实部的方法均未成功。有什么建议吗?提前谢谢!
下面是部分代码:
from sympy.solvers import solve
from sympy import Symbol
s = Symbol("s")
sol = solve((x_0+(omega_x*s)-x_c)**2+(y_0+(omega_y*s)-y_c)**2-9, s)
print("s = ", sol)
#"p" coordinates of intersection point with sphere
p = Symbol("p")
psol = solve((x_0+(omega_x*p)-x_d)**2+(y_0+(omega_y*p)-y_d)**2+(z_0+(omega_z*p)-z_d)**2-1, p)
print("p = ", psol)
#"s" regions
s_region1 = np.real(sol[0])
s_region2 = np.real(sol[1]) - np.real(sol[0])
s_region3 = np.real(psol[0]) - np.real(sol[1])
print("s_region1 = ", s_region1)
print("s_region2 = ", s_region2)
print("s_region3 = ", s_region3)
#Total number of mfp's in Region 1 and Region 2 (no scattering)
T1_ns = (s_region1 + s_region3)*sigma_1a
T2_ns = s_region2*sigma_2a
T_total_ns = T1_ns + T2_ns
print("T1_ns =", T1_ns)
print("T2_ns = ", T2_ns)
print("T_total_ns =", np.real(T_total_ns))
mfp[i] = (-1*np.log(np.random.random()))
while (mfp[i] < T_total_ns):
if np.random.random() > 1:
mfp[i] = mfp[i] + (-1*np.log(np.random.random()))
else:
break
else:
CountP = CountP + 1
Along with the corresponding error:
TypeError Traceback (most recent call last)
<ipython-input-93-131a66cd0909> in <module>
152
153 mfp[i] = (-1*np.log(np.random.random()))
--> 154 while (mfp[i] < T_total_ns):
155 if np.random.random() > 1:
156 mfp[i] = mfp[i] + (-1*np.log(np.random.random()))
C:\ProgramData\Anaconda3\lib\site-packages\sympy\core\expr.py in __gt__(self, other)
335 for me in (self, other):
336 if me.is_complex and me.is_real is False:
--> 337 raise TypeError("Invalid comparison of complex %s" % me)
338 if me is S.NaN:
339 raise TypeError("Invalid NaN comparison")
TypeError: Invalid comparison of complex 2.9397439170991 - 0.178627638621441*I
【问题讨论】:
-
嗨,彼得,尝试运行您的代码。也许我遗漏了一些东西,但我不确定你是如何得到这个错误的。 x_0、omega_x、x_c、y_0、omega_y 和 y_c 都是未定义和未声明的。所以这有点难以重现。 mfp 和 CountP 未初始化。如果可能,尝试包括所有出现的变量?此外,如果随机数正好为 0,np.log(np.random.random() 可能会使您的脚本崩溃。最后,为了便于调试和重现性,您可能希望使用 np.random.seed(somenumber)
-
嗨,Ruslan,感谢您的尝试。我在这里重新发布了一个捕获问题的工作代码:stackoverflow.com/questions/61448225/…
标签: python