利用matlab实现非线性拟合(三维、高维、参数方程) |
您所在的位置:网站首页 › 一次函数拟合公式 › 利用matlab实现非线性拟合(三维、高维、参数方程) |
利用matlab实现非线性拟合[三维、高维、参数方程]
0 前言
1 线性拟合
1.1 多项式拟合
1.2 线性拟合
2 一维非线性拟合
2.1 简单的非线性拟合
2.2 matlab中Curve Fitting App
2.3 matlab中非线性拟合的实现
2.3.1 fit()函数
2.3.2 nlinfit()函数
2.3.3 lsqnonlin()函数和lsqcurvefit()函数
2.3.4 fsolve()函数
2.3.5 粒子群算法
2.3.6 不同算法的对比效果
3 高维非线性方程组拟合
3.1 一般形式高维方程或方程组的拟合
3.2 一般形式参数方程的拟合
3.3 补充
参考文献
2021.06 更新。补充了非线性拟合中,关于最小二乘定义的问题,放在了最后一章。 2021.12更新。应评论区建议,补充了3.3章绘图用的代码。 本文首发于 matlab爱好者 微信公众号,欢迎关注。 惯例声明:本人没有相关的工程应用经验,只是纯粹对相关算法感兴趣才写此博客。所以如果有错误,欢迎在评论区指正,不胜感激。本文主要关注于算法的实现,对于实际应用等问题本人没有任何经验,所以也不再涉及。 本人在学习matlab匿名函数时,作为练习有感而发,写下下面内容,非专业,难免有误。 一般而言,通过已有的数据点去推导其它数据点,常见的方法有插值和拟合。插值适用性较广,尤其是线性插值或样条插值已被广泛的应用。但是通过已知的函数去拟合数据,是连接理论与实验重要的桥梁,这一点是插值无法替代的。 日常学习工作中,经常会遇到下面这种问题:想要用某个具体函数去拟合自己的数据,明明知道这个函数的具体形式,却不知道其中的参数怎么选取。本文就简单介绍一下matlab环境下,如何进行非线性拟合。 1 线性拟合 1.1 多项式拟合多项式拟合就是利用下面形式的方程去拟合数据: y = a + b x + c x 2 + d x 3 + . . . y=a +bx+cx^2+dx^3+... y=a+bx+cx2+dx3+... matlab中可以用polyfit()函数进行多项式拟合。下面举一个小例子: 对于已有的数据点,我们采用4阶多项式拟合。其中已知函数的的表达式为 y=0.03 x^4 - 0.5 x^3 + 2 x^2 - 4在此基础上添加了一些噪声点。拟合曲线依然采用4阶进行拟合,结果如下。
对于多项式拟合,不是阶数越多越好。比如还是这个上面这个例子,阶数越多,曲线越能够穿过每一个点,但是曲线的形状与理论曲线偏离越大。所以选择最适合的才是最好的。 线性拟合就是能够把拟合函数写成下面这种形式的: y = p 1 f 1 ( x ) + p 2 f 2 ( x ) + p 3 f 3 ( x ) + . . . y=p_1 f_1(x) +p_2 f_2(x)+p_3 f_{3}(x)+... y=p1f1(x)+p2f2(x)+p3f3(x)+... 其中f(x)是关于x的函数,其表达式是已知的。p是常数系数,这个是未知的。 对于这种形式的拟合,matlab内部有一个及其强悍的函数,可以自动输出p的解,并且满足最小二乘。这个函数就是\。没错,就是斜杠。这个符号通常用于求解方程AX=B的情况,我们用X=A\B可以求出未知数X。我们利用当A行和列不等时,输出X的最小二乘这个特性,就可以求出相应的最佳拟合。 还是举个例子
事实上,其实常用的拟合方式中,有很多都是线性拟合,比如多项式拟合,傅里叶拟合等。对于多项式拟合,只需要把拟合的部分替换成x,x.^2,x.^3这种形式。对于傅里叶级数,只需要把拟合的部分替换为sin(x),sin(2*x),sin(3*x)这种形式就行。 下面展示一个利用线性拟合,进行不同频率的三角波级数拟合正弦函数的例子: 前面介绍了线性的拟合方法。如果一个非线性方程,可以化为上面线性方程中公式中给出的样子,那么我们也可以套用线性的方法去求解。 比如下面的方程: y = a ∗ exp ( − b x ) y=a*\exp(-bx) y=a∗exp(−bx) 经过取对数变换,可以变为下面等效的线性形式: lg ( y ) = lg ( a ) + b ∗ ( − x ) \lg(y)=\lg(a)+b*(-x) lg(y) |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |