在MATLAB中求解双对角系统

时间:2016-03-03 04:00:42

标签: matlab matrix linear-algebra

我有一个以下形式的矩阵:

d1  0  0  0  0   0  0       x1        b1
a1 d2  0  0  0   0  0       x2        b2
0  a2  d3 0  0   0  0       x3        b3
0   0  a3 d4 a4  0  0   *   x4   =    b4
0   0  0  0  d5  a5 0       x5        b5
0   0  0  0  0   d6 a6      x6        b6
0   0  0  0  0   0  d7      x7        b7

我需要编写一个代码来解决这个系统而不需要前向消除。我假设你可以解决x7 = b7/d7。然后通过在我们的第一次迭代中设置d6来解决d6 = b6-a6*x7 = b6-a6*(b7/d7) ...然后将其余部分向后移动到第一行。但是,我遇到了一个障碍:

1)如何强调指数中令人困惑的差异

2)如何从反向顺序开始从d7开始到第一个等式

3)此外,我如何对n的任何系统进行概括?根据个人阅读材料,我正在进行娱乐活动,n很奇怪。

有人可以帮我编码吗?

编辑:系数矩阵为Ax列向量可以表示为Xb列向量可以表示为B为了方便,如果需要的话。

1 个答案:

答案 0 :(得分:1)

A成为您的n - by - n双对角矩阵,并B作为等式的右侧。您可以使用此循环解决:

n = size(A,1);
x = zeros(n,1); %// pre-allocate for solution x
x(n) = B(n)/A(n,n); %// get the last element
for ii=(n-1):-1:1
    x(ii) = (B(ii)-x(ii+1)*A(ii,ii+1))/A(ii,ii); %// iteratively solve
end

当然,最好使用内置函数

x = A\B;