比较两条曲线的相似度
给了两个近似成比例的函数(点族
x
s
1
,
y
s
1
,
x
s
2
,
y
s
2
\boldsymbol{x}_{\mathrm{s}1},\boldsymbol{y}_{\mathrm{s}1},\boldsymbol{x}_{\mathrm{s}2},\boldsymbol{y}_{\mathrm{s}2}
xs1,ys1,xs2,ys2表示)
f
2
(
x
)
≈
k
f
1
(
x
)
f_2\left( x \right) \approx kf_1\left( x \right)
f2(x)≈kf1(x)
现评估
k
k
k的最优取值以及对相似度的定量评价
线性插值
由于给定的函数曲线是由点族表示的,使用线性插值将函数构造出来。在自变量取值范围内取
n
n
n个间距的节点,它们的横坐标构成一个向量
x
\boldsymbol{x}
x。通过线性插值方法得到
x
\boldsymbol{x}
x对应的
y
1
\boldsymbol{y}_1
y1和
y
2
\boldsymbol{y}_2
y2
y
i
,
1
=
f
1
(
x
i
)
y
i
,
2
=
f
2
(
x
i
)
i
=
1
,
2
⋯
n
y_{i,1}=f_1\left( x_{i} \right) \\ y_{i,2}=f_2\left( x_{i} \right) \\ i=1,2\cdots n
yi,1=f1(xi)yi,2=f2(xi)i=1,2⋯n式中
x
i
,
1
x_{i,1}
xi,1表示
x
\boldsymbol{x}
x的第
i
i
i个元素,其余以此类推。
线性回归
在获得向量
y
1
\boldsymbol{y}_1
y1和
y
2
\boldsymbol{y}_2
y2后,使用最小二乘法求解
k
k
k的近似值,列写最小二乘法的法方程
y
1
k
=
y
2
\boldsymbol{y}_1k=\boldsymbol{y}_2
y1k=y2该方程组包含一个未知数
k
k
k和
n
n
n个方程,一般情况下无解。但是可以使用广义逆或最小二乘法求其残差最小的解,即
k
=
(
y
1
T
y
1
)
−
1
y
1
T
y
2
k=\left( {\boldsymbol{y}_1}^{\mathrm{T}}\boldsymbol{y}_1 \right) ^{-1}{\boldsymbol{y}_1}^{\mathrm{T}}\boldsymbol{y}_2
k=(y1Ty1)−1y1Ty2
相似度计算
相似度可以使用决定系数
R
2
R^2
R2评估,其定义式为
R
2
=
1
−
∑
i
=
1
n
(
y
i
,
2
−
k
y
i
,
1
)
2
∑
i
=
1
n
(
y
i
,
2
−
y
ˉ
)
2
R^2=1-\frac{\sum_{i=1}^n{\left( y_{i,2}-ky_{i,1} \right) ^2}}{\sum_{i=1}^n{\left( y_{i,2}-\boldsymbol{\bar{y}} \right) ^2}}
R2=1−∑i=1n(yi,2−yˉ)2∑i=1n(yi,2−kyi,1)2
MATLAB代码
线性插值函数
function [out_x,out_y1,out_y2] = linearInterpolation(x1,y1,x2,y2,n)
%LINEARINTERPOLATION 将两条独立非负曲线的点族(x1,y1)(x2,y2)插值成为点对(x,y1,y2)
xmax1=x1(end);
xmax2=x2(end);
xmax=max(xmax1,xmax2);
out_x=linspace(0,xmax,n);
out_y1=interp1(x1,y1, out_x,'linear','extrap');
out_y1=0.5*(out_y1+abs(out_y1));
out_y2=interp1(x2,y2, out_x,'linear','extrap');
out_y2=0.5*(out_y2+abs(out_y2));
end
线性回归函数
function [r2,k] = linearRegression(y1,y2)
%LINEARREGRESSION 对点族(y1,y2)进行无截距的线性回归,返回决定系数r2(coefficient of determination)和斜率
k=y1'\y2';
r2=1-sum((y2-k*y1).^2)/((length(y2)-1) * var(y2));
end