1.拟合函数的建立不同。这种方法建立拟合函数不是采用传统的多项式或其他函数,而是通过系数向量和基函数来决定在某个x处的值。
2.引入紧支的概念,认为在x处的值y只受到x附近子域内的节点的影响。这个子域称作是x的影响区域,影响区域外的节点对x处的取值没有影响。影响区域内的每个节点对x处的取值的影响是不一样的。所以需要一个权函数来定义每个节点的影响。
从上述的阐述来看,如果取不同的基函数,不同的权函数,不同的影响区域范围,可以得到不同的拟合效果。
下面介绍一下算法:
范数(norm)是数学中的一种基本概念。在泛函分析中,它定义在赋范线性空间中,并满足一定的条件,即①非负性;②齐次性;③三角不等式。它常常被用来度量某个向量空间(或矩阵)中的每个向量的长度或大小。
常用范数
这里以Cn空间为例,Rn空间类似。
最常用的范数就是p-范数。若
,那么
可以验证p-范数确实满足范数的定义。其中三角不等式的证明不是平凡的,这个结论通常称为闵可夫斯基(Minkowski)不等式。
当p取
的时候分别是以下几种最简单的情形:
1-范数:║x║1=│x1│+│x2│+…+│xn│
2-范数:║x║2=(│x1│2+│x2│2+…+│xn│2)1/2
∞-范数:║x║∞=max(│x1│,│x2│,…,│xn│)
其中2-范数就是通常意义下的距离。
对于这些范数有以下不等式:║x║∞ ≤ ║x║2 ≤ ║x║1 ≤ n1/2║x║2 ≤ n║x║∞
另外,若p和q是赫德尔(Hölder)共轭指标,即1/p+1/q=1,那么有赫德尔不等式:
|
当p=q=2时就是柯西-许瓦兹(Cauchy-Schwarz)不等式。
如果直接求解出a,那么可以算出在x处的函数值了。
介绍一下权函数:
在影响区域内,权函数非负,并且沿径向单调递减,即随着到当前x处的距离的增加而递减。比如:
大概的程序流程:
一个例子的matlab code:
clc;clear;
%曲线拟合
x=[0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0];
y=[0, 4, 5, 14, 15, 14.5, 14, 12, 10, 5, 4];
scatter(x,y,'filled');
len_x = length(x);
max_x = max(x);
min_x = min(x);
num = 100;
delta = (max_x-min_x)/num;
x_f =[];
f =[];
max_delta = (max_x-min_x)*3/10;
for i=0:num
x_val = min_x + i*delta;
x_f = [x_f,x_val];
A = zeros(2,2);
B = [];
for j=1:len_x
s = abs(x(j)-x_val)/max_delta;
if s<=0.5
w = 2/3-4*s^2+4*s^3;
elseif s<=1
w = 4/3-4*s+4*s^2-4*s^3/3;
else
w = 0;
end
A = A + w*[1;x(j)]*[1,x(j)];
B = [B,w*[1;x(j)]];
end
f =[f,[1,x_val]*inv(A)*B*y'];
end
hold on
plot(x_f,f,'r');