1.  前言(不在意来龙去脉的可忽略不看)

对于多项式函数,可以用最小二乘法求得精确的拟合结果,使得拟合函数具有全局最优的拟合误差;对于某些非线性函数,如指数函数y=e^(ax+b),也可以对函数转化后,求得精确的拟合结果,如上述指数函数可转化为x=(ln y)/a -b/a,同样可以求得具有全局最优拟合误差的拟合函数。上述函数都可以用MATLAB的regress函数或者polyfit函数求得最优的拟合结果,或者可以用广义逆矩阵的最小二乘解计算而得。
但是,对于大多数非线性函数,难以求得拟合误差全局最优的拟合结果,形如y=c1*e^(px)+c2*e^(qx)。这一类函数,一般做法是首先预估拟合函数的参数,以此作为初始值,采用迭代优化的方法求出局部最优的拟合参数,MATLAB中用lsqcurvefit或者nonlinfit函数求出拟合函数,拟合结果的准确性由选取的初始点决定,初始点的选取极为困难。

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

对于大多数指数函数、三角函数、多项式函数通过四则运算或者复合得到的函数,通常可以用线性微分方程来表示,形如y''+ay'+by=0的常系数线性微分方程则可以表示以下形式的函数:①y=C1*e^(p*x)+C2*e^(q*x);②y=C1*(1+C2*x)*e^(w*x);③y=e^(p*x)*(C1*sin (w*x)+C2*cos (w*x))。
对于上述非线性函数,则可以通过拟合线性微分方程的系数,再计算出对应的非线性函数的参数,并利用样本数据作为初始条件,拟合出函数中的其他常数项。
微分方程需要转化为差分方程:①y'(n)=(y(n+1)-y(n-1))/(x(n+1)-x(n-1));②y''(n)=(y(n+1)-2*y(n)+y(n-1))/((x(n+1)-x(n-1))/2)^2。
通过拟合方程y''+ay'+by=0则可得到a和b,再通过求解二次方程r^2+a*r+b=0,得到两个解r1和r2。
当r1和r2不相等时,则可得到函数y=C1*e^(r1*x)+C2*e^(r2*x),再利用样本数据线性拟合则可得到C1和C2。
当r1=r2时,可得到函数y=C1*e^(r1x)+C2*x*e^(r1x),再利用样本数据线性拟合则可得到C1和C2。
当r1和r2为共轭复数时,可得函数y=e^(a*x)*(C1*sin (b*x)+C2*cos (b*x)),其中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.')

巧妙地进行非线性拟合——非线性拟合转化为线性拟合相关推荐

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

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

  2. 用python的numpy作线性拟合、多项式拟合、对数拟合

    转自:http://blog.itpub.net/12199764/viewspace-1743145/ 项目中有涉及趋势预测的工作,整理一下这3种拟合方法: 1.线性拟合-使用math import ...

  3. python多项式拟合_最小二乘法—多项式拟合非线性函数

    本章涉及到的知识点清单: 1.函数的近似表示-高次多项式 2.误差函数-最小二乘法 3.引出案例函数曲线 4.目标函数 5.优化目标函数 6.优化目标函数-梯度下降法 7.优化目标函数-求解线性方程组 ...

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

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

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

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

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

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

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

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

  8. 使用Origin根据数据的二维图(单x,单y)进行线性拟合

    1.对上周画的二维图进行线性拟合,如下gif所示 2.修改拟合后的图像 3.对参数进行解释 第一行 Equation y=a+bx:          拟合的方程的形式是一元一次方程 第二行 Plot ...

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

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

  10. matlab初值的非线性最小二乘,非线性最小二乘最优化

    最小二乘最优问题(转) 默认分类 2009-05-21 14:56:33 阅读 62 评论 1 字号:大中小 1.约束线性最小二乘 有约束线性最小二乘的标准形式为 sub.to 其中:...... 2 ...

最新文章

  1. Android OpenCV Manager简介
  2. 一张图,看懂阿里云的“飞天”史
  3. 10.3 考试 (考得不好)
  4. 信息学奥赛C++语言: 趣味整数3(回文数)
  5. 卡耐基梅隆大学CMU Brandon Amos博士论文《可微优化机器学习建模》
  6. URAL 1876 Centipede's Morning (机智)
  7. 学Java不得不看的技术书
  8. [转]关于C#操作WPS和office兼容性的问题
  9. 如何VUE写桌面应用(electron)
  10. 配分函数|机器学习推导系列(二十六)
  11. 学习Hibernate框架笔记-第2天
  12. 工具篇-sdkman-SDK管理利器
  13. 2022年京东平台休闲食品的年度总销量超6亿件,同比增长6.5%
  14. 图像增强:opencv去除图片的高光
  15. Kanzi: kanzi 学习:kanzi触发器参考
  16. Windows Terminal+zsh
  17. Excel2010数据透视表1
  18. 基于深度信念网络的硬件模拟器研究(Matlab代码实现)
  19. 核酸检测软件开发方案(软件工程作业)
  20. photoshop 2022 for Mac(ps2022 mac)支持m1

热门文章

  1. win10外接屏显示分辨率不匹配问题解决
  2. 字典写入excel_实例9:用Python自动生成Excel档每日出货清单
  3. python 笔记之“海龟”画图 演示画小猪佩奇,机器猫
  4. win10系统快速切换桌面的方法
  5. 双系统、多系统快速切换
  6. 信息学奥赛C++语言:什么时候开会
  7. 网络流量监控(局域网)
  8. 消防报警图形显示装置linux,中级消防设施操作员考点:消防控制室图形显示装置...
  9. Android摇一摇领红包
  10. jFreeChart连接oracle数据库数据实现顺序图,饼形图和柱状图