托马斯算法中的初始系数

Initial coefficients in Thomas's algorithm

x = 0.0:0.1:1.0;
N = length(x);
h = x(2)-x(1);
a = 1/hˆ2*ones(size(x));
b = -2/hˆ2*ones(size(x));
c = 1/hˆ2*ones(size(x));
r = x.*cos(x);
a(1) = -1; b(1) = 1; r(1) = 0;
c(N) = 0; b(N) = 1; r(N) = 0;
% Forward sweep
for j = 2:N
    b(j) = b(j)-c(j)*a(j-1)/b(j-1);
    r(j) = r(j)-c(j)*r(j-1)/b(j-1);
end
% Final equation
y(N) = r(N)/b(N);
for j = (N-1):-1:1
    y(j) = r(j)/b(j)-a(j)*y(j+1)/b(j);
end

这是Thomas算法的代码,用于求解y''=xcosx,初始点y'(0)=0,y(1)=0。我不明白为什么 a(1)=-1 和 b(1)=1。有人会向我解释吗?我很困惑。

你正在求解三对角线系统

c(k)*y(k-1) + b(k)*y(k) + a(k)*y(k+1) = r(k),  k=2...N-1

边界条件实现为

y(2)-y(1) = h*y_func'(0) = 0  ==> a(1)=1, b(1)=-1, r(1)=0 (and implicitly c(1)=0)

y(N)=y_func(1)=0 ==> c(N)=0, b(N)=1, r(N)=0 (and implicitly a(N)=0).

该算法计算 LU 分解,其中两个三角矩阵都是双对角矩阵。 L 因子的反演在正向扫描中就地应用,根据 r 因子的反向替换然后在反向扫描中。