托马斯算法中的初始系数
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 因子的反向替换然后在反向扫描中。
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 因子的反向替换然后在反向扫描中。