利用matlab实现非线性拟合(三维、高维、参数方程)

您所在的位置:网站首页 一次函数拟合公式 利用matlab实现非线性拟合(三维、高维、参数方程)

利用matlab实现非线性拟合(三维、高维、参数方程)

2024-07-14 00:09:36| 来源: 网络整理| 查看: 265

利用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匿名函数时,作为练习有感而发,写下下面内容,非专业,难免有误。 在这里插入图片描述

0 前言

一般而言,通过已有的数据点去推导其它数据点,常见的方法有插值和拟合。插值适用性较广,尤其是线性插值或样条插值已被广泛的应用。但是通过已知的函数去拟合数据,是连接理论与实验重要的桥梁,这一点是插值无法替代的。

日常学习工作中,经常会遇到下面这种问题:想要用某个具体函数去拟合自己的数据,明明知道这个函数的具体形式,却不知道其中的参数怎么选取。本文就简单介绍一下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阶进行拟合,结果如下。

在这里插入图片描述 可以看到拟合曲线与理论曲线基本一致,说明这种方法能够较好的拟合出原始数据的趋势。源代码如下:

x=0:0.5:10; y=0.03*x.^4-0.5*x.^3+2.0*x.^2-0*x-4+6*(rand(size(x))-0.5); p=polyfit(x,y,4); x2=0:0.05:10; y2=polyval(p,x2); figure(); subplot(1,2,1) hold on plot(x,y,'linewidth',1.5,'MarkerSize',15,'Marker','.','color','k') plot(x,0.03*x.^4-0.5*x.^3+2.0*x.^2-0*x-4,'linewidth',1,'color','b') hold off legend('原始数据点','理论曲线','Location','southoutside','Orientation','horizontal') legend('boxoff') box on subplot(1,2,2) hold on plot(x2,y2,'-','linewidth',1.5,'color','r') plot(x,y,'LineStyle','none','MarkerSize',15,'Marker','.','color','k') hold off box on legend('拟合曲线','数据点','Location','southoutside','Orientation','horizontal') legend('boxoff')

对于多项式拟合,不是阶数越多越好。比如还是这个上面这个例子,阶数越多,曲线越能够穿过每一个点,但是曲线的形状与理论曲线偏离越大。所以选择最适合的才是最好的。 在这里插入图片描述

1.2 线性拟合

线性拟合就是能够把拟合函数写成下面这种形式的: 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=p1​f1​(x)+p2​f2​(x)+p3​f3​(x)+...

其中f(x)是关于x的函数,其表达式是已知的。p是常数系数,这个是未知的。

对于这种形式的拟合,matlab内部有一个及其强悍的函数,可以自动输出p的解,并且满足最小二乘。这个函数就是\。没错,就是斜杠。这个符号通常用于求解方程AX=B的情况,我们用X=A\B可以求出未知数X。我们利用当A行和列不等时,输出X的最小二乘这个特性,就可以求出相应的最佳拟合。

还是举个例子

在这里插入图片描述 虽然看上去很非线性,但是x和y都是已知的,a、b、c是未知的,而且是线性的,所以可以被非常简单的拟合出来。假设a=2.5,b=0.5,c=-1,加入随机扰动。拟合的最终效果为:

在这里插入图片描述 最终得到的拟合参数为:a=2.47,b=0.47,c=-0.66。考虑到随机噪声的影响,与原始数据相差不大,源代码如下:

%线性拟合 x=0:0.5:10; a=2.5; b=0.5; c=-1; %原函数 y=a*sin(0.2*x.^2+x)+b*sqrt(x+1)+c+0.5*rand(size(x)); %拟合部分 yn1=sin(0.2*x.^2+x); yn2=sqrt(x+1); yn3=ones(size(x)); X=[yn1;yn2;yn3]; %拟合,得到系数 Pn=X'\y'; yn=Pn(1)*yn1+Pn(2)*yn2+Pn(3)*yn3; %绘图 figure() subplot(1,2,1) plot(x,y,'linewidth',1.5,'MarkerSize',15,'Marker','.','color','k') legend('原始数据点','Location','southoutside','Orientation','horizontal') legend('boxoff') subplot(1,2,2) hold on x2=0:0.01:10; plot(x2,Pn(1)*sin(0.2*x2.^2+x2)+Pn(2)*sqrt(x2+1)+Pn(3),'-','linewidth',1.5,'color','r') plot(x,y,'LineStyle','none','MarkerSize',15,'Marker','.','color','k') hold off box on legend('拟合曲线','数据点','Location','southoutside','Orientation','horizontal') legend('boxoff')

事实上,其实常用的拟合方式中,有很多都是线性拟合,比如多项式拟合,傅里叶拟合等。对于多项式拟合,只需要把拟合的部分替换成x,x.^2,x.^3这种形式。对于傅里叶级数,只需要把拟合的部分替换为sin(x),sin(2*x),sin(3*x)这种形式就行。

下面展示一个利用线性拟合,进行不同频率的三角波级数拟合正弦函数的例子: 在这里插入图片描述

clear; clc; close all t=0:0.001:2*pi;%原函数 YS=sin(t);%基函数 N=21; Yo=[]; for k=1:N Yn=sawtooth(k*(t+pi/2),0.5); Yo=[Yo,Yn']; end YS=YS';%拟合 a = Yo\YS; %绘图 figure() for k=1:N clf plot(t,Yo(:,1:k)*a(1:k,:),t,YS,'LineWidth',1) ylim([-1.3,1.3]) xlim([0,6.3]) pause(0.1) end 2 一维非线性拟合 2.1 简单的非线性拟合

前面介绍了线性的拟合方法。如果一个非线性方程,可以化为上面线性方程中公式中给出的样子,那么我们也可以套用线性的方法去求解。

比如下面的方程: 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)



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