在这里
spdiags
用于创建对角矩阵。否则,您可以使用for循环来填充对角矩阵。
function K = karray(k, gamma, N)
K = @(x) make_diagonal(x, k, gamma, N);
end
function out = make_diagonal(x, k, gamma, N)
x = x(:);
x = [x(1:N); 0];
ck = circshift(k, -1);
cg = circshift(gamma, -1);
cx = circshift(x, -1);
ccx =circshift(x, 1);
d1 = -3 .* ck .* cg .* cx .^ 2 - ck;
d2 = (k .* gamma + ck .* cg) .* x .^ 2 + k + ck;
d3 = -3 .* k .* ccx .^ 2 - k;
out = full(spdiags([d1 d2 d3], -1:1, N, N));
end
编辑:
在回答编辑后的问题时
你如何删除
k_4
和
gamma_4
?
你需要设置
ck(end) = 0;
和
cg(end) = 0;
计算之前
d1
,
d2
和
d3
.