【学习课件】第七讲matlab实现非线性拟合
- 格式:ppt
- 大小:858.50 KB
- 文档页数:11
基于MATLAB的非线性曲线拟合一、本文概述随着科技的不断进步,数据分析和处理在各个领域中都发挥着越来越重要的作用。
非线性曲线拟合作为一种重要的数据处理方法,被广泛应用于科学研究、工程实践以及日常生活等多个领域。
MATLAB作为一款强大的数学计算和数据分析软件,为非线性曲线拟合提供了便捷的工具和丰富的函数库。
本文旨在介绍基于MATLAB的非线性曲线拟合方法,包括非线性模型的建立、参数估计、模型验证等步骤,并通过具体实例展示MATLAB在非线性曲线拟合中的应用。
本文首先简要介绍了非线性曲线拟合的基本概念和研究背景,阐述了非线性曲线拟合在实际应用中的重要性。
接着,详细介绍了MATLAB 中非线性曲线拟合的实现过程,包括非线性模型的构建、数据预处理、参数估计方法的选择、模型拟合和评估等方面。
在此基础上,通过实例分析,展示了MATLAB在非线性曲线拟合中的实际应用,并对拟合结果进行了分析和讨论。
对全文进行了总结,指出了非线性曲线拟合在实际应用中的潜在价值和未来研究方向。
通过本文的学习,读者可以了解非线性曲线拟合的基本原理和方法,掌握MATLAB在非线性曲线拟合中的应用技巧,提高数据处理和分析能力,为相关领域的研究和实践提供有力支持。
二、非线性曲线拟合基础在数据分析和科学研究中,我们经常遇到需要通过一组离散的数据点来寻找其潜在的非线性关系。
非线性曲线拟合就是这样一个过程,它旨在找到最能描述数据点之间关系的非线性函数。
与线性拟合不同,非线性拟合的模型函数通常包含非线性参数,这些参数需要通过一定的优化算法来求解。
MATLAB作为一款强大的数学软件,提供了多种非线性曲线拟合的工具和函数。
在MATLAB中,非线性曲线拟合通常通过lsqcurvefit、lsqnonlin或fit等函数实现。
这些函数允许用户定义自己的非线性模型函数,并通过迭代优化算法来寻找最佳拟合参数。
在进行非线性曲线拟合时,选择合适的模型函数至关重要。
matlab-⾮线性拟合函数lsqcurvefit的使⽤和初值选取所解决问题:我们知道我们的表达式是y=A+B*exp(-x.^2)-C./log(x), ⽽且现在我们⼿⾥⾯有x与y对应的⼀⼤把数据。
我们需要根据x, y的值找出最佳的A、B、C值。
则我们现在借助Matlab的函数lsqcurvefit,当然你也可以使⽤nlinfit、lsqnonlin甚⾄cftool拟合⼯具箱.其具体⽤法请⾃⼰⽤Matlab的帮助命令进⾏查看。
这⾥仅简单介绍⼀下常⽤的函数lsqcurvefit。
正⽂:格式:lsqcurvefit(f,a,x,y)f: 符号函数句柄,如果是以m⽂件的形式调⽤的时候,别忘记加@.这⾥需要注意,f函数的返回值是和y匹对的,即拟合参数的标准是(f-y)^2取最⼩值,具体看下⾯的例⼦a:最开始预估的值(预拟合的未知参数的估计值)。
如上⾯的问题如果我们预估A为1,B为2,C为3,则a=[1 2 3]x:我们已经获知的x的值y:我们已经获知的x对应的y的值例:问题:对于函数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[A,resnorm]=lsqcurvefit(f,a,x,y) %resnorm残差平⽅和 A是参数答案是 A = 8.0000 12.0000 resnorm =7.7179e-20问题:我们知道函数是 y=A+B*exp(-(x/C).^2), 以及x y的数据xdata=[950;1150;1350];ydata=[200;100;50];fun1 = @(x,xdata)x(1)+x(2)*exp(-(xdata./x(3)).^2); %⾃定义函数类型X0=[0,1120,740]; %初始参数[X,resnorm]=lsqcurvefit(fun1,X0,xdata,ydata); %resnorm残差平⽅和 X是参数disp(X) %得到所求参数%画图xi=800:1500;yi=fun1(X,xi); %调⽤函数句柄plot(xi,yi)hold onplot(xdata,ydata,'or')关于这个问题,我们发现它的初值设置的⾮常巧妙,对于初值的选取,我在⼤佬的⼀篇⽂章()阅读到:拟合初值的选取问题因为初值对拟合速度甚⾄结果有⼀定影响,因此这⾥就简单说⼀下确定数学模型后,拟合⾮线性问题时,初值的选取的问题。
MATLAB神经⽹络(2)BP神经⽹络的⾮线性系统建模——⾮线性函数拟合2.1 案例背景在⼯程应⽤中经常会遇到⼀些复杂的⾮线性系统,这些系统状态⽅程复杂,难以⽤数学⽅法准确建模。
在这种情况下,可以建⽴BP神经⽹络表达这些⾮线性系统。
该⽅法把未知系统看成是⼀个⿊箱,⾸先⽤系统输⼊输出数据训练BP神经⽹络,使⽹络能够表达该未知函数,然后⽤训练好的BP神经⽹络预测系统输出。
本章拟合的⾮线性函数为y=x12+x22该函数的图形如下图所⽰。
t=-5:0.1:5;[x1,x2] =meshgrid(t);y=x1.^2+x2.^2;surfc(x1,x2,y);shading interpxlabel('x1');ylabel('x2');zlabel('y');title('⾮线性函数');2.2 模型建⽴神经⽹络结构:2-5-1从⾮线性函数中随机得到2000组输⼊输出数据,从中随机选择1900 组作为训练数据,⽤于⽹络训练,100组作为测试数据,⽤于测试⽹络的拟合性能。
2.3 MATLAB实现2.3.1 BP神经⽹络⼯具箱函数newffBP神经⽹络参数设置函数。
net=newff(P, T, S, TF, BTF, BLF, PF, IPF, OPF, DDF)P:输⼊数据矩阵;T:输出数据矩阵;S:隐含层节点数;TF:结点传递函数。
包括硬限幅传递函数hardlim、对称硬限幅传递函数hardlims、线性传递函数purelin、正切型传递函数tansig、对数型传递函数logsig;x=-5:0.1:5;subplot(2,6,[2,3]);y=hardlim(x);plot(x,y,'LineWidth',1.5);title('hardlim');subplot(2,6,[4,5]);y=hardlims(x);plot(x,y,'LineWidth',1.5);title('hardlims');subplot(2,6,[7,8]);y=purelin(x);plot(x,y,'LineWidth',1.5);title('purelin');subplot(2,6,[9,10]);y=tansig(x);plot(x,y,'LineWidth',1.5);title('tansig');subplot(2,6,[11,12]);y=logsig(x);plot(x,y,'LineWidth',1.5);title('logsig');BTF:训练函数。
matlab 非线性拟合函数lsqcurvefit---logistic人口模型参数估计x= lsqcurvefit(fun,x0,xdata,ydata)x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub)x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)x = lsqcurvefit(problem)[x,resnorm] = lsqcurvefit(...)[x,resnorm,residual] = lsqcurvefit(...)[x,resnorm,residual,exitflag] = lsqcurvefit(...)[x,resnorm,residual,exitflag,output] = lsqcurvefit(...)[x,resnorm,residual,exitflag,output,lambda] = lsqcurvefit(...)[x,resnorm,residual,exitflag,output,lambda,jacobian] = lsqcurvefit(.. .)x0为初始解向量;xdata,ydata为满足关系ydata=F(x, xdata)的数据;lb、ub为解向量的下界和上界,若没有指定界,则lb=[ ],ub=[ ];options为指定的优化参数;fun为拟合函数,其定义方式为:x = lsqcurvefit(@myfun,x0,xdata,ydata),其中myfun已定义为 function F = myfun(x,xdata)F = … % 计算x处拟合函数值fun的用法与前面相同;resnorm=sum ((fun(x,xdata)-ydata).^2),即在x处残差的平方和;residual=fun(x,xdata)-ydata,即在x处的残差;exitflag为终止迭代的条件;output为输出的优化信息;lambda为解x处的Lagrange乘子;jacobian为解x处拟合函数fun的jacobian矩阵。
使用nlinfit 、fminsearch 在matlab 中实现基于最小二乘法的非线性参数拟合(整理自网上资源) 最小二乘法在曲线拟合中比较普遍。
拟合的模型主要有1. 直线型2. 多项式型3. 分数函数型4. 指数函数型5. 对数线性型6. 高斯函数型一般对于 LS 问题,通常利用反斜杠运算“”、 fminsearch 或优化工具箱提供的极小化函数求解。
在 Matlab 中,曲线拟合工具箱也提供了曲线拟合的图形界面操作。
在命令提示符后键入: cftool ,即可根据数据,选择适当的拟合模型。
“”命令1. 假设要拟合的多项式是:y=a+b*x+c*xT.首先建立设计矩阵X:X=[o nes(size(x)) x x A2];执行:para=X\ypara 中包含了三个参数: para(1)=a;para(2)=b;para(3)=c;这种方法对于系数是线性的模型也适应。
2. 假设要拟合: y=a+b*exp(x)+cx*exp(xA2)设计矩阵 X 为X=[ones(size(x)) exp(x) x.*exp(x.A2)];para=X\y3. 多重回归(乘积回归)设要拟合: y=a+b*x+c*t ,其中 x 和 t 是预测变量, y 是响应变量。
设计矩阵为X=[ones(size(x)) x t] % 注意 x,t 大小相等!para=X\y polyfit 函数polyfit 函数不需要输入设计矩阵,在参数估计中, polyfit 会根据输入的数据生成设计矩阵。
1. 假设要拟合的多项式是: y=a+b*x+c*xA2 p=polyfit(x,y,2)然后可以使用 polyval 在 t 处预测: y_hat=polyval(p,t)polyfit 函数可以给出置信区间。
[p S]=polyfit(x,y,2) %S 中包含了标准差[y_fit,delta] = polyval(p,t,S) % 按照拟合模型在 t 处预测在每个 t 处的 95%CI为:(y_fit-1.96*delta, y_fit+1.96*delta)2. 指数模型也适应假设要拟合: y = a+b*exp(x)+c*exp(x.?2) p=polyfit(x,log(y),2)fminsearch 函数fminsearch 是优化工具箱的极小化函数。
三维曲线(非线性)拟合步骤 1 设定目标函数. (M函数书写)% 可以是任意的例如: function f=mydata(a,data %y的值目标函数值或者是第三维的,a=[a(1 ,a(2] 列向量 x=data(1,:; %data 是一2维数组,x=x1 y=data(2,:; %data 是一2维数组,x=x2 f=a(1*x+a(2*x.*y; %这里的a(1, a(2为目标函数的系数值。
f的值相当于ydata的值 2 然后给出数据xdata和ydata的数据和拟合函数lsqcurvefit 例如:x1=[1.0500 1.0520 1.0530 1.0900 1.0990 1.1020 1.1240 1.1420... 1.1490 1.0500 1.0520 1.0530 1.0900 1.0990 1.1020 1.1240 1.1420 1.1490]; x2=[3.8500 1.6500 2.7500 5.50007.7000 3.3000 4.9500 8.2500 11.5500... 1.6500 2.7500 3.8500 7.7000 3.3000 5.50008.2500 11.5500 4.9500]; ydata=[56.2000 62.8000 62.2000 40.8000 61.4000 57.5000 44.5000 54.8000... 53.9000 64.2000 62.9000 64.1000 63.0000 62.2000 64.2000 63.6000...52.5000 62.0000]; data=[x1;x2]; %类似于将x1 x2整合成一个2维数组。
a0= [-0.0014,0.07]; option=optimset('MaxFunEvals',5000; format long;[a,resnorm]=lsqcurvefit(@mydata,a0,data,ydata,[],[],option; yy=mydata(a,data;result=[ydata' yy' (yy-ydata'] % a的值为拟合的目标函数的参数值利用lsqcurvefit进行拟合的它完整的语法形式是: %[x,resnorm,residual,exitflag,output,lambda,jacobian]=lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options 二维曲线(非线性)拟合步骤 1.function F = myfun(x,xdata F = x(1*xdata.^2 + x(2*sin(xdata + x(3*xdata.^3; % 可以是任意的 2.然后给出数据xdata和ydata >>xdata = [3.6 7.7 9.3 4.1 8.6 2.8 1.3 7.9 10.0 5.4];>>ydata = [16.5 150.6 263.1 24.7 208.5 9.9 2.7 163.9 325.0 54.3]; >>x0 = [10, 10, 10];%初始估计值 >>[x,resnorm] = lsqcurvefit(@myfun,x0,xdata,ydata 搜狐博客 > 豆豆快乐吧 > 日志 2009-09-01 | Matlab画三维图的方法 Matlab画三维图的方法 Tags: Matlab. 三维曲线的画法三维空间曲线要用到plot3函数,这个和plot类似。
使用nlinfit 、fminsearch 在matlab 中实现基于最小二乘法的非线性参数拟合(整理自网上资源) 最小二乘法在曲线拟合中比较普遍。
拟合的模型主要有1. 直线型2. 多项式型3. 分数函数型4. 指数函数型5. 对数线性型6. 高斯函数型一般对于 LS 问题,通常利用反斜杠运算“”、 fminsearch 或优化工具箱提供的极小化函数求解。
在 Matlab 中,曲线拟合工具箱也提供了曲线拟合的图形界面操作。
在命令提示符后键入: cftool ,即可根据数据,选择适当的拟合模型。
“”命令1. 假设要拟合的多项式是:y=a+b*x+c*xT.首先建立设计矩阵X:X=[o nes(size(x)) x x A2];执行:para=X\ypara 中包含了三个参数: para(1)=a;para(2)=b;para(3)=c;这种方法对于系数是线性的模型也适应。
2. 假设要拟合: y=a+b*exp(x)+cx*exp(xA2)设计矩阵 X 为X=[ones(size(x)) exp(x) x.*exp(x.A2)];para=X\y3. 多重回归(乘积回归)设要拟合: y=a+b*x+c*t ,其中 x 和 t 是预测变量, y 是响应变量。
设计矩阵为X=[ones(size(x)) x t] % 注意 x,t 大小相等!para=X\y polyfit 函数polyfit 函数不需要输入设计矩阵,在参数估计中, polyfit 会根据输入的数据生成设计矩阵。
1. 假设要拟合的多项式是: y=a+b*x+c*xA2 p=polyfit(x,y,2)然后可以使用 polyval 在 t 处预测: y_hat=polyval(p,t)polyfit 函数可以给出置信区间。
[p S]=polyfit(x,y,2) %S 中包含了标准差[y_fit,delta] = polyval(p,t,S) % 按照拟合模型在 t 处预测在每个 t 处的 95%CI为:(y_fit-1.96*delta, y_fit+1.96*delta)2. 指数模型也适应假设要拟合: y = a+b*exp(x)+c*exp(x.?2) p=polyfit(x,log(y),2)fminsearch 函数fminsearch 是优化工具箱的极小化函数。