我有以下代码来实现稀疏矩阵:
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
是一个函数,如果600
的值为0.4<= j*p <=0.6
,否则为零。
当然,我希望矩阵如下所示:
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
。
为什么这个值不正确?
答案 0 :(得分:0)
我不确定:
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)
)。