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

线性公式转矩阵形式及位置匹配方法咨询(含代码结果格式化)

问题解答

1. 将der_1格式化为刚度矩阵形式

原代码中对势能求$u_1$的偏导得到der_1 = k₁(u₁ - u₃) - f₁,整理后可表示为刚度矩阵与位移向量的乘积等于力向量的形式:
$$
\begin{bmatrix}
k_1 & 0 & -k_1 & 0
\end{bmatrix}
\begin{bmatrix}
u_1 \ u_2 \ u_3 \ u_4
\end{bmatrix}

\begin{bmatrix}
f_1
\end{bmatrix}
$$

如果要通过SymPy直接输出矩阵形式,可以修改代码,将偏导结果整理为系数矩阵:

from sympy import symbols, diff, Matrix

# 定义符号
u_1, u_2, u_3, u_4 = symbols('u_1 u_2 u_3 u_4')
f_1, f_2, f_3, f_4 = symbols('f_1 f_2 f_3 f_4')
k_1, k_2, k_3, k_4 = symbols('k_1 k_2 k_3 k_4')

# 定义势能
U_internal = 0.5*k_1*(u_1 - u_3)**2 + 0.5*k_2*(u_3 - u_4)**2 + 0.5*k_3*(u_4 - u_2)**2
O_potential = (-f_1*u_1 - f_2*u_2 - f_3*u_3 - f_4*u_4)
potential_energy = U_internal + O_potential

# 求偏导并整理为矩阵行
der_1 = diff(potential_energy, u_1)
# 将偏导移项为 系数*u1 + 系数*u2 + ... = f1 的形式
left_side = der_1 + f_1
# 提取各位移变量的系数
coeffs = [left_side.coeff(var) for var in [u_1, u_2, u_3, u_4]]
stiffness_row = Matrix([coeffs])
displacement_vec = Matrix([u_1, u_2, u_3, u_4])
force_vec = Matrix([f_1])

print("刚度矩阵行:")
print(stiffness_row)
print("\n位移向量:")
print(displacement_vec)
print("\n力向量:")
print(force_vec)
print("\n矩阵形式:")
print(stiffness_row * displacement_vec, "=", force_vec)

运行后会输出规范的矩阵形式,对应刚度矩阵的第一行。

2. 普通线性公式转位置正确的矩阵形式

通用步骤如下:

  • 步骤1:整理线性公式
    将公式所有变量项移到左侧,常数/载荷项移到右侧,确保形式为:$a_1x_1 + a_2x_2 + ... + a_nx_n = b$
  • 步骤2:确定变量顺序
    明确所有目标变量的固定顺序(比如按$u_1$到$u_4$的顺序),这个顺序决定了矩阵列的对应关系
  • 步骤3:提取系数
    对每个变量,提取其在左侧表达式中的系数(如果变量未出现,系数为0)
  • 步骤4:构建矩阵
    将提取的系数按变量顺序组成一行,对应刚度矩阵的一行;右侧的$b$对应力向量的一个元素。如果有多个线性公式,将每行堆叠起来形成完整的刚度矩阵,右侧堆叠形成完整的力向量。

举个例子,若有公式 $2u_1 - 3u_3 = f_2$,按$u_1,u_2,u_3,u_4$的顺序,系数为[2, 0, -3, 0],对应刚度矩阵的一行:$\begin{bmatrix}2 & 0 & -3 & 0\end{bmatrix}$,力向量对应元素为$f_2$。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:55:19