python sympy库实现代数符号运算及表达式推导

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)}$$"))
 

在这里插入图片描述
简单的函数值计算:
在这里插入图片描述

更多的其他代数运算符号可以参考该链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值