matlab是工程和科研人员必备的工具利器, 其一大功能就是可以实现代数符号运算,以及表达式推导,或者复杂表达式的化简工作, 是广大粗心而没有耐心计算人员的福音.
clc
close all
clear all
syms theta1 theta2 theta3;
syms delta1 delta2 delta3;
lm11 = cos(theta1) * sin(delta1);
lm12 = sin(theta1) * sin(delta1);
lm13 = cos(delta1);
lm21 = cos(theta2) * sin(delta2);
lm22 = sin(theta2) * sin(delta2);
lm23 = cos(delta2);
lm31 = cos(theta3) * sin(delta3);
lm32 = sin(theta3) * sin(delta3);
lm33 = cos(delta3);
lightMatrix = [lm11,lm12,lm13;lm21,lm22,lm23;lm31,lm32,lm33]
lightMatrix_Inv = inv(lightMatrix);
simplify(lightMatrix_Inv)
latex(lightMatrix)
显示latex表达式,结果如下:
(
sin
(
δ
1
)
cos
(
θ
1
)
sin
(
δ
1
)
sin
(
θ
1
)
cos
(
δ
1
)
sin
(
δ
2
)
cos
(
θ
2
)
sin
(
δ
2
)
sin
(
θ
2
)
cos
(
δ
2
)
sin
(
δ
3
)
cos
(
θ
3
)
sin
(
δ
3
)
sin
(
θ
3
)
cos
(
δ
3
)
)
\left(\begin{array}{ccc} \sin\left(\delta _{1}\right)\,\cos\left(\theta _{1}\right) & \sin\left(\delta _{1}\right)\,\sin\left(\theta _{1}\right) & \cos\left(\delta _{1}\right)\\ \sin\left(\delta _{2}\right)\,\cos\left(\theta _{2}\right) & \sin\left(\delta _{2}\right)\,\sin\left(\theta _{2}\right) & \cos\left(\delta _{2}\right)\\ \sin\left(\delta _{3}\right)\,\cos\left(\theta _{3}\right) & \sin\left(\delta _{3}\right)\,\sin\left(\theta _{3}\right) & \cos\left(\delta _{3}\right) \end{array}\right)
⎝
⎛sin(δ1)cos(θ1)sin(δ2)cos(θ2)sin(δ3)cos(θ3)sin(δ1)sin(θ1)sin(δ2)sin(θ2)sin(δ3)sin(θ3)cos(δ1)cos(δ2)cos(δ3)⎠
⎞
人生苦短,我用python。python中实现代数符号运算和推导需要利用symps库,总体使用方法基本与matlab中相一致。
在pycharm中无法实现表达式的latex格式显示,导致公式看起来繁琐复杂,不够清晰明了,容易导致错误。
import sympy as sy
sy.init_printing()
def DeriveFormular():
import sympy as sym
theta1, theta2, theta3 = sym.symbols('theta_1,theta_2,theta_3')
delta1, delta2, delta3 = sym.symbols('delta_1,delta_2,delta_3')
lm11 = sym.cos(theta1) * sym.sin(delta1)
lm12 = sym.sin(theta1) * sym.sin(delta1)
lm13 = sym.cos(delta1)
lm21 = sym.cos(theta2) * sym.sin(delta2)
lm22 = sym.sin(theta2) * sym.sin(delta2)
lm23 = sym.cos(delta2)
lm31 = sym.cos(theta3) * sym.sin(delta3)
lm32 = sym.sin(theta3) * sym.sin(delta3)
lm33 = sym.cos(delta3)
lightMatrix = sym.Matrix([[lm11, lm12, lm13], [lm21, lm22, lm23], [lm31, lm32, lm33]])
inv_T = lightMatrix.inv()
inv_T = sym.simplify(inv_T)
print(lightMatrix)
print(inv_T)
可以在jupyter notebook中实现公式的latex格式显示:
from IPython.display import display, Latex
import sympy as sy
sy.init_printing()
def DeriveFormular():
import sympy as sym
theta1,theta2,theta3 = sym.symbols('theta_1,theta_2,theta_3')
delta1,delta2,delta3 = sym.symbols('delta_1,delta_2,delta_3')
lm11 = sym.cos(theta1)*sym.sin(delta1)
lm12 = sym.sin(theta1)*sym.sin(delta1)
lm13 = sym.cos(delta1)
lm21 = sym.cos(theta2)*sym.sin(delta2)
lm22 = sym.sin(theta2)*sym.sin(delta2)
lm23 = sym.cos(delta2)
lm31 = sym.cos(theta3)*sym.sin(delta3)
lm32 = sym.sin(theta3)*sym.sin(delta3)
lm33 = sym.cos(delta3)
lightMatrix = sym.Matrix([[lm11,lm12,lm13],[lm21,lm22,lm23],[lm31,lm32,lm33]])
# display(Latex(f"$${sy.latex(lightMatrix)}$$"))
display(Latex(f"$${sy.latex(lightMatrix.inv())}$$"))
inv_T = lightMatrix.inv()
inv_T = sym.simplify(inv_T)
display(Latex(f"$${sy.latex(inv_T)}$$"))
简单的函数值计算:
更多的其他代数运算符号可以参考该链接