【发布时间】: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) = 842 即242+600。
但它需要barrier =0。
为什么这个值不正确?
【问题讨论】:
-
当您创建变量
h时,只需删除z(j)中的j。
标签: matlab matrix sparse-matrix