【问题标题】:Sparse matrix multiplication complexity and implementation稀疏矩阵乘法复杂度及实现
【发布时间】:2018-07-26 07:04:50
【问题描述】:

我有如下代码来实现一个稀疏矩阵:

close all
n=10;
p = 1/11;
term13 = -(1 / p^2);
term2 = (2 / p^2);
e=ones(n,1);
z=sparse(n,n);
for j=1:n
    vval(j) = barrier(j*p);
    z(j)=term2 + vval(j);
end
h = spdiags([term13*e z(j)*e term13*e], -1:1, n,n);
t=full(h)

barrier 是一个函数,如果0.4<= j*p <=0.6 则其值为600,否则为零。 当然,我希望矩阵如下所示:

   242  -121     0     0     0     0     0     0     0     0
  -121   242  -121     0     0     0     0     0     0     0
     0  -121   242  -121     0     0     0     0     0     0
     0     0  -121   242  -121     0     0     0     0     0
     0     0     0  -121   842  -121     0     0     0     0
     0     0     0     0  -121   842  -121     0     0     0
     0     0     0     0     0  -121   242  -121     0     0
     0     0     0     0     0     0  -121   242  -121     0
     0     0     0     0     0     0     0  -121   242  -121
     0     0     0     0     0     0     0     0  -121   242

但令人惊讶的是它的形式是

   242  -121     0     0     0     0     0     0     0     0
  -121   242  -121     0     0     0     0     0     0     0
     0  -121   242  -121     0     0     0     0     0     0
     0     0  -121   242  -121     0     0     0     0     0
     0     0     0  -121   242  -121     0     0     0     0
     0     0     0     0  -121   242  -121     0     0     0
     0     0     0     0     0  -121   242  -121     0     0
     0     0     0     0     0     0  -121   242  -121     0
     0     0     0     0     0     0     0  -121   242  -121
     0     0     0     0     0     0     0     0  -121   242

确切地说,我期望h(5,5) = h(6,6) = 842242+600。 但它需要barrier =0

为什么这个值不正确?

【问题讨论】:

标签: matlab matrix sparse-matrix


【解决方案1】:

我不确定:

  • 为什么需要 for 循环,
  • 为什么要分配nxn稀疏矩阵z,然后将其与单个索引z(j)一起使用,
  • vval 被分配或用于该事项的位置,
  • 以及为什么要创建稀疏对角矩阵,只在下一行调用full

不过不管怎样,你问的问题是由这行引起的

h = spdiags([term13*e z(j)*e term13*e], -1:1, n,n);

应该是

h = spdiags([term13*e, z*e, term13*e], -1:1, n,n);

改为(注意z 而不是z(j))。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 2015-08-08
    相关资源
    最近更新 更多