写在前面:符号计算与矩阵运算结合是十分常见的!这就需要sympy与numpy混合使用!此时存在一个问题:sympy有自己“独有的”的数据类型,在混合使用时需要把sympy数据类型统一成numpy和python中的普通数值!
说明:numpy数组/矩阵中是可以有sympy的“符号元素”的!这点已亲测!
(1)在numpy中进行符号赋值:
需要用float和int等进行类型转换:float(f.eval())
示例:
x,y = sympy.symbols('x y')
f = (x+y)**2 + (x+1)**2 + (y+3)**2
# 一阶导数:
fx = sympy.diff(f,x)
fy = sympy.diff(f,y)
grad_f1 = np.array([[fx],[fy]]) # numpy矩阵存入sympy字符元素
# 赋值:
x_tmp = 10
y_tmp = -1.5
grad_f1 = np.array([[float(fx.evalf(subs={x:x_tmp,y:y_tmp}))],
[float(fy.evalf(subs={x:x_tmp,y:y_tmp}))]])
# 用float进行类型转换!方便后面numpy进行普通数值计算!现在grad_f1就是普通数值矩阵!