python - Python sympy 方程到矩阵
问题描述
我正在尝试将 4 个方程转换为以下矩阵形式,但输出中的第 4 行不正确。任何帮助,将不胜感激:
from sympy import linear_eq_to_matrix, symbols, simplify, sin, cos, Eq, pprint
A, B, C, D, z, L, k = symbols('A, B, C, D, z, L, k')
fnc = A + B*z + C*sin(k*z) + D*cos(k*z)
bc1 = Eq(0, fnc.subs(z,0))
bc2 = Eq(0, fnc.subs(z,L))
bc3 = Eq(0, fnc.diff(z,2).subs(z,0))
bc4 = Eq(0, fnc.diff(z,2).subs(z,L))
a, b = linear_eq_to_matrix([bc1, bc2, bc3, bc4], [A, B, C, D])
pprint(bc1)
pprint(bc2)
pprint(bc3)
pprint(bc4)
pprint(a)
我得到以下输出:
预期输出:
解决方案
看来,如果您bc4
在将系统转换为矩阵形式之前简单地使用以下代码行进行扩展,您会得到正确的结果:
bc4 = sympy.expand(Eq(0, fnc.diff(z,2).subs(z,L)))
在其余代码不变的情况下,这将产生以下输出:
0 = A + D
0 = A + B⋅L + C⋅sin(L⋅k) + D⋅cos(L⋅k)
2
0 = -D⋅k
2 2
0 = - C⋅k ⋅sin(L⋅k) - D⋅k ⋅cos(L⋅k)
⎡-1 0 0 -1 ⎤
⎢ ⎥
⎢-1 -L -sin(L⋅k) -cos(L⋅k) ⎥
⎢ ⎥
⎢ 2 ⎥
⎢0 0 0 k ⎥
⎢ ⎥
⎢ 2 2 ⎥
⎣0 0 k ⋅sin(L⋅k) k ⋅cos(L⋅k)⎦
推荐阅读
- sql - 了解 DateTime 列上的 SQL 索引
- sql - 如何将日期和时间维度合并到 DateTime?
- azure - Azure Databricks 作业的 DevOps
- c++ - 为什么用 std::thread 调用复制构造函数 3 次?
- ruby-on-rails - 如何将标头注入 OmniAuth 模拟测试
- android - MaterialShapeDrawable 使我的 CardView 在 API 28 及更低版本上不可见
- jquery - Flask 响应式闪存消息
- image - Tkinter 无法删除图像线
- delphi - 从指针调用匿名函数
- c# - Swagger ui 不处理已删除的控制器仍然很少但不起作用