matlab 横坐标名称_第三期 MATLAB拟合数据(代码版)

哈喽大家好,欢迎来到塞纳斯环境,今天是小科的第三期软件教学分享!

这一期的内容是在上一期的基础上进行升级,MATLAB如何利用代码实现自动拟合(多个函数、多个参数同时拟合多组数据),下面表格中的内容为本次用到的数据:

XY1Y2Y3
0111

3

0.9260.855

0.863

70.8500.8140.863
130.8130.6440.820
1150.7190.5120.781
1480.7130.5530.721
1780.5960.3520.682
2070.4220.2870.636
2700.3850.2480.580

话不多说,开始本次的分享:

1、从excel导入数据至matlab的工作区中(图1、图2); 2、新建脚本(.m),输入代码,保存,运行(图3、图4)(代码见附录); 3、得到运行结果,拟合图像、拟合度(图5);

4、第2步中的代码还可以放在实时编辑器中(.mlx),方便(高版本才支持该功能)(图6);

cfb9244184a5db9668a879d8c7e833ce.png

图1

562c3081356ba930740102361f84b8d7.png

图2

d55b63a2497777ca1b0bdb393eca4a84.png

图3

b2c72a8a388bcb0e96b382014e95c2db.png

图4

fb81579666b2b07fddcb0de1af3b7819.png

图5

1482da2f18f38f0070e45daf732233c5.png

图6

代码附录:

%注意,%是matlab的注释符号,运行过程中不会被读取(control+R代表加注释,control+T代表取消注释)

%目的:基于多组数据,进行多个方程、多个参数组拟合

%代码如下:

%首先需要将excel中的数据导入工作区内,并对导入的变量进行重命名,旨在方便下面的程序输入

set(groot,'defaultlinelinewidth',1.5);%设置默认线宽1.5

%输入第1个方程

f1=fittype('a*exp(-m1*x)+(1-a)*exp(-m2*x)','independent','x');%待拟合的函数方程,a、m1、m2是参数

%输入第2个方程

f2=fittype('a*exp(-m1*x)','independent','x');% a、m1是参数

%输入第3个方程

f3=fittype('exp(-m1*x)','independent','x');% m1是参数

%逐一给上面的3个方程进行初始参数赋值

%给第1个方程的参数赋3组不同的初值

fo11=fitoptions(f1);%拟合方程的选项,下同

fo11.startpoint=[0.1 0.005 0.001];%3个参数的初值:0.1, 0.005, 0.001,下同

fo12=fitoptions(f1);

fo12.startpoint=[0.2 0.05 0.001];

fo13=fitoptions(f1);

fo13.startpoint=[0.3 0.05 0.01];

%给第2个方程的参数赋3组不同的初值

fo21=fitoptions(f2);

fo21.startpoint=[0.2 0.001];

fo22=fitoptions(f2);

fo22.startpoint=[0.1 0.005];

fo23=fitoptions(f2);

fo23.startpoint=[0.1 0.05];

%给第3个方程的参数赋3组不同的初值

fo31=fitoptions(f3);

fo31.startpoint=[0.001];

fo32=fitoptions(f3);

fo32.startpoint=[0.05];

fo33=fitoptions(f3);

fo33.startpoint=[0.1];

%开始对数值、方程、初始参数进行拟合

[f11,gof11]=fit(X,Y1,f1,fo11);%f11表示拟合后的函数,gof11是拟合程度(goodness of fit),下同

[f12,gof12]=fit(X,Y1,f1,fo12);%control+F可以批量替换X,Y

[f13,gof13]=fit(X,Y1,f1,fo13);

[f21,gof21]=fit(X,Y2,f2,fo21);

[f22,gof22]=fit(X,Y2,f2,fo22);

[f23,gof23]=fit(X,Y2,f2,fo23);

[f31,gof31]=fit(X,Y3,f3,fo31);

[f32,gof32]=fit(X,Y3,f3,fo32);

[f33,gof33]=fit(X,Y3,f3,fo33);

%出第一组图(f1i,gof1i)

figure

%绘制散点图

sz=75%散点图点的大小

scatter(X,Y1,sz,'filled')%绘制坐标点(X,Y1),filled为实心点

hold on%保持绘图窗口,使所有图都放在一张图中

plot(f11,'r');%用红色(r)的线绘制拟合结果f11

hold on

plot(f12,'b');%用蓝色(b)的线绘制拟合结果f12

hold on

plot(f13,'m');%用黑色(m)的线绘制拟合结果f13

legend('datapoint','f11','f12','f13');%图例说明

xlabel('X');%横坐标名称

ylabel('Y1');%纵坐标名称

%出第二组图(f2i,gof2i)

figure

sz=75

scatter(X,Y2,sz,'filled')%绘制坐标点(X,Y2)

hold on%保持绘图窗口,使所有图都放在一张图中

plot(f21,'r');%用红色(r)的线绘制拟合结果f21

