清分数学建模--拟合算法

拟合算法与插值算法的不同

拟合

  • 不需要曲线一定经过给定的点。
  • 目标为寻求一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接技能,即曲线拟合的最好(最小化损失函数)
    插值
  • 得到的多项式 f ( x ) f(x) f(x)需要经过所有的样本点,但当样本点过多时,会产生龙格现象。

尽管分段插值的方法可以避免这种现象,但有时候我们更倾向于得到一个确定的曲线,而这条曲线不一定要经过每一个样本点,但只要保证误差足够小即可。这就是拟合的思想。(拟合得到的结果为一个确定的值)

最小二乘法

一个小例子
在这里插入图片描述
在这里插入图片描述
第一种定义:
y i ^ = k x i + b \hat{y_i}=kx_i+b yi^=kxi+b
k i ^ , b ^ = arg ⁡ k , b min ⁡ ( ∑ i = 1 n ∣ y i − y i ^ ∣ ) \hat{k_i},\hat{b}=\arg_{k,b}\min(\sum_{i=1}^n|y_i-\hat{y_i}|) ki^,b^=argk,bmin(i=1nyiyi^)
第二种定义:
y i ^ = k x i + b \hat{y_i}=kx_i+b yi^=kxi+b
k i ^ , b ^ = arg ⁡ k , b min ⁡ ( ∑ i = 1 n ( y i − y i ^ ) 2 ) \hat{k_i},\hat{b}=\arg_{k,b}\min(\sum_{i=1}^n(y_i-\hat{y_i})^2) ki^,b^=argk,bmin(i=1n(yiyi^)2)
因为第一种定义为绝对值不容易求导,计算比较复杂,因此我们往往使用第二种定义。
为什么不用四次方
1.避免极端数据对拟合曲线的影响。
2.最小二乘法得到的结果和MLE极大似然估计一致。
不用奇次方
误差会正负相抵。

求解最小二乘法

在这里插入图片描述

Matlab中求解最小二乘法

clear;clc;
load datal
plot(x,y,'o')
xlabel('x的值')
ylabel('y的值')
n=size(x,1);
k=(n*sum(x.*y)-sum(y)*sum(x))/(n*sum(x.*x)-sum(x)*sum(x))
b=(sum(x.*x)*sum(y)-sum(x)*sum(x*.y))/(n*sum(x.*x)-sum(x)*sum(x))
hold on
grid on
f=@(x)k*x+b;
fplot(f,[2.5,7]);
legend('样本数据',拟合数据,'locationo','SouthEast')

如何评价拟合的好坏

拟 合 优 度 ( 可 决 系 数 ) R 2 拟合优度(可决系数)R^2 R2
总 体 平 方 和 S S T : S S T = ∑ i = 1 n ( y i − y ‾ ) 2 总体平方和SST:SST=\sum_{i=1}^n(y_i-\overline{y})^2 SSTSST=i=1n(yiy)2
误 差 平 方 总 和 S S E : S S E = ∑ i = 1 n ( y i − y i ^ ) 2 误差平方总和SSE: SSE=\sum_{i=1}^n(y_i-\hat{y_i})^2 SSE:SSE=i=1n(yiyi^)2
回 归 平 方 和 S S R : S S R = ∑ i = 1 n ( y i ^ − y ‾ ) 回归平方和SSR:SSR=\sum_{i=1}^n(\hat{y_i}-\overline{y}) SSRSSR=i=1nyi^y
可 以 证 明 : S S T = S S E + S S R 可以证明:SST=SSE+SSR SST=SSE+SSR
证明过程如下
在这里插入图片描述
拟 合 优 度 : 0 ≤ R 2 = S S R S S T = S S T − S S E S S T = 1 − S S E S S T ≤ 1 拟合优度:0 \leq R^2 = \frac{SSR}{SST}=\frac{SST-SSE}{SST}=1-\frac{SSE}{SST}\leq 1 0R2=SSTSSR=SSTSSTSSE=1SSTSSE1
R 2 越 接 近 1 , 说 明 误 差 平 方 和 越 接 近 0 , 误 差 越 小 说 明 误 差 拟 合 越 好 。 R^2越接近1,说明误差平方和越接近0,误差越小说明误差拟合越好。 R210
由于函数越复杂,拟合的越好(龙格现象),因此在判读拟合的好坏时,应该保证模型的简单
注意: R 2 R^2 R2只能说明用于拟合函数事线性函数时,拟合结果的评价
如果函数比较复杂(列如指数函数),在比较拟合的好坏的时候,看 S S E SSE SSE即可

对参数线性

拟合算法中的线性是指对参数线性

Matlab中求拟合优度的代码

y_hat=k*x+b%y的拟合值
SSR=sum((y_hat-mean(y)).^2)% 回归平方和
SSE=sum((y_hat-y).^2)%误差平方和
SST=sum((y-mean(y)).^2) %总体平方和
R_2=SSR/SST
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数学建模算法与应用是指应用数学模型来解决实际问题的过程。而MATLAB是一种功能强大的数学计算软件,广泛用于科学计算和工程领域。 在数学建模中,我们通常需要通过MATLAB编写代码来实现模型的求解。MATLAB提供了丰富的函数库和工具箱,可以方便地进行数值计算、符号计算、数据可视化等操作。 对于不同的数学建模问题,可以使用不同的算法来解决。比如线性规划问题可以使用线性规划算法,优化问题可以使用优化算法,微分方程可以使用数值解法等。 在MATLAB中,我们可以使用线性规划工具箱中的linprog函数来求解线性规划问题。这个函数可以通过输入目标函数和约束条件,自动进行求解,并给出最优解。 对于优化问题,可以使用优化工具箱中的fmincon函数来进行求解。该函数可以通过输入目标函数、约束条件和初始值,来寻找最优解。 对于微分方程,可以使用ode45函数来进行数值解法。这个函数可以通过输入微分方程、初始条件和求解区间,来给出微分方程的解。 除了这些基本函数,MATLAB还提供了大量的工具和函数,可以用于数据处理、数据可视化、曲线拟合等操作,帮助我们更好地进行数学建模。 总之,数学建模算法与应用和MATLAB代码密切相关。在实际应用中,我们可以通过编写MATLAB代码来实现各种数学建模算法,更高效地解决实际问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值