MATLAB软件提供了基本的曲线拟合函数的命令。

曲线拟合就是计算出两组数据之间的一种函数关系,由此可描绘其变化曲线及估计非采集数据对应的变量信息。

1.线性拟合函数:regress()

调用格式:  b = regress(y,X)

           [b,bint,r,rint,stats] = regress(y,X)

           [b,bint,r,rint,stats] = regress(y,X,alpha)

说明:b=[ε; β],regress(y,X)返回X与y的最小二乘拟合的参数值β、ε,y=ε+βX。β是p´1的参数向量;ε是服从标准正态分布的随机干扰的n´1的向量;y为n´1的向量;X为n´p矩阵。

bint返回β的95%的置信区间。

r中为形状残差,rint中返回每一个残差的95%置信区间。Stats向量包含R2统计量、回归的F值和p值。

例:

x=[ones(10,1) (1:10)'];

y=x*[10;1]+normrnd(0,0.1,10,1);

[b,bint]=regress(y,x,0.05)

结果得回归方程为:y=9.9213+1.0143x

2.多项式曲线拟合函数:polyfit()

调用格式: p = polyfit(x,y,n)

          [p,s] = polyfit(x,y,n)

说明:n:多项式的最高阶数;

x,y:将要拟合的数据,用数组的方式输入;

p:为输出参数,即拟合多项式的系数;

多项式在x处的值y可用下面程序计算:

y=polyval(p,x)

例:

x=1:20;

y=x+3*sin(x);

p=polyfit(x,y,6)

xi=linspace(1,20,100);

z=polyval(p,xi);        % 多项式求值函数

plot(x,y,'o',xi,z,'k:',x,y,'b')

legend('原始数据','6阶曲线')

3.一般的曲线拟合:curvefit()

调用格式: p=curvefit(‘Fun’,p0,x,y)

说明:Fun: 表示函数Fun(p,data)的M函数文件;

x,y:将要拟合的数据,用数组的方式输入;

p0:  表示函数待拟合参数的初值;

4.自定义函数拟合:nlinfit()

调用格式:[beta,r,J]=nlinfit(x,y,’fun’,beta0)

说明:    beta:返回函数'fun'中的待定常数;

r:    表示残差;

J:    表示雅可比矩阵。

x,y:  要拟合的数据;

fun: 自定义函数;

beta0: 待定常数初值;

例:化工生产中获得的氯气的级分y随生产时间x下降,假定在x≥8时,y与x之间有非线性模型:

现收集了44组数据,利用该数据通过拟合确定非线性模型中的待定常数。

x            y                   x            y                   x            y

8            0.49               16           0.43               28           0.41

8            0.49               18           0.46               28           0.40

10           0.48               18           0.45               30           0.40

10           0.47               20           0.42               30           0.40

10           0.48               20           0.42               30           0.38

10           0.47               20           0.43               32           0.41

12           0.46               20           0.41               32           0.40

12           0.46               22           0.41               34           0.40

12           0.45               22           0.40               36           0.41

12           0.43               24           0.42               36           0.36

14           0.45               24           0.40               38           0.40

14           0.43               24           0.40               38           0.40

14           0.43               26           0.41               40           0.36

16           0.44               26           0.40               42           0.39

16           0.43               26           0.41

首先,定义非线性函数的m文件:fff6.m

function  yy=model(beta0,x)

a=beta0(1);

b=beta0(2);

yy=a+(0.49-a)*exp(-b*(x-8));

拟合程序:

x=[8.00 8.00 10.00 10.00 10.00 10.00 12.00 12.00 12.00 14.00 14.00 14.00...

16.00 16.00 16.00 18.00 18.00 20.00 20.00 20.00 20.00 22.00 22.00 24.00...

24.00 24.00 26.00 26.00 26.00 28.00 28.00 30.00 30.00 30.00 32.00 32.00...

34.00 36.00 36.00 38.00 38.00 40.00 42.00]';

y=[0.49 0.49 0.48 0.47 0.48 0.47 0.46 0.46 0.45 0.43 0.45 0.43 0.43 0.44 0.43...

0.43 0.46 0.42 0.42 0.43 0.41 0.41 0.40 0.42 0.40 0.40 0.41 0.40 0.41 0.41...

0.40 0.40 0.40 0.38 0.41 0.40 0.40 0.41 0.38 0.40 0.40 0.39 0.39]';

beta0=[0.30 0.02];

betafit = nlinfit(x,y,'sta67_1m',beta0)

结果:betafit =

0.3896   0.1011

即:a=0.3896 ,b=0.1011 拟合函数为:

4.多元非线性拟合:

(1).nlinfit()

调用格式:[beta,r,J]=nlinfit(X,Y,'fun',beta0)

说明:    beta:返回函数'fun'中的待定常数;

r:    表示残差;

J:    表示雅可比矩阵。

X,Y:  要拟合的多元数据矩阵;

fun: 自定义函数;

beta0: 待定常数初值;

例:

x1 = [1150,1000,900,850,700,625,550,475,3350,3500,5900,

5800,5700,4600,4625,4725,11650,11200,11200 ]';
      x2 = [175,100,25,0,75,100,150,200,50,600,500,

225,100,1225,1600,2000,1200,1000,1550 ]';
      x  = [x1,x2];
      y  = [1.44E-02,1.80E-02,6.08E-02,5.59E-02,3.42E-02,7.74E-03,1.17E-03,

6.16E-03,1.91E-04,1.91E-04,1.02E-03,2.83E-03,9.52E-05,3.77E-04,

2.70E-04,1.87E-04,3.98E-04,4.04E-04,4.02E-04 ]';
      beta0 = [0.1 0.1 1 1];
      myfun = @(a,x)4030.0./pi./4.2./(a(1).*x(:,1).^a(2).*a(3).*x(:,1).^a(4)).*exp(-(x(:,2).^2./2./(a(1).*x(:,1).^a(2)).^2+30.0.^2./2./(a(3).*x(:,1).^a(4)).^2));
      [a,b,c,d,res] = nlinfit(x,y,myfun,beta0);

a,res
      plot3(x1,x2,y,'o',x1,x2,myfun(a,x))

% 值的选取没有定法,与实际问题的模型有关。

(2).regress()

线性的不行,用二次函数。
      format long
      A=[...
      0.2 13.6 8503 251 27.4 
      7.7 9.9 3658 314 13.9 
      5.8 10.8 7307 433 26.8 
      7.70 9.70 6717 257 23.8 
      7.5 9.8 7609 280 21.7 
      5.6 11.3 4271 533 14.6 
      6.2 7.6 52169 48 225 
      3.23 9.16 16516 80 44.1 
      0.33 11.3 17366 85 54.1 
      0.14 9.5 14245 91 56.6 
      5.5 9.7 18184 3 31.6 
      2.3 8.9 33612 250 114.9 
      3.3 4.6 73927 5 166 
      1.9 9.7 32175 150 107.5 
      0.6 9.9 33088 242 142.3 
      0.22 11.7 18620 567 60.4 
      1.88 11.76 27885 267 71.6 
      2.78 10.9 21780 76 58.7]
      x=A(:,1:4),Y=A(:,5)
      x11=x(:,1).*x(:,1);
      x12=x(:,1).*x(:,2);
      x13=x(:,1).*x(:,3);
      x14=x(:,1).*x(:,4);
      x22=x(:,2).*x(:,2);
      x23=x(:,2).*x(:,3);
      x24=x(:,2).*x(:,4);
      x33=x(:,3).*x(:,3);
      x34=x(:,3).*x(:,4);
      x44=x(:,4).*x(:,4);
      X=[x(:,:),x11,x12,x13,x14,x22,x23,x24,x33,x34,x44]
      [B,BINT,R] = REGRESS(Y,[ones(length(Y),1),X]) 
B就是系数,R就是预测值与实际值的差值。

(3).lsqcurvefit()

clear
    clc
    x = [40    50    60    70    80    90   100   110   120   135   150];
    y = [0.0096    0.0145    0.0194    0.0348    0.0501    0.0751

0.1000    0.1497    0.1993    0.2496    0.2999];
    z = [0.2400    0.2865    0.3330    0.3600    0.3870    0.4010

0.4150    0.4390    0.4630    0.4875    0.5120];
    X0 = [1 1 1 1 1 1];
    % 只要这样写就可以了
    f=@(p,x)( p(1) + p(2)*x(1,:) + p(3)*x(2,:) + p(4)*x(1,:)

.^2 + p(5)*x(1,:).*x(2,:) + p(6)*x(2,:).^2);
    p=lsqcurvefit(f,X0,[x;y],z);

5.稳健回归函数:robust()

稳健回归是指此回归方法相对于其他回归方法而言,受异常值的影响较小。

调用格式:  b = robustfit(x,y)

           [b,stats] = robustfit(x,y)

           [b,stats] = robustfit(x,y,’wfun’,tune,’const’)

说明:

        b:系数估计向量;

stats:各种参数估计;

wfun:指定一个加权函数;

tune:为调协常数;

const:值为’on’(默认值)时添加一个常数项,为’off ’时忽略常数项。

例:演示一个异常数据点如何影响最小二乘拟合值与稳健拟合。首先利用函数y=10-2x加上一些随机干扰的项生成数据集,然后改变一个y的值形成异常值。调用不同的拟合函数,通过图形观查影响程度。

程序:x=(1:10)’;

y=10-2*x+randn(10,1);

y(10)=0;

bls=regress(y,[ones(10,1) x]);  % 线性拟合

brob=robustfit(x,y);            % 稳健拟合

scatter(x,y;

hold on

plot(x,bls(1)+bls(2)*x,’:’);

plot(x,brob(1)+brob(2)*x,’r‘);

结果 : bls  =  8.4452    -1.4784

brob =  10.2934   -2.0006

原文地址:MATLAB的曲线拟合作者:睿吉jerry

MATLAB的曲线拟合相关推荐

  1. matlab 非线性曲线拟合

    % matlab 非线性曲线拟合, nlinfit & lsqcurvefit & lsqnonlin: %x0 初始向量 %p 表达式参数变量 xdata = [0.25 0.5 0 ...

  2. matlab 画非线性曲线,matlab 非线性曲线拟合, nlinfit  lsqcurvefit  lsqnonlin

    % matlab 非线性曲线拟合,polyfit & nlinfit & lsqcurvefit & lsqnonlin: %x0 初始向量 %p 表达式参数变量 xdata ...

  3. matlab:曲线拟合

    matlab:曲线拟合 曲线拟合具体步骤如下 导入数据 选择拟合函数 拟合曲线 绘制曲线 分析结果 Matlab曲线拟合是指利用Matlab软件进行数据拟合,即根据给定的数据点,通过选择合适的拟合函数 ...

  4. 用matlab进行曲线拟合

    曲线拟合 曲线拟合概述 曲线拟合的步骤 用matlab进行曲线拟合 曲线拟合概述 在实际工程应用和科学实践中,经常需要寻求两个(或多个)变量间的关系,而实际上却只能通过观测得到一些离散的数据点,针对这 ...

  5. Matlab的曲线拟合工具箱CFtool的使用

    今天帮同学做了一个非线性函数的曲线拟合,以前没做过,所以是摸着石头过河.费了一下午时间,终于把曲线拟合出来了,顺道也学习了使用Matlab进行曲线拟合的方法,把学习所得记录下来,和大家共享. 一.   ...

  6. Matlab的曲线拟合工具箱CFtool使用简介

    Matlab有一个功能强大的曲线拟合工具箱 cftool ,使用方便,能实现多种类型的线性.非线性曲线拟合.下面结合我使用的Matlab R2011b 来简单介绍如何使用这个工具箱. 假设我们要拟合的 ...

  7. 线性最小二乘法拟合 matlab程序,曲线拟合的线性最小二乘法及其MATLAB程序

    1 曲线拟合的线性最小二乘法及其MATLAB 程序 例7.2.1 给出一组数据点),(i i y x 列入表7–2中,试用线性最小二乘法求拟合曲线,并用(7.2),(7.3)和(7.4)式估计其误差, ...

  8. MATLAB中曲线拟合方法总结(包括对数正态分布函数)

    鉴于最近遇到非线性函数拟合问题,本人对网上有关matlab多种类型的线性.非线性曲线拟合的方法进行了总结,希望对各位朋友有所帮助. 1. Matlab有一个功能强大的曲线拟合工具箱 cftool ,使 ...

  9. 基于Matlab多项式曲线拟合的新型冠状病毒(2019-nCov)感染人数趋势的预测

    声明 (1)预测基于官方公布数据,结果仅供参考,之后的数据,还是以官方为准: (2)本文不作任何建议,更无意制造恐慌.造谣,仅表示一个简单的数据分析结果: (3)目前,新型肺炎处于上升趋势,增长速度较 ...

最新文章

  1. 添加墙元素实现碰撞效果
  2. python三维图形渲染-基于VTK/numpy的三维图像渲染与可视化
  3. 事件,信号量,互斥量
  4. 领域研究热点的绝妙探索方法
  5. 快速开发插件emmet,前端程序员炫技必备!
  6. 在Oracle中不通过存储过程一次执行多条SQL语句Oracle PL/SQL
  7. suse glibcxx版本过高问题
  8. ajax 获取openid,纯前端获取当前用户的openid(微信小程序)
  9. hnu 暑期实训之最少钱币数
  10. django mysql开发_基于django框架web项目实战开发四 django+mysql实现增删查改功能
  11. 洛谷P3275 [SCOI2011]糖果
  12. nagios 监控memcached
  13. matlab仿真数字电路,基于matlab的数字逻辑电路仿真
  14. EBS中odf文件和xdf文件解释
  15. python阈值分割_Python实现otsu阈值分割算法
  16. SQL sever 查询及格率
  17. Arthas--深入排查java进程消耗CPU或内存过高问题
  18. 计算机增加睡眠模式,如果我的计算机处于睡眠模式,Windows 10是否会更新? | MOS86...
  19. 接口的方式获取bing必应每天壁纸
  20. python陆股通_要闻:11月“陆股通”渠道外资净买入A股579亿元

热门文章

  1. Ubuntu 18.04百度拼音输入法突然乱码问题
  2. 国内主流AI大模型盘点
  3. ASEMI整流桥GBJ406参数,GBJ406尺寸,GBJ406机械数据
  4. ES6的简单的整理与应用
  5. COSCon'22@Dalian | 大连分会场邀您组局聊聊云原生那些事
  6. BCW 任命 Jillian Janaczek 为纽约市场负责人
  7. 【spss】列联表crosstabs
  8. oracle售前总监高礼强,高礼强谈甲骨文软件:以C.I.O为核心
  9. 选择好的106短信平台,这3点很重要
  10. Django--1、MTV及基本应用