1. 前言

对于多项式函数,可以用最小二乘法求得精确的拟合结果,使得拟合函数具有全局最优的拟合误差;对于某些非线性函数,如指数函数

,也可以对函数转化后,求得精确的拟合结果,如上述指数函数可转化为
,同样可以求得具有全局最优拟合误差的拟合函数。上述函数都可以用MATLAB的regress函数或者polyfit函数求得最优的拟合结果,或者可以用广义逆矩阵的最小二乘解计算而得。

但是,对于大多数非线性函数,难以求得拟合误差全局最优的拟合结果,形如

。这一类函数,一般做法是首先预估拟合函数的参数,以此作为初始值,采用迭代优化的方法求出局部最优的拟合参数,MATLAB中用lsqcurvefit或者nonlinfit函数求出拟合函数,拟合结果的准确性由选取的初始点决定,初始点的选取极为困难。

2. 非线性拟合转化为线性拟合

对于大多数指数函数、三角函数、多项式函数通过四则运算或者复合得到的函数,通常可以用线性微分方程来表示,形如

的常系数线性微分方程则可以表示以下形式的函数:①

对于上述非线性函数,则可以通过拟合线性微分方程的系数,再计算出对应的非线性函数的参数,并利用样本数据作为初始条件,拟合出函数中的其他常数项,如下面步骤。
微分方程需要转化为差分方程:①

;②

通过拟合方程

则可得到a和b,再通过求解二次方程
,得到两个解r1和r2。

当r1和r2不相等时,则可得到函数

,再利用样本数据线性拟合则可得到C1和C2。

当r1=r2时,可得到函数

,再利用样本数据线性拟合则可得到C1和C2。

当r1和r2为共轭复数时,可得函数

,其中a和b分别为r1的实部和虚部,再利用样本数据线性拟合则可得到C1和C2。

实例MATLAB代码如下:

