matlab进行非线性拟合常用最小二乘法实现,适用于:已经求解出函数,但含有未知数,不过已经收集到了一系列数据

1.lsqcurvefit

格式:[x, resnorm,r,flag]=lsqcurvefit(fun, c0,xdata,ydata)

c0为初始解向量;xdata,ydata为数据;

fun为待拟合函数(句柄函数),resnorm=sum ((fun(c,xdata)-ydata).^2),即在xdata处残差的平方和;flag为终止迭代的条件。

例:确定模型中的参数,已知数据点:

xdata = [3.6,7.7,9.3,4.1,8.6,2.8,1.3,7.9,10.0,5.4];

ydata = [16,150.5,260.1,22.5,206.5,9.9,2.7,165.5,325.0,54.5];

句柄函数举例:

xdata=[3.6,7.7,9.3,4.1,8.6,2.8,1.3,7.9,10.0,5.4];
ydata=[16,150.5,260.1,22.5,206.5,9.9,2.7,165.5,325.0,54.5];
c0=[0 0 0];
f_h=@(c, x) c(1)*x.^2 + c(2)*x.*sin(x) + c(3)*x.^3;
[c,resnorm,r]=lsqcurvefit(f_h,c0,xdata,ydata);
plot(xdata,f_h(c,xdata),xdata,ydata,'o');

自定义函数举例:

xdata=[3.6,7.7,9.3,4.1,8.6,2.8,1.3,7.9,10.0,5.4];
ydata=[16,150.5,260.1,22.5,206.5,9.9,2.7,165.5,325.0,54.5];
c0=[0 0 0];
[c,resnorm,r]=lsqcurvefit(@cal,c0,xdata,ydata);
plot(xdata,cal(c,xdata),xdata,ydata,'o');function y = cal(c,x)
y = c(1)*x.^2 + c(2)*x.*sin(x) + c(3)*x.^3;
end

2.fittype

使用fittype函数可以自定义拟合函数,可以满足线性拟合和非线性拟合。fittype函数具有很灵活的配置,基本满足各种复杂场景。

fittpye 函数内部参数 ' independent ' 指定哪些变量为自变量,相对的 ' coefficients ' 指定哪些变量为未知量,如:

ft = fittype('自定义函数','independent ','x');

ft = fittype('自定义函数','coefficients',{'k','r'});

需要注意的是,fit 函数内的自变量与因变量都需要是列矩阵,如果初始数据为行矩阵的话,需要转置一下

fit 后面可以加参数来指定拟合参数的初始值,如:

fo = fit( x , y , ft , 'startpoint' , [0 0]);

1.做多项式拟合:

x=[1;1.5;2;2.5;3];
y=[0.9;1.7;2.2;2.6;3];
ft=fittype('poly2');
fo=fit(x,y,ft);
plot(x,fo(x))  % or plot(fo, x, y);

2.做非线性拟合:

线性化拟合:

x=[0.2,0.5,0.8,1.1,1.2,1.5,1.8,2];
y=[2.35,1.38,0.81,0.62,0.78,1.43,2.25,3.18];
ex= {'x^2','sin(x)','1'};
ft=fittype(ex);
fo=fit(x',y',ft);
plot(x,fo(x),x,y,'o');

非线性化拟合:

x=[0.2,0.5,0.8,1.1,1.2,1.5,1.8,2];
y=[2.35,1.38,0.81,0.62,0.78,1.43,2.25,3.18];
ex= {'x^2','sin(x)','1'};
ft=fittype('a*x^2+b*sin(x)+c','independent','x');
fo=fit(x',y',ft);
plot(x,fo(x),x,y,'o');

例:在某次阻尼振荡实验中测得18组数据点,试确定其振动方程。(使用匿名函数实现)

x=[0,0.4,1.2,2,2.8,3.6,4.4,5.2,6,7.2,8,9.2,10.4,11.6,12.4,13.6,14.4,15];

y=[1,0.85,0.29,-0.27,-0.53,-0.4,-0.12,0.17,0.28,0.15,-0.03,-0.15,-0.07,0.059,0.08,0.032,-0.015,-0.02];

解:由物理背景知:

x=[0,0.4,1.2,2,2.8,3.6,4.4,5.2,6,7.2,8,9.2,10.4,11.6,12.4,13.6,14.4,15]';  %注意这里的转置
y=[1,0.85,0.29,-0.27,-0.53,-0.4,-0.12,0.17,0.28,0.15,-0.03,-0.15,-0.07,0.059,0.08,0.032,-0.015,-0.02]';  %注意这里的转置
f_h=@(a,k,w,x) a.*cos(k.*x).*exp(w.*x);
ft=fittype(f_h);
fo=fit(x,y,ft)
xx=0:0.1:20;
yy=fo(xx);
plot(x,y,'r*',xx,yy,'b-');

