在 MATLAB 中求解双对角线系统



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

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 = b6-a6*x7 = b6-a6*(b7/d7)来解决d6...然后将其余的向后抬到第一排。但是,我遇到了一个障碍:

1)如何硬核指数中令人困惑的差异

2)如何从d7到第一个方程的反向顺序开始

3)此外,我如何将其推广到任何n系统?根据我为娱乐而做的个人阅读,n很奇怪。

任何人都可以帮助我编写代码吗?

编辑:系数矩阵是A的,x列向量可以表示为X,如果需要,b列向量可以表示为B以方便使用。

A成为你的n 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 = AB;

最新更新