我修改了下面的代码后,有机会在我的机器上并排运行你的。还有几个问题(假设在最后一个循环中会变大吗?,什么是dz?)。你在运行这个之前遇到的问题是我忘了idx_矩阵必须是逻辑的。在dz=0.1;
alpha = [1e-4,1e-3,1e-4,1e-1,1e-2,1e-3,1e-6,1e-3];
zeta = alpha / (dz*dz);
nz = 101;
l=[0.3,0.1,0.2,0.1,0.1,0.1,0.2];
wz = cumsum(l*(nz-1));
nl = length(l);
A = zeros(nz);
i=1;
%replaces 1st loop
j_start = 2;
j_end = wz(i)-1;
idx_matrix = false(size(A));
idx_matrix(j_start:j_end,j_start:j_end) = eye(j_end-j_start+1);
A(idx_matrix) = -2*zeta(1,1);
idx_matrix(idx_matrix) = false;
idx_matrix(j_start:j_end,j_start-1:j_end-1) = eye(j_end-j_start+1);
A(idx_matrix) = zeta(1,1);
idx_matrix(idx_matrix) = false;
idx_matrix(j_start:j_end,j_start+1:j_end+1) = eye(j_end-j_start+1);
A(idx_matrix) = zeta(1,1);
%cicle to n-layers
for i=2:nl
%replaces 3rd loop
j_start = wz(i-1);
A(j_start,j_start) = -zeta(1,i-1)-zeta(1,i);
A(j_start,j_start-1) = zeta(1,i-1);
A(j_start,j_start+1) = zeta(1,i);
%replaces 4th loop
j_start = wz(i-1)+1;
j_end = min(wz(i),size(A,2)-1);
idx_matrix = false(size(A));
idx_matrix(j_start:j_end,j_start:j_end) = eye(j_end-j_start+1);
A(idx_matrix) = -2*zeta(1,i);
idx_matrix(idx_matrix) = false;
idx_matrix(j_start:j_end,j_start-1:j_end-1) = eye(j_end-j_start+1);
A(idx_matrix) = zeta(1,i);
idx_matrix(idx_matrix) = false;
idx_matrix(j_start:j_end,j_start+1:j_end+1) = eye(j_end-j_start+1);
A(idx_matrix) = zeta(1,i);
end