微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Python 中为稀疏矩阵在整个对角线上放置一个条目

如何解决如何在 Python 中为稀疏矩阵在整个对角线上放置一个条目

我正在寻求构建一个矩阵,我将计算其逆矩阵。这将用于求解非线性抛物线偏微分方程的隐式方法。我目前的计算是,这将变得显而易见,给我一个奇异的(不可能的逆)矩阵。就上下文而言,实际上矩阵的维度为 30 x 30,但在这些示例中,我使用较小的矩阵进行测试。

假设我想创建一个大的方形稀疏矩阵。使用 spdiags 只允许您单独输入主、下和上对角线的成员。那么如何让每个对角线的所有条目都有一个值?

示例代码

import numpy as np 
from scipy.sparse import spdiags
from numpy.linalg import inv 

updiag = -0.25
diag = 0.5
lowdiag = -0.25
        
Jdata = np.array([[diag],[lowdiag],[updiag]])
Diags = [0,-1,1]
J = spdiags(Jdata,Diags,3,3).toarray() 
print(J)
inverseJ = inv(J)
print(inverseJ)

这将产生一个 3 x 3 矩阵,但只给出每个对角线的第一个条目。我想知道使用 np.fill_diagonal 但这首先需要一个矩阵,并且只需要主对角线。我是不是误会了什么?

解决方法

spdiags 的第一个参数是用作对角线的值矩阵。你可以这样使用它:

Jdata = np.array([3 * [diag],3 * [lowdiag],3 * [updiag]])
Diags = [0,-1,1]
J = spdiags(Jdata,Diags,3,3).toarray() 
print(J)
# [[ 0.5  -0.25  0.  ]
#  [-0.25  0.5  -0.25]
#  [ 0.   -0.25  0.5 ]]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。