如何解决如何在 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 举报,一经查实,本站将立刻删除。