小编Eli*_*ees的帖子

使用 SVD 分解求解线性方程组

我想编写一个使用 SVD 分解来求解方程组 ax=b 的函数,其中 a 是方阵,b 是值向量。scipy 函数 scipy.linalg.svd() 应该将 a 转换为矩阵 UW V。对于 U 和 V,我可以简单地进行转置来找到它们的逆矩阵。但对于 W,该函数为我提供了一个一维值数组,我需要将其记下矩阵的对角线,然后在该值上输入 1。

def solveSVD(a,b):

    U,s,V=sp.svd(a,compute_uv=True)

    Ui=np.transpose(a)
    Vi=np.transpose(V)

    W=np.diag(s)

    Wi=np.empty(np.shape(W)[0],np.shape(W)[1])
    for i in range(np.shape(Wi)[0]):
        if W[i,i]!=0:
            Wi[i,i]=1/W[i,i]
    
    ai=np.matmul(Ui,np.matmul(Wi,Vi))
    x=np.matmul(ai,b)

    return(x)
Run Code Online (Sandbox Code Playgroud)

但是,我收到“TypeError:数据类型无法理解”错误。我认为问题的一部分在于

W=np.diag(s) 
Run Code Online (Sandbox Code Playgroud)

不产生方对角矩阵。

这是我第一次使用这个库,所以如果我做了一些非常愚蠢的事情,我深表歉意,但我无法弄清楚为什么这条线不起作用。谢谢大家!

python numpy linear-algebra scipy svd

3
推荐指数
1
解决办法
6401
查看次数

标签 统计

linear-algebra ×1

numpy ×1

python ×1

scipy ×1

svd ×1