python - Sympy,矩阵,特征值,哦,我的……特征值错误
问题描述
我正在尝试做一些与我在教科书中找到的示例问题相匹配的压力计算。
sympy Matrix 的特征值方法给了我一个出乎我意料的答案。它包括虚数。不知道我做错了什么。任何帮助将不胜感激
我查看了文档,尝试对其进行四舍五入,或者查看我是否缺少任何其他关键字
from sympy import Matrix
def stressMatrix(x=0,y=0,z=0,xy=0,xz=0,yz=0):
sigma_x, sigma_y, sigma_z, tau_xy, tau_xz, tau_yz =sympy.var('sigma_x, sigma_y, sigma_z, tau_xy, tau_xz, tau_yz')
stressVars = {sigma_x: x, sigma_y: y, sigma_z: z, tau_xy:xy, tau_xz: xz, tau_yz: yz}
stressTensor = sympy.Matrix([[sigma_x,tau_xy,tau_xz],[tau_xy,sigma_y,tau_yz],[tau_xz,tau_yz,sigma_z]])
return stressTensor.subs(stressVars)
t = stressMatrix(x=-19,y=4.6,z=-8.3,xy=-4.7,xz=6.45,yz=11.8)
eigenValues = t.eigenvals()
我预计输出为 11.618、-9.001、-25.316
但我得到:
{-227/30 + 411091/(3600*(52767683/216000 + sqrt(7409803141670898)*I/72000)**(1/3)) + (52767683/216000 + sqrt(7409803141670898)*I/72000)**(1/3): 1, -227/30 + 411091/(3600*(-1/2 + sqrt(3)*I/2)*(52767683/216000 + sqrt(7409803141670898)*I/72000)**(1/3)) + (-1/2 + sqrt(3)*I/2)*(52767683/216000 + sqrt(7409803141670898)*I/72000)**(1/3): 1, -227/30 + (-1/2 - sqrt(3)*I/2)*(52767683/216000 + sqrt(7409803141670898)*I/72000)**(1/3) + 411091/(3600*(-1/2 - sqrt(3)*I/2)*(52767683/216000 + sqrt(7409803141670898)*I/72000)**(1/3)): 1}
解决方案
这些特征值是实数。您可以看到,如果您对它们进行数字评估:
In [25]: e1, e2, e3 = t.eigenvals()
In [26]: e1.evalf()
Out[26]: -25.3162883162696 - 0.e-22⋅ⅈ
In [27]: e2.evalf()
Out[27]: 11.6178013689878 - 0.e-19⋅ⅈ
In [28]: e3.evalf()
Out[28]: -9.00151305271824 + 0.e-22⋅ⅈ
SymPy 使用包含复数的表达式来显示根:
In [29]: e1
Out[29]:
________________________________
227 411091 ⎛ 1 √3⋅ⅈ⎞ ╱ 52767683 √7409803141670898⋅ⅈ
- ─── + ────────────────────────────────────────────────────── + ⎜- ─ + ────⎟⋅3 ╱ ──────── + ───────────────────
30 ________________________________ ⎝ 2 2 ⎠ ╲╱ 216000 72000
⎛ 1 √3⋅ⅈ⎞ ╱ 52767683 √7409803141670898⋅ⅈ
3600⋅⎜- ─ + ────⎟⋅3 ╱ ──────── + ───────────────────
⎝ 2 2 ⎠ ╲╱ 216000 72000
这是因为由于 Casus irreducibilis,没有其他方法可以使用部首来表达这些词根: https ://en.wikipedia.org/wiki/Casus_irreducibilis
推荐阅读
- eigen - 特征:矢量化求解器?
- ag-grid - 当我们在编辑模式下从一个单元格导航到另一个单元格时是否触发了事件 - ag grid
- sql - rownumber(nothing) - 跳过行
- matlab - 如何在曲面的脊上绘制点?
- postgresql - Postgres recursive with o PL:有多少组?
- visual-studio-code - 如何在 vscode-extension 开发过程中使用 spawn?
- java - 如何为 Spring boot 数据 mongodb 编写单元测试,不包括嵌入式 mongodb
- python-3.7 - 数字排列和组合的加法
- json - ruby 深度字符串化哈希
- c++ - 从Linux源代码生成Windows可执行文件?