用matlab求解线性系统的方法

Methods for Linear system solution with matlab

我有一个线性系统 Ax = b ,它是由自然样条创建的,看起来像这样:

其中

本系统求解的matlab代码如下:

 clear; 
 clc;

x = [...] ;
a = [...];
x0 = ...;
n = length(x) - 1 ; 

for i = 0 : (n-1) 
    h(i+1) = x(i+2) - x(i+1) ; 
end


b= zeros( n+1 , 1 ) ;
for i =2: n 
    b(i,1) = 3 *(a(i+1)-a(i))/h(i) - 3/h(i-1)*(a(i) - a(i-1) ) ;
end


%linear system solution. 

l(1) =0 ; m(1) = 0 ; z(1) = 0 ;

for i =1:(n-1) 
    l(i+1) = 2*( x(i+2) - x(i) ) - h(i)* m(i) ;
    m(i+1) = h(i+1)/l(i+1);
    z(i+1) = ( b(i+1) - h(i)*z(i) ) / l ( i+1) ;
end

l(n+1) =1;
z(n+1) = 0 ;
c(n+1) = 0 ;

for j = ( n-1) : (-1) : 0 
    c(j+1) = z(j+1) - m(j+1)*c(j+2) ;
end

但是我不明白用什么方法求解线性系统。 如果非要我猜的话我会说用的是LU方法,针对三对角矩阵进行了调整,但是我还是找不到和代码的联系...

如有任何帮助,我们将不胜感激!!!

系数看起来有点奇怪(特别是 l 方程中的 2),但它看起来像一个专门的 Thomas Algorithm,其中:

  1. 倒数第二个循环执行下对角线的前向消去,使矩阵变为上三角形式。
  2. 最后一个循环执行解的回代。

该代码似乎与一般算法没有一对一匹配,因为解决方案是使用构成对角线的向量而不是对角线本身,没有明显的内存预分配。所以我不能说这个方法是否 "better" 比一般的方法更好。