文档库 最新最全的文档下载
当前位置:文档库 › matlab非线性拟合

matlab非线性拟合

MATLAB实现非线性曲线拟合最小二乘法

非线性曲线拟合最小二乘法 一、问题提出 设数据(i i y x ,),(i=0,1,2,3,4).由表3-1给出,表中第四行为i i y y =ln ,可以看出数学模型为bx ae y =,用最小二乘法确定a 及b 。 i 0 1 2 3 4 i x 1.00 1.25 1.50 1.75 2.00 i y 5.10 5.79 6.53 7.45 8.46 i y 1.629 1.756 1.876 2.008 2.135 二、理论基础 根据最小二乘拟合的定义:在函数的最佳平方逼近中],[)(b a C x f ∈,如果f(x)只在一组离散点集{i x ,i=0,1,…,m},上给定,这就是科学实验中经常见到的实验数据{(i i y x ,), i=0,1,…,m}的曲线拟合,这里)(i i x f y =,i=0,1,…,m,要求一个函数)(*x S y =与所给数据{(i i y x ,),i=0,1,…,m}拟合,若记误差 i i i y x S -=)(*δ,i=0,1,…,m,T m ),,(10δδδδ, =,设)(,),(),(10x x x n ??? 是] ,[b a C 上线性无关函数族,在)}(,),(),({10x x x span n ???? =中找一函数)(*x S ,使误差平方和 ∑∑∑===∈ -=-==m i m i m i i i x S i i i y x S y x S 0 2 )(2 * 2 22 ])([])([min ? δδ , 这里 )()()()(1100x a x a x a x S n n ???+++= (n

最小二乘法曲线拟合原理及matlab实现

最小二乘法曲线拟合原理及m a t l a b实现 Modified by JEEP on December 26th, 2020.

曲线拟合(curve-fitting ):工程实践中,用测量到的一些离散的数据},...2,1,0),,{(m i y x i i =求一个近似的函数)(x ?来拟合这组数据,要求所得的拟合曲线能最好的反映数据的基本趋势(即使)(x ?最好地逼近()x f ,而不必满足插值原则。因此没必要取)(i x ?=i y ,只要使i i i y x -=)(?δ尽可能地小)。 原理: 给定数据点},...2,1,0),,{(m i y x i i =。求近似曲线)(x ?。并且使得近似曲线与()x f 的偏差最小。近似曲线在该点处的偏差i i i y x -=)(?δ,i=1,2,...,m 。 常见的曲线拟合方法: 1.使偏差绝对值之和最小 2.使偏差绝对值最大的最小 3.使偏差平方和最小 最小二乘法: 按偏差平方和最小的原则选取拟合曲线,并且采取二项式方程为拟合曲线的方法,称为最小二乘法。 推导过程: 1. 设拟合多项式为: 2. 各点到这条曲线的距离之和,即偏差平方和如下: 3. 问题转化为求待定系数0a ...k a 对等式右边求i a 偏导数,因而我们得到了: ....... 4、 把这些等式化简并表示成矩阵的形式,就可以得到下面的矩阵: 5. 将这个范德蒙得矩阵化简后可得到: 6. 也就是说X*A=Y ,那么A = (X'*X)-1*X'*Y ,便得到了系数矩阵A ,同时,我们也就得到了拟合曲线。

MATLAB实现: MATLAB提供了polyfit()函数命令进行最小二乘曲线拟合。 调用格式:p=polyfit(x,y,n) [p,s]= polyfit(x,y,n) [p,s,mu]=polyfit(x,y,n) x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p。x必须是单调的。矩阵s包括R(对x进行QR分解的三角元素)、df(自由度)、normr(残差)用于生成预测值的误差估计。 [p,s,mu]=polyfit(x,y,n)在拟合过程中,首先对x进行数据标准化处理,以在拟合中消除量纲等影响,mu包含标准化处理过程中使用的x的均值和标准差。 polyval( )为多项式曲线求值函数,调用格式: y=polyval(p,x) [y,DELTA]=polyval(p,x,s) y=polyval(p,x)为返回对应自变量x在给定系数P的多项式的值。 [y,DELTA]=polyval(p,x,s) 使用polyfit函数的选项输出s得出误差估计Y DELTA。它假设polyfit函数数据输入的误差是独立正态的,并且方差为常数。则Y DELTA将至少包含50%的预测值。 如下给定数据的拟合曲线: x=[,,,,,], y=[,,,,,]。 解:MATLAB程序如下: x=[,,,,,]; y=[,,,,,]; p=polyfit(x,y,2) x1=::; y1=polyval(p,x1); plot(x,y,'*r',x1,y1,'-b') 运行结果如图1

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

matlab最小二乘法的非线性参数拟合 首先说一下匿名函数:在创建匿名函数时,Matlab记录了关于函数的信息,当使用句柄调用该函数的时候,Matlab不再进行搜索,而是立即执行该函数,极大提高了效率。所以首选匿名函数。具体拟合时可以使用的方法如下: 1 曲线拟合工具箱提供了很多拟合函数,使用简单 非线性拟合nlinfit函数 clear all; x1=[0.4292 0.4269 0.381 0.4015 0.4117 0.3017]'; x2=[0.00014 0.00059 0.0126 0.0061 0.00425 0.0443]'; x=[x1 x2]; y=[0.517 0.509 0.44 0.466 0.479 0.309]'; f=@(p,x) 2.350176*p(1)*(1-1/p(2))*(1-(1-x(:,1).^(1/p(2))).^p(2)).^2.*(x(:,1).^ (-1/p(2))-1).^(-p(2)).*x(:,1).^(-1/p(2)-0.5).*x(:,2); p0=[8 0.5]'; opt=optimset('TolFun',1e-3,'TolX',1e-3);% [p R]=nlinfit(x,y,f,p0,opt) 2 最小二乘法在曲线拟合中比较普遍。拟合的模型主要有 1.直线型 2.多项式型 3.分数函数型 4.指数函数型 5.对数线性型 6.高斯函数型 一般对于LS问题,通常利用反斜杠运算“\”、fminsearch或优化工具箱提供的极小化函数求解。在Matlab中,曲线拟合工具箱也提供了曲线拟合的图形界面操作。在命令提示符后键入:cftool,即可根据数据,选择适当的拟合模型。 “\”命令 1.假设要拟合的多项式是:y=a+b*x+c*x^ 2.首先建立设计矩阵X: X=[ones(size(x)) x x^2]; 执行: para=X\y para中包含了三个参数:para(1)=a;para(2)=b;para(3)=c; 这种方法对于系数是线性的模型也适应。 2.假设要拟合:y=a+b*exp(x)+cx*exp(x^2) 设计矩阵X为 X=[ones(size(x)) exp(x) x.*exp(x.^2)]; para=X\y 3.多重回归(乘积回归) 设要拟合:y=a+b*x+c*t,其中x和t是预测变量,y是响应变量。设计矩阵为X=[ones(size(x)) x t] %注意x,t大小相等! para=X\y

Matlab 线性拟合 & 非线性拟合

Matlab 线性拟合& 非线性拟合 分类:Computer Vision MATLAB 2012-06-22 21:24 46022人阅读评论(5) 收藏举报matlabplotrandomc图像处理 目录(?)[+]使用Matlab进行拟合是图像处理中线条变换的一个重点内容,本文将详解Matlab中的直线拟合和曲线 拟合用法。 关键函数: fittype Fit type for curve and surface fitting Syntax ffun = fittype(libname) ffun = fittype(expr) ffun = fittype({expr1,...,exprn}) ffun = fittype(expr, Name, Value,...) ffun= fittype({expr1,...,exprn}, Name, Value,...) /***********************************线性拟合***********************************/ 线性拟合公式: coeff1 * term1 + coeff2 * term2 + coeff3 * term3 + ... 其中,coefficient是系数,term都是x的一次项。 线性拟合Example: Example1: y=kx+b; 法1: [csharp]view plaincopyprint? 1.x=[1,1.5,2, 2.5,3];y=[0.9,1.7,2.2,2.6,3]; 2.p=polyfit(x,y,1); 3.x1=linspace(min(x),max(x)); 4.y1=polyval(p,x1); 5.plot(x,y,'*',x1,y1); 结果:p = 1.0200 0.0400

matlab非线性参数拟合估计_很好的参考材料

使用nlinfit、fminsearch在matlab中实现基于最小二乘法的 非线性参数拟合 (整理自网上资源) 最小二乘法在曲线拟合中比较普遍。拟合的模型主要有 1.直线型 2.多项式型 3.分数函数型 4.指数函数型 5.对数线性型 6.高斯函数型 ...... 一般对于LS问题,通常利用反斜杠运算“\”、fminsearch或优化工具箱提供的极小化函数求解。在Matlab中,曲线拟合工具箱也提供了曲线拟合的图形界面操作。在命令提示符后键入:cftool,即可根据数据,选择适当的拟合模型。 “\”命令 1.假设要拟合的多项式是:y=a+b*x+c*x^ 2.首先建立设计矩阵X: X=[ones(size(x)) x x^2]; 执行: para=X\y para中包含了三个参数:para(1)=a;para(2)=b;para(3)=c; 这种方法对于系数是线性的模型也适应。 2.假设要拟合:y=a+b*exp(x)+cx*exp(x^2) 设计矩阵X为 X=[ones(size(x)) exp(x) x.*exp(x.^2)]; para=X\y 3.多重回归(乘积回归) 设要拟合: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*x^2 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)

MATLAB在非线性曲线拟合中的应用研究

MATLAB 在非线性曲线拟合中的应用小结 摘要:归纳总结了非线性曲线拟合的方法、求解步骤和上机操作过程 关键词:曲线拟合非线性MATLAB 正文: 1.曲线拟合的基本原理 已知一组测定的数据(例如N 个点(xi,yi )去求得自变量x 和因变量y 的一个近似解析表达式y=φ(x )。若记误差δi=φ(xi )-yi ,i=1,2,…N ,则要使误差的平方和最小,即要求: ∑==N i i Q 1 2 δ 为最小,这就是常用的最小二乘法原理。 2 .MATLAB 曲线拟合的相关方法 2.1.函数形式: (1)多项式拟合函数polyfit ,调用格式为: p=polyfit (x,y,n ) 其中x ,y 为参与曲线拟合的实验数据,n 为拟合多项式的次数,函数返回值为拟合多项式的系数(按降幂排列)。n=1时,就为线性拟合。 例1:给出表1数据,试用最小二乘法求一次和二次拟合多项式。 表1 数据 在MATLAB 命令窗口中输入: clear; close; x=-1:0.25:1; y=[-0.2209,0.3295,0.8826,1.4392,2.0003,2.5645,3.1334,3.7061,4.2836] p1=polyfit(x,y,1) p2=polyfit(x,y,2) y1=polyval(p1,x); y2=polyval(p2,x); plot(x,y,'+',x,y1,'r:',x,y2,'k-.') 运行结果:

拟合多项式为:y*=2.0516+2.0131和y*=0.0313x2+2.2516x+2.20001 (2)非线性数据拟合函数lsqcurvefit 调用格式为: c=lsqcurvefi (t'fun',x0,xdata,ydata ) 其中'fun'为拟合函数的M -函数文件名,x0为初始向量,xdata,ydata 为参与曲线拟合的实验数据。函数返回值c 为非线性函数fun 的拟合系数。 例2:2004年全国大学生数学建模竞赛C 题(酒后驾车)中给出某人在短时间内喝下两瓶啤酒后,间隔一定的时间测量他的血液中酒精含量y (毫克/百毫升),得到数据如表2。 表2 酒精含量与饮酒时间的实验数据 通过建立微分方程模型得到短时间内喝酒后血液中 酒精浓度与时间的关系为: )(321t c t c e e c y ---= (2) 根据实验数据,利用非线性拟合函数lsqcurvefit ,确定模型(2)式中的参数c1,c2,c3。求解过程为: 先编写一个M -函数文件Example2_1: function f=Example2_1(c,tdata) f=c(1)*(exp(-c(2)*tdata)-exp(-c(3)*tdata)); 保存后,在命令窗口中输入: clear tdata=[0.25 0.5 0.75 1 1.5 2 2.5 3 3.5 4 4.5 5 6 7 8 9 10 11 12 13 14 15 16]; ydata=[30 68 75 82 82 77 68 68 58 51 50 41 38 35 28 25 8 15 12 10 7 7 4]; c0=[1 1 1];

matlab多元非线性回归教程

matlab 回归(多元拟合)教程 前言 1、学三条命令 polyfit(x,y,n)---拟合成一元幂函数(一元多次) regress(y,x)----可以多元, nlinfit(x,y,’fun ’,beta0) (可用于任何类型的函数,任意多元函数,应用范围最主,最万能的) 2、同一个问题,这三条命令都可以使用,但结果肯定是不同的,因为拟合的近似结果,没有唯一的标准的答案。相当于咨询多个专家。 3、回归的操作步骤: 根据图形(实际点),选配一条恰当的函数形式(类型)---需要数学理论与基础和经验。(并写出该函数表达式的一般形式,含待定系数)------选用某条回归命令求出所有的待定系数。所以可以说,回归就是求待定系数的过程(需确定函数的形式) 一、回归命令 一元多次拟合polyfit(x,y,n);一元回归polyfit;多元回归regress---nlinfit(非线性) 二、多元回归分析 对于多元线性回归模型(其实可以是非线性,它通用性极高): e x x y p p ++ ++ = βββ 1 10 设变量12,,,p x x x y 的n 组观测值为12(,, ,)1,2, ,i i ip i x x x y i n = 记 ??????? ??=np n n p p x x x x x x x x x x 2 1 22221 1121111 1,?? ?? ? ?? ??=n y y y y 21,则?????? ? ??=p ββββ 10 的估计值为排列方式与线性代数中的线性方程组相同(),拟合成多元函数---regress 使用格式:左边用b=[b, bint, r, rint, stats]右边用=regress(y, x)或regress(y, x, alpha) ---命令中是先y 后x, ---须构造好矩阵x(x 中的每列与目标函数的一项对应) ---并且x 要在最前面额外添加全1列/对应于常数项

matlab非线性曲线拟合

m atlab非线性曲线拟合 最近在用matlab做非线性曲线拟合,发现matlab功能确实很强大,总结其方法有如下几种: 一、Matlab非线性拟合工具箱 单一变量的曲线逼近 Matlab有一个功能强大的曲线拟合工具箱cftool ,使用方便,能实现多种类型的线性、非线性曲线拟合。假设我们要拟合的函数形式是y=a+(b-a)*c^2*(c^2-x^2)/((c^2-x^2)^2+(2*d*x)^2);其中 a,b,c,d是待定系数。 在命令行输入数据: x=8:0.01:12.4; y=real(epsilon); 2、启动曲线拟合工具箱 》cftool 3、进入曲线拟合工具箱界面“Curve Fitting tool” (1)点击“Data”按钮,弹出“Data”窗口; (2)利用X data和Y data的下拉菜单读入数据x,y,可修改数据集名“Data set name”,然后点击“Create data set”按钮,退出“Data”窗口,返回工具箱界面,这时会自动画出数据集的曲线图; (3)点击“Fitting”按钮,弹出“Fitting”窗口; (4)点击“New fit”按钮,可修改拟合项目名称“Fit nam e”,通过“Data set”下拉菜单选择数据集,然后通过下拉菜单“Type of fit”选择拟合曲线的类型,工具箱提供的拟合类型有: Custom Equations:用户自定义的函数类型 Exponential:指数逼近,有2种类型, a*exp(b*x) 、a*exp(b*x) + c*exp(d*x) Fourier:傅立叶逼近,有7种类型,基础型是 a0 + a1*cos(x*w) + b1*sin(x*w) Gaussian:高斯逼近,有8种类型,基础型是a1*exp(-((x-b1)/c1)^2) Interpolant:插值逼近,有4种类型,linear、nearest neighbor、cubic spline、shape-preserving Polynomial:多形式逼近,有9种类型,linear ~、quadratic ~、cubic ~、4-9th degree ~ Power:幂逼近,有2种类型,a*x^b 、a*x^b + c Rational:有理数逼近,分子、分母共有的类型是linear ~、quadratic ~、cubic ~、4-5th degree ~;此外,分子还包括constant型 Smoothing Spline:平滑逼近 Sum of Sin Functions:正弦曲线逼近,有8种类型,基础型是 a1*sin(b1*x + c1) Weibull:只有一种,a*b*x^(b-1)*exp(-a*x^b) 选择好所需的拟合曲线类型及其子类型,并进行相关设置: ——如果是非自定义的类型,根据实际需要点击“Fit options”按钮,设置拟合算法、修改待估计参数的上下限等参数; ——如果选Custom Equations,点击“New”按钮,弹出自定义函数等式窗口,有“Linear Equations线性等式”和“General Equations构造等式”两种标签。 在本例中选Custom Equations,点击“New”按钮,选择“General Equations”标签,输入函数类型 y=a+(b-a)*c^2*(c^2-x^2)/((c^2-x^2)^2+(2*d*x)^2),设置参数a、b、c、d的上下限,然后点击OK。 5)类型设置完成后,点击“Apply”按钮,就可以在Results框中得到拟合结果,如下例: General model: f(x) = a+(b-a)*c^2*(c^2-x^2)/((c^2-x^2)^2+(2*d*x)^2) Coefficients (with 95% confidence bounds): a = 3.155 (3.129, 3.181)

曲线拟合的线性最小二乘法及其MATLAB程序

3.1 曲线拟合的线性最小二乘法及其MATLAB 程序 例3.1.1 给出一组数据点),(i i y x 列入表3-1中,试用线性最小二乘法求拟合曲线,并估计其误差,作出拟合曲线. 表3-1 例3.1.1的一组数据),(y x 解 (1)在MATLAB 工作窗口输入程序 >> x=[-2.5 -1.7 -1.1 -0.8 0 0.1 1.5 2.7 3.6]; y=[-192.9 -85.50 -36.15 -26.52 -9.10 -8.43 -13.12 6.50 68.04]; plot(x,y,'r*'), legend('实验数据(xi,yi)') xlabel('x'), ylabel('y'), title('例3.1.1的数据点(xi,yi)的散点图') 运行后屏幕显示数据的散点图(略). (3)编写下列MA TLAB 程序计算)(x f 在),(i i y x 处的函数值,即输入程序 >> syms a1 a2 a3 a4 x=[-2.5 -1.7 -1.1 -0.8 0 0.1 1.5 2.7 3.6]; fi=a1.*x.^3+ a2.*x.^2+ a3.*x+ a4 运行后屏幕显示关于a 1,a 2, a 3和a 4的线性方程组 fi =[ -125/8*a1+25/4*a2-5/2*a3+a4, -4913/1000*a1+289/100*a2-17/10*a3+a4, -1331/1000*a1+121/100*a2-11/10*a3+a4, -64/125*a1+16/25*a2-4/5*a3+a4, a4, 1/1000*a1+1/100*a2+1/10*a3+a4, 27/8*a1+9/4*a2+3/2*a3+a4, 19683/1000*a1+729/100*a2+27/10*a3+a4, 5832/125*a1+324/25*a2+18/5*a3+a4] 编写构造误差平方和的MATLAB 程序 >> y=[-192.9 -85.50 -36.15 -26.52 -9.10 -8.43 -13.12 6.50 68.04]; fi=[-125/8*a1+25/4*a2-5/2*a3+a4, -4913/1000*a1+289/100*a2-17/10*a3+a4, -1331/1000*a1+121/100*a2-11/10*a3+a4, -64/125*a1+16/25*a2-4/5*a3+a4, a4, 1/1000*a1+1/100*a2+1/10*a3+a4, 27/8*a1+9/4*a2+3/2*a3+a4, 19683/1000*a1+729/100*a2+27/10*a3+a4, 5832/125*a1+324/25*a2+18/5*a3+a4]; fy=fi-y; fy2=fy.^2; J=sum(fy.^2) 运行后屏幕显示误差平方和如下 J= (-125/8*a1+25/4*a2-5/2*a3+a4+1929/10)^2+(-4913/1000*a1+2 89/100*a2-17/10*a3+a4+171/2)^2+(-1331/1000*a1+121/100*a2-11/10*a3+a4+723/20)^2+(-64/125*a1+16/25*a2-4/5*a3+a4+663/25)^2+(a4+91/10)^2+(1/1000*a1+1/100*a2+1/10*a3+a4+843/100)^2+(27/8*a1+9/4*a 2+3/2*a3+a4+328/25)^2+(19683/1000*a1+729/100*a2+27/10*a3+a4-13/ 2)^2+(5832/125*a1+324/25*a2+18/5*a3+a4-1701/25)^2 为求4321,,,a a a a 使J 达到最小,只需利用极值的必要条件0=??k a J )4,3,2,1(=k ,

2,3,4次曲线拟合matlab程序

2,3,4次曲线拟合matlab程序 【程序代码】 clf reset H=axes('unit','normalized','position',[0,0,1.5,1],'visible','off'); set(gcf,'currentaxes',H); str='\fontname{微软雅黑}2,3,4次曲线拟合程序'; text(0.17,0.9,str,'fontsize',15);%这是设置字体位置的 h_fig=get(H,'parent'); set(h_fig,'unit','normalized','position',[0.1,0.2,0.8,0.5]);%这是设置出现窗口的大小的 h_axes=axes('parent',h_fig,'unit','normalized','position',[0.1,0.15,0.55,0.7],'xlim',[015],'ylim',[0 1.8],'fontsize',8); h_text=uicontrol(h_fig,'style','text','unit','normalized','position',[0.69,0.90,0.24,0.03],'horizontal','left','s tring',{'左区间'}); h_text1=uicontrol(h_fig,'style','text','unit','normalized','position',[0.69,0.75,0.24,0.03],'horizontal','left',' string',{'右区间'}); h_text2=uicontrol(h_fig,'style','text','unit','normalized','position',[0.69,0.62,0.24,0.03],'horizontal','left',' string',{'步长'}); h_text3=uicontrol(h_fig,'style','text','unit','normalized','position',[0.69,0.48,0.24,0.03],'horizontal','left',' string',{'拟合矩阵'}); h_edit=uicontrol(h_fig,'style','edit','unit','normalized','position',[0.69,0.82,0.24,0.08], 'horizontal','left','callback',['a=str2num(get(gcbo,''string''));','t=a:n:b;','x=x;','p2=polyfit(t,x,2);','f2=poly val(p2,t);','p3=polyfit(t,x,3);','f3=polyval(p3,t);','p4=polyfit(t,x,4);','f4=polyval(p4,t);','plot(t,x,t,f2,t,f3,t, f4)']); h_edit1=uicontrol(h_fig,'style','edit','unit','normalized','position',[0.69,0.67,0.24,0.08], 'horizontal','left','callback',['b=str2num(get(gcbo,''string''));','t=a:n:b;','x=x;','p2=polyfit(t,x,2);','f2=poly val(p2,t);','p3=polyfit(t,x,3);','f3=polyval(p3,t);','p4=polyfit(t,x,4);','f4=polyval(p4,t);','plot(t,x,t,f2,t,f3,t, f4)']); h_edit2=uicontrol(h_fig,'style','edit','unit','normalized','position',[0.69,0.54,0.24,0.08], 'horizontal','left','callback',['n=str2num(get(gcbo,''string''));','t=a:n:b;','x=x;','p2=polyfit(t,x,2);','f2=poly val(p2,t);','p3=polyfit(t,x,3);','f3=polyval(p3,t);','p4=polyfit(t,x,4);','f4=polyval(p4,t);','plot(t,x,t,f2,t,f3,t, f4)']); h_edit3=uicontrol(h_fig,'style','edit','unit','normalized','position',[0.69,0.38,0.24,0.1], 'horizontal','left','callback',['x=str2num(get(gcbo,''string''));','t=a:n:b;','x=x;','p2=polyfit(t,x,2);','f2=poly val(p2,t);','p3=polyfit(t,x,3);','f3=polyval(p3,t);','p4=polyfit(t,x,4);','f4=polyval(p4,t);','plot(t,x,t,f2,t,f3,t, f4)']); h_push1=uicontrol(h_fig,'style','pushbutton','unit','normalized','position',[0.69,0.24,0.12,0.08],'string',' grid on','callback','grid on'); h_push2=uicontrol(h_fig,'style','pushbutton','unit','normalized','position',[0.69,0.15,0.12,0.08],'string',' grid off','callback','grid off'); h_push3=uicontrol(h_fig,'style','pushbutton','unit','normalized','position',[0.81,0.15,0.12,0.08],'string','退出','callback','exit'); h_push4=uicontrol(h_fig,'style','pushbutton','unit','normalized','position',[0.81,0.24,0.12,0.08],'string','关闭','callback','close(gcbf)'); 【操作界面】

基于MATLAB的多元非线性回归模型

第29卷第2期2009年3月 云南师范大学学报 JournalofYunnanNormalUniversity V01.29No.2 Mar.2009基于MATLAB的多元非线性回归模型‘ 董大校 (临沧师范高等专科学校,云南临沧6770000) 摘要:MATLAB是源于矩阵运算的一种高度集成的计算机语言。它提供了强大的科学运算、灵活的 程序设计流程、高质量的图形可视化与界面设计、便捷的与其他程序和语言接口的功能。文章充分利用 MATLAB统计工具箱的优势,通过程序的实现,对多元非线性回归模型的未知参数的估计方法以及对估 计后的模型预报做出研究,并以实例验证了该方法的有效性。 关键词:MATLAB;多元非线性回归;td,--乘法;统计工具箱 中图分类号:TP301文献标识码:A文章编号:1007—9793(2009)02—0045—04 l预备知识 非线性回归最小二乘法拟合的基本原理…。 对给定数据(菇i,Y;)(i=0,l,…,rrt),在取定的函数类西中,求p(x)∈痧,使误差t=p(x)一Y。(i=0,1,…,m)的平方和最小,即 ∑#=∑[p(戈i)一,,i]2 最小,从几何意义上讲,就是寻求与给定点(菇i,Y;)(i=0,1,…,rn)的距离平方和为最小的曲线Y=p(菇)(图1)。函数p(x)称为拟合函数或最小二乘解,求拟合函数p(x)的方法称为曲线拟合的最小二乘法。 2MATLAB非线性曲线拟合命令介绍 2.1nHnfit函数旧1 用nlinfit函数进行非线性最小二乘数据拟合。该函数使用高斯一牛顿算法,调用格式如下: Qbeta=nlinfit(X,Y,fun,beta0)用最小二乘法估计非线性函数系数。Y为响应值(因变量)矢量。一般地,为自变量值组成的设计矩阵,每一行对应与Y中的一发个值。但是,x可以是fun参数能接受的任何数组。fun参数为一函数,该函数具有下面的形式 yhat=myfun(beta。X) 其中beta为系数矢量,x为设计矩阵。fun为参数返回一个拟合Y值的yhat矢量。betaO为包含系数初始值的矢量。 ●[beta,r,J]=nlinfit(X,Y,fun,beta0)返回拟合系数(beta)、残差(r)、和雅可比矩阵J,这些参数可以用于nlintool函数,生成预测值的误差估计;或用于nlparci函数生成系数的误差估计。 2.2nlintool函数 使用nlintool函数可以对数据进行非线性方程拟合并交互图形显示,其调用格式如下: ?收稿日期:2008—10-23 作者简介:董大校(1965一),男,云南省临沧市人,副教授,主要从事数学教学科研工作.

matlab非线性拟合

如何拟合曲线 表达式必须自己估计。有很多表达式都能拟合出类似曲线。matlab里做曲线拟合的主要有(我经常用的)有这两个:polyfit和lsqcurvefit。前者专门对高次多项式拟合,后者则适用于绝大多数非线性拟合。根据描点判断可以用多项式拟合,我下面以二次多项式举例: clear x=[ 0 28 64 103 123 144 217 291 429 504 553 657 711 783 838]'; y=[ 31.5300 30.4300 29.3800 28.8000 28.1300 27.5900 25.5300 24.3000 22.8300 21.5700 21.8600 29.4900 34.5200 41.7600 44.6000]; %用polyfit拟合 p=polyfit(x,y,2); %用2次多项式 figure(1); title('拟合1') hold on plot(x,y,'+',x,polyval(p,x)); legend('原始值','拟合值'); %用lsqcurvefit拟合 f=@(b,x) b(1)+b(2).*x+b(3).*x.^2; %构造要拟合的函数 b=lsqcurvefit(f,[1,1,1],x,y); %进行拟合 figure(2) title('拟合2'); hold on plot(x,y,'+',x,f(b,x)); legend('原始数据','拟合数据') 如何计算残差! 首先确定你把拟合曲线图画出来了,然后在figure 1上边的选项中按Tools----Basic Fitting-----cubic----Show equations----plot residuals-----"然后点向右的箭头"-----”再从右边选项框里选Save to workspace“ 这就行了

matlab 非线性拟合函数lsqcurvefit

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矩阵。 例子:%美国人口logistic方程回归 y=[3929 5308 7240 9638 12866 17069 23192 31443 38558 50156 62948 7599 5 91972 105711 ... 122775 131669 150697 179323 203185 226500]; x=1790:10:1980; func = @(beta,x) beta(1)./(1+(beta(1)/y(1)-1)*exp(-beta(2)*(x-1790)) ); beta0 = [286660 0.0285 ]; [b r]= lsqcurvefit(func,beta0,x,y); plot(x,y,'r*') hold on x2=1790:1980;

用Matlab进行最小二乘法线性拟合求传感器非线性误差灵敏度

%后面的为注释,红色部分代码需要根据实际情况更改 %最小二乘法线性拟合y=ax+b x=[0.5,1,1.5,2,2.5,3,3.5,4,4.5,5];%自变量 y=[191,321,442,565,686,819,930,1032,1153,1252];%因变量 xmean=mean(x);ymean=mean(y); sumx2=(x-xmean)*(x-xmean)'; sumxy=(y-ymean)*(x-xmean)'; a=sumxy/sumx2;%解出直线斜率a(即传感器灵敏度) b=ymean-a*xmean;%解出直线截距b z=((a*(x(1,10))+b-(y(1,10)))/(y(1,10)));%“10”是自变量的个数,z为非线性误差(即线性度) a b z %作图,先把原始数据点用蓝色"十"字描出来 figure plot(x,y,'+'); hold on % 用红色绘制拟合出的直线 px=linspace(0,6,50);%(linspace语法(从横坐标负轴起点0画到横坐标正轴终点6,50等分精度)) py=a*px+b; plot(px,py,'r'); 运行结果: a =236.9818 b =87.4000 另一种简单一点的方法:

%最小二乘法线性拟合y=ax+b x=[0.5,1,1.5,2,2.5,3,3.5,4,4.5,5];%自变量 y=[191,321,442,565,686,819,930,1032,1153,1252];%因变量p=polyfit(x,y,1); p 运行结果: p = 236.9818 87.4000

matlab曲线拟合 - 非常好非常全面的介绍M拟合的参考资料

Mathworks Tech-Note 1508 曲线拟合向导 1.介绍 2. Mathworks 产品的曲线拟合特色 a.曲线拟合工具箱(Curve Fitting Toolbox) b.Matlab 内建函数与其他的带有曲线拟合能力的附加产品(工具箱) c.线性曲线拟合 d.非线性曲线拟合 3.加权曲线拟合方法 a.曲线拟合工具箱 b.统计工具箱 c.优化工具箱 4.利用曲线拟合工具箱提高曲线拟合结果 5.其他的相关资料 第1节:简介 MA TLAB即有内建的解决很多通常遇到的曲线拟合问题的能力,又具有附加这方面的产品。本技术手册描述了几种拟合给定数据集的曲线的方法,另外,本手册还解释了加权曲线拟合、针对复数集的曲线拟合以及其他一些相关问题的拟合技巧。在介绍各种曲线拟合方法中,采用了典型例子的结合介绍。 第2节:MathWorks产品的曲线拟合特色 MATLAB有可以用于曲线拟合的内建函数。MathWorks公式也提供了很多工具箱可以用于曲线拟合。这些方法可以用来做线性或者非线性曲线拟合。MATLAB也有一个开放的工具箱――曲线拟合工具箱(Curve Fitting Toolbox),她可以用于参数拟合,也可以用于非参数拟合。本节将介绍曲线拟合工具箱与其他工具箱、以及各种MA TLAB可以用于曲线拟合的内建函数的详细特征。 a.曲线拟合工具箱 曲线拟合工具箱是专门为数据集合进行曲线拟合而设计的。这个工具箱集成了用MA TLAB建立的图形用户界面(GUIs)和M文件函数。

?利用工具箱的库方程(例如线性,二次,高阶多项式等)或者是用户自定义方程(局限于用户的想象力)可以进行参数拟合。当你想找出回归系数以及他们背后的物理意义的时候就可以采用参数拟合。 ?通过采用平滑样条或者其他各种插值方法,你就可以进行非参数拟合。当回归系数不具有物理意义并且不在意他们的时候,就采用非参数拟合方法。 曲线拟合工具箱提供了如下功能: ?数据回归,譬如截面(?sectioning)与平滑; ?标准线性最小二乘拟合,非线性最小二乘拟合,加权最小二乘拟合,约束二乘(constrained least squares)拟合以及稳健(robust)拟合; ?根据诸如R2以及误差平方和(SSE)确定的拟合性能的统计特征。 请查阅曲线拟合工具箱提供的demos。 b. MATLAB内建函数与具有曲线拟合能力的其他工具箱 除了曲线拟合工具箱,MATALB与其他工具箱也提供了些可以用于解决线性和非线性曲线拟合的功能。本节列举并解释了其中几个。 c.利用MATLAB内建函数进行线性曲线拟合 函数描述 polyfit 用多项式进行数据拟合。polyfit(X,Y,N)对数据X,Y拟合N阶多项式系数,P(X(I))~=Y(I),在最小二乘意义上。 \ 反斜线或者矩阵阵左除。如果A是一个方阵,A\B 基本上与 inv(A)*B一致的,是采用的不同计算方式而已。 polyval 在给定点计算多项式的值 corrcoef 计算两个向量的相关系数。它可以与polyfit和polyval函数一起用来在实际数据和拟合输出之间计算R2相关系数 下面给出一个利用corref计算R2值的例子: load census [p,s]=polyfit(cdate,pop,2); Output=polyval(p,cdate); Corrolation=corroef(cate,Output); cdate 与它自身很好的相关,同样的Output也与它自身很好相关。反对角线上元素是

相关文档
相关文档 最新文档