MATLAB使用线性插值和线性回归方法比较两条函数曲线的相似度(观点)

比较两条曲线的相似度

给了两个近似成比例的函数(点族 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,2n式中 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=1i=1n(yi,2yˉ)2i=1n(yi,2kyi,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
  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jedi-knight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值