用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,其中:
- 倒数第二个循环执行下对角线的前向消去,使矩阵变为上三角形式。
- 最后一个循环执行解的回代。
该代码似乎与一般算法没有一对一匹配,因为解决方案是使用构成对角线的向量而不是对角线本身,没有明显的内存预分配。所以我不能说这个方法是否 "better" 比一般的方法更好。
我有一个线性系统 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,其中:
- 倒数第二个循环执行下对角线的前向消去,使矩阵变为上三角形式。
- 最后一个循环执行解的回代。
该代码似乎与一般算法没有一对一匹配,因为解决方案是使用构成对角线的向量而不是对角线本身,没有明显的内存预分配。所以我不能说这个方法是否 "better" 比一般的方法更好。