使用fsolve检查微分方程的稳定性

使用fsolve检查微分方程的稳定性,第1张

概述我想找到微分方程的平衡点,并检查平衡点是否稳定.这是一个最小的工作示例import numpy as np from scipy.optimize import fsolve dim = 2 A = np.random.uniform(size = (dim,dim)) sol, infodict, ier, mesg = fsolve(lambda x:

我想找到微分方程的平衡点,并检查平衡点是否稳定.

这是一个最小的工作示例

import numpy as npfrom scipy.optimize import fsolvedim = 2A = np.random.uniform(size = (dim,dim))sol,infodict,IEr,mesg = fsolve(lambda x: 1-np.dot(A,x),np.ones(dim),full_output = True)

为了找出解sol是否稳定,雅可比行列的所有特征值必须具有负实部.然而,Jacobian没有保存在infodict中,而是QR分解被保存在infodict中.

如何从fsolve的QR分解中获得Jacoian?

我能做的就像是

eigenvalues = np.linalg.eigvals(infodict["fjac"])*infodict["r"][ind]

ind是r的对角线条目,但我怀疑这是最好的方法.最佳答案QR分解很便宜:与查找特征值(一个迭代过程)相比,它需要一个固定数,大约n ** 3个.实际上,特征值发现算法之一涉及QR分解的迭代.因此,了解QR因子并不能让您更接近于具有特征值.与找到特征值的成本相比,通过乘法(也小于n ** 3次运算)重建矩阵的成本可以忽略不计.

结论是通过乘法重建雅可比行列是这里的方法.你在做什么(仅仅找到Q因子的特征值?)是不正确的.首先,使用np.triu_indices从给定的平面形式恢复R矩阵;然后将Q乘以R;然后找到特征值.

r = np.zeros((dim,dim))r[np.triu_indices(dim)] = infodict["r"]eigenvalues = np.linalg.eigvals(infodict["fjac"].dot(r))
总结

以上是内存溢出为你收集整理的使用fsolve检查微分方程的稳定性全部内容,希望文章能够帮你解决使用fsolve检查微分方程的稳定性所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1206009.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存