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
這是解決初始點 y'(0)=0 和 y(1)=0 的 y''=xcosx 的 Thomas 演算法的代碼。我不明白為什么 a(1)=-1 和 b(1)=1。有人會向我解釋嗎?我有點迷惑不解了。
uj5u.com熱心網友回復:
您正在求解三對角系統
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 因子在反向掃描中進行反向替換。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/412034.html
標籤:
