SymPy中符号phi无法替换为实数值的问题解决求助
解决SymPy中phi符号替换无效的问题
问题根源
- SymPy的
subs方法不会原地修改原表达式,它会返回一个替换后的新表达式,你之前没有将返回值重新赋值给N1-N4,所以后续构造矩阵时用的还是带phi的原始符号式。 - 直接给
phi = 0.785是覆盖了之前定义的符号变量,但N1-N4已经绑定了最初的符号phi,因此不会对已定义的表达式产生影响。
正确解决方案
方法一:重新赋值subs的结果
将替换后的表达式重新赋值给原变量,确保后续代码使用的是替换后的数值表达式:
import sympy from sympy import symbols, Matrix phi = symbols('phi') x = symbols('x') y = symbols('y') N1 = sympy.cos(phi) N2 = sympy.sin(phi) N3 = -sympy.sin(phi) N4 = sympy.cos(phi) # 关键:将subs返回的新表达式赋值给原变量 N1 = N1.subs(phi, sympy.Float(0.785)) N2 = N2.subs(phi, sympy.Float(0.785)) N3 = N3.subs(phi, sympy.Float(0.785)) N4 = N4.subs(phi, sympy.Float(0.785)) x=4 y=2 UVG = Matrix(2, 1, [x, y]) T = Matrix(2, 2, [N1, N2, N3, N4]) UVL = T*UVG print(UVL)
方法二:在最终结果上统一替换
如果需要保留原始的符号表达式,可在计算出UVL后一次性替换phi的值,更简洁:
import sympy from sympy import symbols, Matrix phi = symbols('phi') x = symbols('x') y = symbols('y') N1 = sympy.cos(phi) N2 = sympy.sin(phi) N3 = -sympy.sin(phi) N4 = sympy.cos(phi) x=4 y=2 UVG = Matrix(2, 1, [x, y]) T = Matrix(2, 2, [N1, N2, N3, N4]) UVL = T*UVG # 对最终结果执行替换 UVL = UVL.subs(phi, sympy.Float(0.785)) print(UVL)
方法三:直接用数值构造表达式
如果phi不需要作为符号变量进行其他运算,直接用数值定义N1-N4即可:
import sympy from sympy import Matrix phi_val = sympy.Float(0.785) N1 = sympy.cos(phi_val) N2 = sympy.sin(phi_val) N3 = -sympy.sin(phi_val) N4 = sympy.cos(phi_val) x=4 y=2 UVG = Matrix(2, 1, [x, y]) T = Matrix(2, 2, [N1, N2, N3, N4]) UVL = T*UVG print(UVL)
内容的提问来源于stack exchange,提问作者prusso
相关产品推荐
相关产品推荐

