当前位置:服务支持 >  软件文章 >  Python方程组求解:获取雅克比矩阵和海塞矩阵的方法

Python方程组求解:获取雅克比矩阵和海塞矩阵的方法

阅读数 10
点赞 0
article_banner

前面讲过当我们处理一个常微分方程组(一般对应于一个物理系统的求解)的时候,可以直接采用matlab中的ode函数比如ode15s和ode45,python的scipy中也有对应的函数像odeint和odebvp。但是,如果你想硬刚,自己去实现这些东西的话你就需要造很多的轮子,这里给出一个可以根据你输入的代数方程组获取雅克比矩阵和海塞矩阵的函数,并且我还特地将他做成了一个类哦,你可以直接进行实例化然后调用,非常方便,而且我还给出了测试函数。特别适合想硬刚底层算法的铁子。

主要的核心就是给出sympy中方程组的定义,以及sympy中将符号转化为可以计算的表达式的方式

# -*- coding: utf-8 -*-"""Created on 2022/1/25 10:45@Author: 123@Email: 985040320@qq.com@Describe: **加入文件描述, 要实现的功能, 注意事项等**"""class j_h_m:

    def __init__(self, funcs, vars):
        self.funcs = funcs
        self.vars = vars
        self.jac_m = sy.zeros(len(vars), len(vars))
        self.His_m = sy.zeros(len(vars), len(vars))

    # 获取雅克比矩阵
    def Ja(self):
        self.jac_m = self.funcs.jacobian(self.vars)
        return self.jac_m

    # 获取海塞矩阵
    def His(self):
        for i, fi in enumerate(self.funcs):
            for j, r in enumerate(self.vars):
                for k, s in enumerate(self.vars):
                    self.His_m[k, j] = sy.diff(sy.diff(fi, r), s)
        return self.His_mif __name__ == "__main__":
    import sympy as sy

    # 符号化
    vdot1, vdot2, y1, y2 = sy.symbols("vdot1, vdot2, y1, y2")
    # 构建方程组
    vdot1 = y2
    vdot2 = 1000 * (1 - y1 ** 2) * y2 - y1
    # 封装成sympy的符号矩阵
    funcs = sy.Matrix([vdot1, vdot2])
    args = sy.Matrix([y1, y2])
    # 实例化类并计算雅克比矩阵
    h = j_h_m(funcs, args)
    jac = h.Ja()
    his = h.His()
    # 将sympy的符号转化为函数表达式
    f = sy.lambdify([y1, y2], his, 'numpy')  # 通过这段话转化为可以计算的函数表达式
    print(jac)
    print(his)

喜欢的朋友可以给个关注或者联系我


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空