gpt4 book ai didi

python - 使用 scipy.sparse.diags 的 Scipy 三对角矩阵

转载 作者:行者123 更新时间:2023-11-28 22:18:41 25 4
gpt4 key购买 nike

难以从 numpy 数组生成三对角矩阵。我设法复制了给出的结果 here ,但我无法将这些技术应用于我的问题。我也可能误解了 scipy.sparse.diag 的应用.

就上下文而言,我正在研究一个问题,该问题需要生成三对角矩阵以使用有限差分数值求解常微分方程。

from scipy.sparse import diags
import numpy as np

v1 = [3*i**2 +(i/2) for i in range(1, 6)]
v2 = [-(6*i**2 - 1) for i in range(1, 6)]
v3 = [3*i**2 -(i/2) for i in range(1, 6)]

matrix = np.array([v1, v2, v3])

矩阵 等于。

array([[3.5,   13. ,   28.5,   50. ,   77.5],
[-5. , -23. , -53. , -95. , -149. ],
[2.5, 11. , 25.5, 46. , 72.5]])

在阅读完 Scipy 文档和上面链接中的示例后,我期望以下代码生成 Tridiagonal_1,但得到的却是 Tridiagonal_2

diags(matrix, [-1,0,1], (5, 5)).toarray() 

预期Tridiagonal_1:

array([[  -5. ,    2.5 ,     0. ,    0. ,     0. ],
[ 13. , -23. , 11. , 0. , 0. ],
[ 0. , 28.5., -53. , 25.5, 0. ],
[ 0. , 0. , 50 , -95., 46. ],
[ 0. , 0. , 0. , 77.5., -149. ]])

代码产生Tridiagonal_2:

array([[  -5. ,    2.5,    0. ,    0. ,    0. ],
[ 3.5, -23. , 11. , 0. , 0. ],
[ 0. , 13. , -53. , 25.5, 0. ],
[ 0. , 0. , 28.5, -95. , 46. ],
[ 0. , 0. , 0. , 50. , -149. ]])

我期望 offset = [-1,0,1] 将对角线条目向左移动,但第一个偏移量将第一个 diag 移动到下一行。这是正确的还是我的代码中存在导致此行为的错误?

最佳答案

您得到的输出似乎与文档中的内容一致,尤其是其中的示例。您可以使用 spdiags 获得您想要的结果:

from scipy import sparse

matrix = np.array([[3.5, 13. , 28.5, 50. , 77.5],
[-5. , -23. , -53. , -95. , -149. ],
[2.5, 11. , 25.5, 46. , 72.5]]

sparse.spdiags(matrix, (1,0,-1), 5, 5).T.A
# array([[ -5. , 2.5, 0. , 0. , 0. ],
# [ 13. , -23. , 11. , 0. , 0. ],
# [ 0. , 28.5, -53. , 25.5, 0. ],
# [ 0. , 0. , 50. , -95. , 46. ],
# [ 0. , 0. , 0. , 77.5, -149. ]])

关于python - 使用 scipy.sparse.diags 的 Scipy 三对角矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50292546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com