You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SymPy/Numpy求解矩阵方程组ke*u=f?遇奇异矩阵等问题

求解SymPy矩阵方程组的问题

我的代码如下:

import sys 
import os 
sys.path.append(os.getcwd())
import sympy as sp 
import numpy as np 
from includes.Truss import Truss 

U = sp.Matrix([[0,0],[0,10]])

boundary_conditions=[]
boundary_conditions.append([0])
boundary_conditions.append([''])

truss = Truss(U,boundary_conditions,30000000,2.0,10.0,2)
ke = truss.ke(10.0)

f = sp.Matrix([[0,-100.0]])

u = np.linalg.solve(ke,f)

ux = u[0]
uy = u[1]

print(f'ux = {ux}, uy = {uy}')

我有一个2×2的SymPy矩阵ke,需要求解方程组ke*u=f(其中f为已知矩阵,u代表未知位移量ux、uy),尝试多种方法仍未得到解,遇到以下问题:

使用np.linalg.solve(ke,f)时触发错误:

Traceback (most recent call last):
  File "c:\Users\famatto\OneDrive\Documents\birnic\test\trussexample002.py", line 19, in <module>  
    u = np.linalg.solve(ke,f)
        ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\famatto\OneDrive\Documents\birnic\.venv\Lib\site-packages\numpy\linalg\linalg.py", line 409, in solve
    r = gufunc(a, b, signature=signature, extobj=extobj)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
numpy.core._exceptions._UFuncInputCastingError: Cannot cast ufunc 'solve' input 0 from dtype('O') to dtype('float64') with casting rule 'same_kind'
PS C:\Users\famatto\OneDrive\Documents\birnic> 

尝试使用u = ke.solve(f)时,又出现如下错误:

Traceback (most recent call last):
  File "c:\Users\famatto\OneDrive\Documents\birnic\test\trussexample003.py", line 26, in <module>  
    u = ke.solve(f)
        ^^^^^^^^^^^
  File "C:\Users\famatto\OneDrive\Documents\birnic\.venv\Lib\site-packages\sympy\matrices\matrices.py", line 2144, in solve
    return _solve(self, rhs, method=method)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\famatto\OneDrive\Documents\birnic\.venv\Lib\site-packages\sympy\matrices\solvers.py", line 758, in _solve
    raise NonInvertibleMatrixError("Matrix det == 0; not invertible.")
sympy.matrices.common.NonInvertibleMatrixError: Matrix det == 0; not invertible.
PS C:\Users\famatto\OneDrive\Documents\birnic>

ke的具体形式为:

Matrix([[5000000.00000000, -5000000.00000000], [-5000000.00000000, 5000000.00000000]])

希望能通过SymPy、NumPy或其他Python方法得到ux、uy的浮点数值解。

内容的提问来源于stack exchange,提问作者famatto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 21:05:23