<>比较两条曲线的相似度
给了两个近似成比例的函数(点族 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}_2y2
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 nyi,1=f1(xi)y
i,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}_2k=(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