hold on

plot(f22,'b');%用蓝色(b)的线绘制拟合结果f22

hold on

plot(f23,'m');%用黑色(m)的线绘制拟合结果f23

legend('datapoint','f21','f22','f23');%图例说明

xlabel('X');%横坐标名称

ylabel('Y2');%纵坐标名称

%出第三组图(f3i,gof3i)

figure

sz=75

scatter(X,Y3,sz,'filled')%绘制坐标点(X,Y3)

hold on%保持绘图窗口,使所有图都放在一张图中

plot(f31,'r');%用红色(r)的线绘制拟合结果f31

hold on

plot(f32,'b');%用蓝色(b)的线绘制拟合结果f32

hold on

plot(f33,'m');%用黑色(m)的线绘制拟合结果f33

legend('datapoint','f31','f32','f33');%图例说明

xlabel('X');%横坐标名称

ylabel('Y3');%纵坐标名称

%下面则是生成对应的拟合结果参数

f11

gof11

f12

gof12

f13

gof13

f21

gof21

f22

gof22

f23

gof23

f31

gof31

f32

gof32

f33

gof33

%代码结束

运行结果附录:

sz = 75

sz = 75

sz = 75

f11 =      Generalmodel:

     f11(x) =a*exp(-m1*x)+(1-a)*exp(-m2*x)

     Coefficients (with95% confidence bounds):

       a=      -5.642  (-5.716e+04, 5.715e+04)

       m1=    0.005737  (-2.358, 2.37)

       m2=    0.005283  (-1.894, 1.904)

gof11 =           sse: 0.0605

      rsquare: 0.8335

          dfe: 6

    adjrsquare: 0.7780

          rmse:0.1004

f12 =      Generalmodel:

     f12(x) =a*exp(-m1*x)+(1-a)*exp(-m2*x)

     Coefficients (with95% confidence bounds):

       a=      0.1139  (-0.05397, 0.2818)

       m1=      0.4201  (-1.947, 2.787)

       m2=    0.002582  (0.001245, 0.003919)

gof12 =           sse: 0.0323

      rsquare: 0.9112

          dfe: 6

    adjrsquare: 0.8816

          rmse:0.0733

f13 =      Generalmodel:

     f13(x) =a*exp(-m1*x)+(1-a)*exp(-m2*x)

     Coefficients (with95% confidence bounds):

       a=      0.1142  (-0.05505, 0.2835)

       m1=      0.4129  (-1.897, 2.722)

       m2=     0.00258  (0.001236, 0.003924)

gof13 =           sse: 0.0323

      rsquare: 0.9112

          dfe: 6

    adjrsquare: 0.8816

          rmse:0.0733

f21 =      Generalmodel:

     f21(x) =a*exp(-m1*x)

     Coefficients (with95% confidence bounds):

       a=      0.8596  (0.7408, 0.9783)

       m1=    0.004549  (0.002781, 0.006317)

gof21 =           sse: 0.0641

      rsquare: 0.8866

          dfe: 7

    adjrsquare: 0.8704

          rmse:0.0957

f22 =      Generalmodel:

     f22(x) =a*exp(-m1*x)

     Coefficients (with95% confidence bounds):

       a=      0.8596  (0.7408, 0.9783)

       m1=    0.004549  (0.002781, 0.006317)

gof22 =           sse: 0.0641

      rsquare: 0.8866

          dfe: 7

    adjrsquare: 0.8704

          rmse:0.0957

f23 =      Generalmodel:

     f23(x) =a*exp(-m1*x)

     Coefficients (with95% confidence bounds):

       a=      0.8596  (0.7408, 0.9783)

       m1=    0.004549  (0.002781, 0.006317)

gof23 =           sse: 0.0641

      rsquare: 0.8866

          dfe: 7

    adjrsquare: 0.8704

          rmse:0.0957

f31 =      Generalmodel:

     f31(x) =exp(-m1*x)

     Coefficients (with95% confidence bounds):

       m1=    0.002166  (0.00153, 0.002801)

gof31 =           sse: 0.0453

      rsquare: 0.6929

          dfe: 8

    adjrsquare: 0.6929

          rmse:0.0753

f32 =      Generalmodel:

     f32(x) =exp(-m1*x)

     Coefficients (with95% confidence bounds):

       m1=    0.002166  (0.00153, 0.002801)

gof32 =           sse: 0.0453

      rsquare: 0.6929

          dfe: 8

    adjrsquare: 0.6929

          rmse:0.0753

f33 =      Generalmodel:

     f33(x) =exp(-m1*x)

     Coefficients (with95% confidence bounds):

       m1=    0.002166  (0.00153, 0.002801)

gof33 =           sse: 0.0453

      rsquare: 0.6929

          dfe: 8

    adjrsquare: 0.6929

          rmse:0.0753

好了,以上就是小科的第三期软件教学分享,我们下期再见,拜拜!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值