Matlab数据拟合(专题四)

插值拟合和数据拟合都是数据分析和模型构建中常见的方法,其区别主要在于以下几点:
1. 对于给定的数据点,插值拟合通过构造插值函数来精确地穿过每个数据点,从而得到一条平滑的曲线,其拟合误差为零。而数据拟合则是通过构建一个函数模型来近似拟合数据点,这个模型在数据点处的拟合误差不一定为零。
2. 插值拟合对数据点的位置十分敏感,如果数据点在插值区间内存在偏差或噪声,插值曲线会受到很大影响。而数据拟合则通过拟合模型来平滑噪声或异常值的影响,具有一定的鲁棒性。
3. 插值拟合所得到的函数只能在已知数据点处进行插值计算,而无法在插值区间外进行外推。而数据拟合则可以通过模型预测未知区间内的数据。
因此,插值拟合和数据拟合各有优缺点,根据具体情况选择合适的方法进行数据分析和模型构建。

线性最小二乘拟合

工具箱操作

某观测站测得某日6:00~18:00之间每隔2小时的室内温度如下表所示,用样条值分别求得该室内6:30~17:30之间每隔2小时各点的近似温度值。
 

时间h6:008:0010:0012:0014:0016:0018:00
室内温度c18.020.222.025.130.229.521.5
h=6:2:18;
c=[18.0 20.2 22.0 25.1 30.2 29.5 21.5];
plot(h,c,'ro--')
grid on

运行以上代码可得以下图形,咱们接下来用工具做最小二乘法的拟合。 

978affc89355408f936d645af4f2d5d9.png

 点击工具eq?%5Crightarrow点击最下方的基本拟合eq?%5Crightarrow勾选三次方

ed0b710658254cdc8ddcf8123747ea8f.png

拟合完成

8a49aa71c59c45af8fa46d2f2909e7d0.png

函数法

h=6:2:18;
c=[18.0 20.2 22.0 25.1 30.2 29.5 21.5];
a=polyfit(h,c,3)

可以看出和上面的多项式系数a1,a2,a3,a4 是一样的。

 f858341c8cca4730912d65001ca15e08.png

系数出来了,接下来我们可以拟合作图看看效果

h=6:2:18;
c=[18.0 20.2 22.0 25.1 30.2 29.5 21.5];
a=polyfit(h,c,3)
y1=a(1)*h.^3+a(2)*h.^2+a(3)*h+a(4)*1
plot(h,c,'ro--',h,y1)
legend('原数据','拟合数据')

 3d1fad2840484e85acdbfc1c33e62426.png

也可以用ployval来做计算拟合多项式的函数值,即上面的y1,一样的效果

 h=6:2:18;
c=[18.0 20.2 22.0 25.1 30.2 29.5 21.5];
a=polyfit(h,c,3)
y1=polyval(a,h)
plot(h,c,'ro--',h,y1)
legend('原数据','拟合数据')

 5861916abab94061b3163e0efaf6aeaf.png

非线性最小二乘拟合

lsqcurvefit

[x,resnorm]= lsqcurvefit(fun,x0,xdata,ydata)

fun为需要拟合的函数(需要编写m文件,也可以不编写m文件用内置函数inline)

x0为对函数中各个参数的初始值

xdata为已知x轴的数据

ydata为已知y轴的数据

x为各个参数的最优解

resnorm为误差的平方和

已知实测一组数据

x0.10.20.30.40.50.60.70.80.91
y2.322.642.973.283.603.914.214.524.825.12

该数据可能满足的原型函数为eq?y%3Dax+bx%5E2e%5E%7B-cx%7D+d,试着求满足该数据的最小二乘法

解a,b,c,d的值。

inline法

073553b8597945c1a357fa18f77e0382.png

x=0.1:0.1:1;
y=[2.32	2.64	2.97	3.28	3.60	3.91	4.21	4.52	4.82	5.12];
f1=inline('a(1)*x+a(2)*x.^2.*exp(-a(3)*x)+a(4)','a','x');
[aa,res]=lsqcurvefit(f1,[1 1 1 1],x,y)
disp(['a=',num2str(aa(1)),'  b=',num2str(aa(2)),'  c=',num2str(aa(3)),'  d=',num2str(aa(4))])

8f355da9abd34e84832bf2f6b7e23f1f.png

 m文件法

编写脚本c.m

function f=c(a,x)
f=a(1)*x+a(2)*x.^2.*exp(-a(3)*x)+a(4);%计算新的y值。

命令行窗口

clc
clear
x=0.1:0.1:1;
y=[2.32	2.64	2.97	3.28	3.60	3.91	4.21	4.52	4.82	5.12];
a=lsqcurvefit('c',[1 1 1 1],x,y);
disp(['a=',num2str(a(1)),'  b=',num2str(a(2)),'  c=',num2str(a(3)),'  d=',num2str(a(4))])
c(a,x)

a6f9344c023a4821acd6407f397b53a6.png

lsqnonlin

用下面一组数据拟合%28bx+c%29中的参数b,c.并作图。

x123456789101112131415
y6.428.209.589.709.5010.009.939.9910.4910.5910.6010.8010.6010.9010.76

建立脚本文件

function f=c(a)
x=1:15;
y=[6.42	8.20 9.58 9.70 9.50	10.00 9.93 9.99	10.49 10.59	10.60 10.80	10.60 10.90	10.76];
f=x./(a(1)*x+a(2))-y;%计算新的y值。

命令行窗口

 

a=lsqnonlin('c',[1 1])
y=[6.42	8.20 9.58 9.70 9.50	10.00 9.93 9.99	10.49 10.59	10.60 10.80	10.60 10.90	10.76];
x=1:15;
h=c(a)+y;
plot(1:15,h,1:15,y,'ro')
legend('拟合','原数据')

4b6c6a1a990941f1924996554b84b5b3.png

即b=0.0887   c=0.0646

e4910fa68bd147c8b3821e10b31cba2f.png

 

 

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
MATLAB中,可以使用多项式拟合和指定函数拟合来进行数据拟合。 多项式拟合使用polyfit函数,该函数返回降幂排列的多项式系数P。其中,X和Y是拟合数据横纵坐标值,N是拟合的最高次幂。可以使用polyval函数计算多项式函数的值。 指定函数拟合使用fittype和fit函数。首先,使用fittype函数定义自定义函数,其中'independent'指定自变量名,'coefficients'指定待定参数。然后,使用fit函数根据自定义拟合函数来拟合数据x和y。 下面是MATLAB代码示例: 多项式拟合: ```matlab clc; clear all; close all; \[data,name\]=xlsread('1.xlsx'); x=data(1,:); y=data(2,:); P=polyfit(x,y,3); % 最高次幂为3 X=1:0.1:9; Y=polyval(P,X); plot(X,Y,x,y,'r*') ``` 指定函数拟合: ```matlab clc; clear all; close all; \[data,name\]=xlsread('1.xlsx'); x=data(1,:); y=data(2,:); % 自定义函数 syms t % 定义符号变量 f= fittype('a*cos(b*t)*exp(c*t)','independent','t','coefficients',{'a','b','c'}); % 计算拟合函数 Y=fit(x',y',f); % 注意x,y都是列向量的形式 xi=0:0.1:20; yi=Y(xi); plot(x,y,'r*',xi,yi,'b-') ``` 希望对你有帮助! #### 引用[.reference_title] - *1* [(一)MATLAB数学建模——数据拟合](https://blog.csdn.net/number_is_last/article/details/127582762)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

无常(F)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值