python - 为什么 Python 不能分离复数的实部和虚部?
问题描述
我正在编写代码来解决物理问题。总而言之,我使用了求解函数来确定二次方的根,它们打印在一个有 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
解决方案
np.real
不修改基础值,它只返回数据副本的真实部分。您只调用np.real
了print
函数,但没有改变比较。
您需要修改比较本身:
while mfp[i] < np.real(T_total_ns):
推荐阅读
- c++ - OpenGL使纹理放大而不是钳位
- reactjs - 每次加载页面时都会触发 Graphql 查询。如何保存在缓存中?
- python - 正确命名变量类型
- github - 如何在 Github 中创建具有多个存储库的项目?
- arrays - 在公共元素上组合数组
- javascript - 如何将一组对象转换回一个对象
- spring-boot - 混合 spring-integration 和 spring 调度器
- php - 启动时找不到 php_zip.dll
- javascript - 如何使用 JavaScript 单击 Safari 移动设备上的按钮?
- r - 如何检查 VAR 模型中的准确性()以及如何确定正确的季节性(是否有功能)