用matlab进行线性系统求解的方法

时间:2015-12-28 10:58:14

标签: matlab linear-algebra numerical spline

我有一个线性系统Ax = b,它是由自然样条函数创建的,如下所示:

enter image description here

其中   enter image description here

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方法,调整为三对角矩阵,但我仍然无法找到与代码的连接...

任何帮助将不胜感激!!!

1 个答案:

答案 0 :(得分:1)

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

  1. 倒数第二个循环执行子对角线的前向消除,使矩阵成为上三角形。
  2. 最后一个循环执行解决方案的后备替换。
  3. 代码似乎与一般算法一对一匹配,因为解决方案是使用组成对角线的向量而不是对角线本身,没有明显的预分配内存。所以我不能说这种方法是否比一般的方法“更好”。