% 产生样本数据
x = linspace(0,98,50)';
y = 0.9*exp(-0.2*x)-0.3*exp(-0.06*x)+10.57;
plot(x,y)
% 计算差分
dyx = (y(3:end) - y(1:end-2))./(x(3:end) - x(1:end-2));
ddyx = (y(3:end) - 2*y(2:end-1) + y(1:end-2))./(x(3:end) - x(1:end-2)).^2*4;
% 拟合微分方程系数
A = [dyx,y(2:end-1),-1*ones(length(dyx),1)];
b = -ddyx;
a = (A.'*A)A.'*b;
a(3) = a(3)/a(2);
% 求解二次方程
syms r
r0 = double(solve(r^2+a(1)*r+a(2)))
% 线性拟合得到常数项C1,C2
A = [exp(r0(1)*x),exp(r0(2)*x)];
C = (A.'*A)A.'*(y-a(3))
% 作图
hold on
plot(x,C(1)*exp(r0(1)*x)+C(2)*exp(r0(2)*x)+a(3),'r.')

最后,还可以用lsqcurvefit函数进一步优化拟合结果,采用上述方法得到的参数作为初始点,可以修正差分方程拟合导致的误差。

f = @(b,x)b(1)*exp(b(2)*x)+b(3)*exp(b(4)*x)+b(5);
b0 = [C(1);r0(1);C(2);r0(2);a(3)];
b1 = lsqcurvefit(f,b0,x,y)
hold on
plot(x,f(b1,x),'k.')

lsqcurvefit拟合结果为复数_非线性拟合怎么转化为线性拟合?相关推荐

  1. lsqcurvefit拟合结果为复数_使用科学计算器计算复数与相量(提高篇)

    [作者声明] 本文所有文字均为作者原创,所有图片均为作者本人亲自拍摄或制作. 版权所有,仅供阅读欣赏,禁止任何单位或个人以任何形式对本文的文字或图片进行包括但不限于复制.转载.引用.抄袭.截图.模仿. ...

  2. 线性拟合polyfit_6.数据分析(1) 描述性统计量和线性回归(2)

    昨天分享了描述性统计量相关内容,今天把昨天剩下的部分写完, 昨天文章链接: 6.数据分析(1) --描述性统计量和线性回归(1) 前言:在针对非物理信号分析的时候,例如用户数.用户经常出入的地点.疾病 ...

  3. 基于matlab数据线性拟合回归

    1 选题背景及意义 在统计学中,线性回归是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析.这种函数是一个或多个称为回归系数的模型参数的线性组合.只有一个自变 ...

  4. c++ 显示三维散点图_【无机纳米材料科研制图——OriginLab 0209】Origin散点图线性拟合与非线性拟合...

    此篇,我们来分享对于散点图的线性拟合和非线性拟合. 一.线性拟合 1)绘制散点图. 如下图所示,我们随意编了一组数据,框选X.Y两列之后,点击Plot-->Symbol-->Scatter ...

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

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

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

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

  7. Java 使用 Apache commons-math3 线性拟合、非线性拟合实例(带效果图)

    Java 使用 CommonsMath3 的线性和非线性拟合实例,带效果图 例子查看 GitHub Gitee 在线查看 运行src/main/java/org/wfw/chart/Main.java ...

  8. matlab最小二乘法拟合参数,matlab最小二乘法的非线性参数拟合

    matlab最小二乘法的非线性参数拟合 首先说一下匿名函数:在创建匿名函数时,Matlab记录了关于函数的信息,当使用句柄调用该函数的时候,Matlab不再进行搜索,而是立即执行该函数,极大提高了效率 ...

  9. origin中文版散点图拟合曲线_「测试狗」Origin入门教程:如何进行单段及多段线性拟合...

    在进行数据处理时,如果需要对绘制的散点图进行线性拟合,应该怎么操作呢?针对更为复杂的情况,按照不同需要进行分段线性拟合时,怎么样才能够实现多段拟合呢? 一.单段线性拟合 1.首先,把数据导入origi ...

最新文章

  1. XML解析简介及Xerces-C++简单使用举例
  2. zedboard嵌入式linux,zedboard构建嵌入式linux
  3. spring包自动扫描声明
  4. css3:绘制android3蜂巢Honeycomb
  5. 第三章 安装apache
  6. AntD 官网样例 InputRef报错原因
  7. 以太网性能测试分析仪
  8. sql 注射_基本注射/资格赛,范围
  9. 使用Cucumber+Rspec玩转BDD(2)——邮件激活
  10. 题目:16版.雇员的工作职责(一)
  11. java的双亲委派_深入理解Java的类加载器及双亲委派机制
  12. 短视频运营小技巧,掌握推荐机制很重要,吸粉引流也不难
  13. 空气质量等级c语言编程,华中科技大学C语言课设空气质量检测信息管理系统技术分析.docx...
  14. 成考本科计算机找工作有用吗,成人本科学历找工作有用吗 就业困难吗
  15. 随机森林里oob_score以及用oob判断特征重要性的理解
  16. 把数组改为用逗号隔开的形式
  17. 滴滴分析专家8000字干货:数据如何驱动业务增长 ?
  18. 基于Android手机校园外卖订餐系统
  19. Flatty Shadow图标自动产生器——在线生成各种扁平化 ICON
  20. OA系统的功能和作用是什么(OA系统百科)

热门文章

  1. 提取稳定前景的两种方法
  2. asp.net发布到IIS中出现错误:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”...
  3. (原创)发布一个C++版本的ORM库SmartDB(一)
  4. 剑指offer--面试题14--收获
  5. Win2003下Asp配置技巧 http 500内部服务器错误
  6. 人工智能AI和机器学习ML对量化交易领域的影响
  7. oledb32.dll的作用
  8. axure删除的页面怎么恢复_Axure如何应对意外关闭
  9. Mybatis工作流程及其原理与解析
  10. Hashmap链表长度为8时转换成红黑树,你知道为什么是8吗