MATLAB进行非线性拟合相关推荐

  1. matlab 分式拟合,第七讲matlab实现非线性拟合.ppt

    其中 R2越趋近于1表明拟合效果越好. 如果是多项式函数,则称为多项式回归,此时的参数即多项式的系数:如果为指数函数.对数函数.幂函数或三角函数等,则称为非线性拟合.下面的图形给出了常见曲线与方程的对 ...

  2. matlab线性拟合和非线性拟合,matlab多元非线性拟合

    希望虫友能给与帮助 采用多元非线性回归: data.txt 168.7        202.9        145.9        12.1 142.0        206.4         ...

  3. matlab中洛伦兹拟合,基于MATLAB洛伦兹线型非线性拟合算法实现

    [1] Yao Hua. Research on Remote Sensing of Methane Based Tunable Diode Laser Absorption Spectroscopy ...

  4. Matlab对指定参数的曲线进行非线性拟合

    Matlab拟合曲线的方式 Matlab拟合曲线的方式有很多种,有三次样条插值.线性插值.多项式拟合等等.多项式拟合由于函数由f(x)=anxn+an−1xn−1+...+a1x+a0f(x)=a_n ...

  5. 数据拟合---使用自定义函数进行非线性拟合 -在Origin。matlab拟合工具箱cftool

    在Origin中使用自定义函数进行非线性拟合 http://blog.163.com/wuhen211@126/blog/static/7474635020105233269949/ matlab拟合 ...

  6. MATLAB中用nlinfit做多元非线性拟合(回归)

    MATLAB中有一个多元非线性拟合的功能是nlinfit 基本语法是: beta = nlinfit(X,Y,modelfun,beta0) 式子左边的beta可以是一个向量,向量的元素就是要回归的模 ...

  7. matlab距离平方和公式推导,lstopt 非线性拟合:相关系数之平方(R^2)和决定系数(DC)计算公式是?...

    本帖最后由 老姜 于 2013-12-11 03:30 编辑 我做了个非线性拟合,结果发现:相关系数之平方(R^2) 不等于决定系数(DC),自己采用1-SSE/SST计算后得到DC值,想知道lsto ...

  8. MATLAB 数据处理(二)非线性拟合——洛伦兹拟合(Lorentz fit)

    文章目录 一.拟合示例 二.单峰洛伦兹 2.1 洛伦兹线型函数表达式与物理含义 2.2 lsqcurvefit非线性拟合 2.3 代码实现 三.双峰洛伦兹 3.1 洛伦兹线型函数表达式与物理含义 3. ...

  9. lsqcurvefit拟合结果为复数_非线性拟合怎么转化为线性拟合?

    1. 前言 对于多项式函数,可以用最小二乘法求得精确的拟合结果,使得拟合函数具有全局最优的拟合误差:对于某些非线性函数,如指数函数 ,也可以对函数转化后,求得精确的拟合结果,如上述指数函数可转化为 , ...

  10. matlab插值与拟合例题_菜鸟进阶系列:MATLAB数学建模·数据插值与拟合

    本篇算是开始数据处理了.首先明确俩概念:插值和拟合.两者最根本的共同点都是基于现有数据进行预测.推演,比如根据现有的天文观测数据预测天体位置.插值问题是数学史上的经典问题,拉格朗日.高斯.牛顿等著名数 ...

最新文章

  1. 浅谈ICA算法的概念、本质和流程
  2. NDK avi播放器
  3. 2020中国信息流平台品牌服务价值分析
  4. 波士顿动力放出新视频:谁都挡不住机器狗开你的门
  5. flask出现错误:cannot import name ‘ContextVar‘
  6. int指令02 - 零基础入门学习汇编语言65
  7. 100个学生种树c语言,种树的作文100字
  8. Linux学习笔记001---Windows下安装CentOS7_并且安装桌面UI
  9. python做积分计算器_用Python学数学之Sympy代数符号运算
  10. 上海市职称英语计算机报名,全国职称计算机考试
  11. 关于领域驱动设计(DDD)中聚合设计的一些思考
  12. K线形态识别—多K线之卖出型多日K线组合
  13. 就小容量分布式光伏电站信息采集系统的设计与应用的研究方案 光伏电站建设 小型光伏电站 (安科瑞-须静燕)
  14. IOS 七种手势详解(动图+Demo下载)
  15. 如何区分电梯卡为id卡ic卡_门禁卡是选择IC卡好还是ID卡好
  16. 遗传算法之路径规划matlab代码(栅格地图)含详细注释
  17. 导航栏实现页面的动态切换
  18. 如何用计算机技术,如何利用计算机技术快速高效建立学籍档案
  19. RESTful HTTP中对POST,PUT,PATCH的区别
  20. 微信小程序引入阿里巴巴彩色图标字体(Symbol)

热门文章

  1. Simulink与控制系统仿真笔记01
  2. 更新:2022 京东双11活动一键自动完成任务脚本app来了
  3. yar php使用,php的轻量级rpc框架yar
  4. 51学习(2):vscode+ Embedded IDE开发环境搭建
  5. 阿里云域名优惠口令获取及使用方法
  6. 匿名发脉脉的拼多多员工,是如何被发现的?背后真相令人发指...
  7. 四级英语高分必备完形填空2篇翻译
  8. Python 实现用GUI设计有界面的词云生成器
  9. XDOJ最长单词的长度
  10. 关于#1-D:last line of file ends without a newline警告的解决办法(stm32)