源链接:https://www.cnblogs.com/Juli016/articles/5211239.html

问题:有些时候我们需要拟合一些非线性的表达式。

比如:我们知道一个表达式的式子是y=A*sin(x).*exp(x)-B./log(x),现在我们手里面有x与y对应的一大把数据。我们如何根据x,y的值找出最佳的A、B值。则我们现在借助Matlab的函数lsqcurvefit、nlinfit,当然你也可以使用lsqnonlin.其具体用法请自己用Matlab的帮助命令进行查看。这里仅简单介绍一下常用的方式。

注意:如果对初值比较敏感,涉及到初值设置的问题;以及拟合表达式包含积分表达式或者微分项等问题;以及一些拟合降维的问题,可以参看我的另一篇博文《数据拟合遇见》

PS:如果使用Matlab以上函数拟合不出理想的结果的话,可以尝试使用我自己写的《数学计算器》里的nlinFit、nlinFit2、nlinFit4、nlinFitDE、nlinFitGA、nlinFitLM、nlinFitPSO、nlinFitPSO2、nlinFitPSO3函数

格式:lsqcurvefit(f,a,x,y)、nlinfit(x,y,f,a)

f:符号函数句柄,如果是以m文件的形式调用的时候,别忘记加@.这里需要注意,f函数的返回值是和y匹对的,即拟合参数的标准是(f-y)^2取最小值,具体看下面的例子

a:最开始预估的值(预拟合的未知参数的估计值)。如上面的问题如果我们预估A为1,B为2,则a=[1 2]

x:我们已经获知的x的值

y:我们已经获知的x对应的y的值

例子1:

问题:对于函数y=a*sin(x)*exp(x)-b/log(x)我们现在已经有多组(x,y)的数据,我们要求最佳的a,b值

%针对上面的问题,我们可以来演示下如何使用这个函数以及看下其效果

>> x=2:10;

>> y=8*sin(x).*exp(x)-12./log(x);

%上面假如是我们事先获得的值

>> a=[1 2];

>> f=@(a,x)a(1)*sin(x).*exp(x)-a(2)./log(x);

%第一种方法使用lsqcurvefit

>> lsqcurvefit(f,a,x,y)

ans =

7.999999999999987  11.999999999988997%和我们预期的值8和12结合得非常好

>>

%第二种方法使用nlinfit

>> nlinfit(x,y,f,a)

ans =

8.000000000000000  11.999999999999998

>>

%**********************************

%另一种方法,假如我们写了一个如下的m文件

function f=test(a,x)

f=a(1)*sin(x).*exp(x)-a(2)./log(x);

end

%则在上面lsqcurvefit函数调用如下,不要忘记那个@

lsqcurvefit(@test,a,x,y)

例子2:(多元的情况,注意看格式)

问题:我们已知z=a*(exp(y)+1)-sin(x)*b且有多组(x,y,z)的值,现在求最佳系数a,b

>> x=2:10;

>> y=10*sin(x)./log(x);

>> z=4.5*(exp(y)+1)-sin(x)*13.8;

>> f=@(a,x)a(1)*(exp(x(2,:))+1)-sin(x(1,:))*a(2);

%第一种方法使用lsqcurvefit

>> lsqcurvefit(f,[1 2],[x;y],z)%注意这里面的[x;y],这里的[1 2]表示我们设置f函数里的初始值a(1)=1,,a(2)=2

ans =

4.499999999999999  13.800000000000024

%第二种方法使用nlinfit

>> nlinfit([x;y],z,f,[1 2])

ans =

4.500000000000000  13.799999999999956

>>

非线性拟合lsqcurvefit、nlinfit相关推荐

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

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

  2. 非线性/线性函数拟合 Matlab nlinfit

    定义列表 定义列表语法1: [beta,r,J]=nlinfit(x,y,'model',beta0) beta: 估计出的回归系数 r:残差 J:Jacobi矩阵 x:n×m矩阵,对一元非线性回归, ...

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

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

  4. 利用nlinfit函数实现数据非线性拟合

    所谓"拟合",指的是在已有一组实验数据的前提下,研究这组数据有怎样的函数关系--最终结果是从这一组看似漫无规律的数据点中"找出"能用数学表达式表示的规律. 用数 ...

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

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

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

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

  7. 最小二乘法详解(线性拟合与非线性拟合)

     监督学习中,如果预测的变量是离散的,我们称其为分类(如决策树,支持向量机等),如果预测的变量是连续的,我们称其为回归.回归分析中,如果只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表 ...

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

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

  9. MATLAB-最佳平方逼近与非线性拟合例题--十安辰

    MATLAB-最佳平方逼近与非线性拟合例题–十安辰 最佳平方逼近例题 题目:设f(x)=xex,x∈[0,1.5]f\left(x\right)=xe^x ,x\in \left\lbrack 0,1 ...

最新文章

  1. UA OPTI512R 傅立叶光学导论3 用复变函数表示物理量
  2. java内存回收机制
  3. 配置加密_数据库密码配置项都不加密?心也太大了!
  4. FFmpeg从入门到精通:SEI那些事
  5. java biginteger log_java – BigInteger:计算可伸缩方法中的小数位数
  6. osip2 代码分析
  7. 华侨大学计算机应用技术章亮,华侨大学学生综合素质测评成绩汇总表
  8. nero免费中文版内含注册激活码获取器
  9. Qt 动态加载.qrc文件
  10. 台式计算机常用总线,计算机中常见的总线有哪些
  11. linux分段加载程序_Linux的分段机制
  12. 基于IIS Live Smooth Streaming技术流媒体直播系统
  13. 初学Mean Shift 聚类算法
  14. 【活动】VUCA时代下的项目管理:京东技术+系列论坛
  15. Excel 宏的用法的教程
  16. HDU6598 Harmonious Army
  17. Cannot find ./catalina.sh The file is absent or does not hav
  18. 发表论文介绍(计算机类)
  19. PointNetGPD 代码复现,环境配置,结果展示
  20. 阻抗测量模型 和阻抗谱分析

热门文章

  1. VM虚拟机caps lock键一直跳问题的解决方法
  2. vue+窗格切换+田字+dicom显示_03
  3. [CF复盘] Codeforces Round 874 (Div. 3) 20230520】
  4. vscode 使用Java Extension Pack插件导致的Java版本不合问题的解决方案
  5. 命令行里的方括号、尖括号是什么
  6. Kubernetes-docker集群
  7. [冀信2021-pwn] pwn19
  8. Python 奇淫技巧
  9. 减少模板中的代码膨胀
  10. uni-app下拉刷新触底加载更多