文档库 最新最全的文档下载
当前位置:文档库 › matlab非线性参数拟合估计_很好的参考材料

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

matlab非线性参数拟合估计_很好的参考材料
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)

2.指数模型也适应

假设要拟合:y = a+b*exp(x)+c*exp(x.?2)

p=polyfit(x,log(y),2)

fminsearch函数

fminsearch是优化工具箱的极小化函数。LS问题的基本思想就是残差的平方和(一种范数,由此,LS产生了许多应用)最小,因此可以利用fminsearch函数进行曲线拟合。

假设要拟合:y = a+b*exp(x)+c*exp(x.?2)

首先建立函数,可以通过m文件或函数句柄建立:

x=[......]';

y=[......]';

f=@(p,x) p(1)+p(2)*exp(x)+p(3)*exp(x.?2) %注意向量

化:p(1)=a;p(2)=b;p(3)=c;

%可以根据需要选择是否优化参数

%opt=options()

p0=ones(3,1);%初值

para=fminsearch(@(p) (y-f(p,x)).^2,p0) %可以输出Hessian矩阵

res=y-f(para,x)%拟合残差

曲线拟合工具箱

提供了很多拟合函数,对大样本场合比较有效!

非线性拟合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.多项式型的一个例子

1900-2000年的总人口情况的曲线拟合

clear all;close all;

%cftool提供了可视化的曲线拟合!

t=[1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000]';

y=[75.995 91.972 105.711 123.203 131.669 150.697 179.323 203.212 226.505 249.633 281.4220]';

%t太大,以t的幂作为基函数会导致设计矩阵尺度太差,列变量几乎线性相依。变换为[-1 1]上

s=(t-1950)/50;

%plot(s,y,'ro');

%回归线:y=a+bx

mx=mean(s);my=mean(y);

sx=std(s);sy=std(y);

r=corr(s,y);

b=r*sy/sx;

a=my-b*mx;

rline=a+b.*s;

figure;

subplot(3,2,[1 2])

plot(s,y,'ro',s,rline,'k');%

title('多项式拟合');

set(gca,'XTick',s,'XTickLabel',sprintf('%d|',t));

%hold on;

n=4;

PreYear=[2010 2015 2020];%预测年份

tPreYear=(PreYear-1950)/50;

Y=zeros(length(t),n);

res=zeros(size(Y));

delta=zeros(size(Y));

PrePo=zeros(length(PreYear),n);

Predelta=zeros(size(PrePo));

for i=1:n

[p S(i)]=polyfit(s,y,i);

[Y(:,i) delta(:,i)]=polyval(p,s,S(i));%拟合的Y

[PrePo(:,i) Predelta(:,i)]=polyval(p,tPreYear,S(i));%预测

res(:,i)=y-Y(:,i);%残差

end

% plot(s,Y);%2009a自动添加不同颜色

% legend('data','regression line','1st poly','2nd poly','3rd poly','4th poly',2)

% plot(tPreYear,PrePo,'>');

% hold off

% plot(Y,res,'o');%残差图

r=corr(s,Y).^2 %R^2

%拟合误差估计CI

YearAdd=[t;PreYear'];

tYearAdd=[s;tPreYear'];

CFtit={'一阶拟合','二阶拟合','三阶拟合','四阶拟合'};

for col=1:n

subplot(3,2,col+2);

plot(s,y,'ro',s,Y(:,col),'g-');%原始数据和拟合数据

legend('Original','Fitted',2);

hold on;

plot(s,Y(:,col)+2*delta(:,col),'r:');%95% CI

plot(s,Y(:,col)-2*delta(:,col),'r:');

plot(tPreYear,PrePo(:,col),'>');%预测值

plot(tPreYear,PrePo(:,col)+2*Predelta(:,col));%预测95% CI

plot(tPreYear,PrePo(:,col)-2*Predelta(:,col));

axis([-1.2 1.8 0 400]);

set(gca,'XTick',tYearAdd,'XTickLabel',sprintf('%d|',YearAdd)); title(CFtit{col});

hold off;

end

figure;%残差图

for col=1:n

subplot(2,2,col);

plot(Y(:,i),res(:,i),'o');

end

一个非线性的应用例子(多元情况)

要拟合y=a*x1^n1+b*x2^n2+c*x3^n3

%注:只是作为应用,模型不一定正确!!!

%x2=x3!!!

y=[1080.94 1083.03 1162.80 1155.61 1092.82 1099.26 1161.06 1258.05 1299.03 1298.30 1440.22 1641.30 1672.21 1612.73 1658.64 1752.42 1837.99 2099.29 2675.47 2786.33 2881.07]';

x1=[1 1.05 1.1 1.15 1.2 1.25 1.3 1.35 1.4 1.45 1.5 1.55 1.6 1.65 1.7 1.75 1.8 1.85 1.9 1.95 2]';

x2=[1 1.025 1.05 1.075 1.1 1.125 1.15 1.175 1.2 1.225 1.250 1.275 1.3 1.325 1.350 1.375 1.4 1.425 1.45 1.475 1.5]';

x3=[1 1.025 1.05 1.075 1.1 1.125 1.15 1.175 1.2 1.225 1.250 1.275 1.3 1.325 1.350 1.375 1.4 1.425 1.45 1.475 1.5]';

x=[x1 x2 x3];

f=@(p,x) p(1)*x(:,1).^p(2)+p(3)*x(:,2).^p(4)+p(5)*x(:,3).^p(6);

p0=ones(6,1);

p=fminsearch(@(p)sum(y-f(p,x)).^2,p0)

res=y-f(p,x);

res2=res.^2 %失败的模型

Matlab 自定义函数

自定义函数的途径:

M文件函数(M file function)

在线函数(Inline Function)

匿名函数(Anonymous Function)

1.M文件函数

范例

function c=myadd(a,b)

%这里可以写函数的使用说明,前面以%开头

%在工作区中,help myadd将显示此处的说明

c=a+b;

%end %非必须的

第一行function告诉Matlab这是一个函数,a,b是输入,c是输出,myadd是函数名。以m文件定义的函数必须保存为函数名的形式,上例中,函数应保存为myadd.m。要使用myadd函数,该函数必须在Matlab的搜索路径中。

调用方式:

在Matlab命令符后输入

a=1;b=2;

c=myadd(a,b)

2.在线函数(Inline Function)

通常作为参数传递给另外一个函数。比如fminsearch,lsqcurvefit等函数需要以函数作为参数。

在线函数从字符串表达式创建函数,例如:

f=inline('x.^2','x');

创建了函数f(x)=x^2。要计算f(3),在工作区输入f(3)即可。f([2 3 4])计算在x=2 3 4时的值

f=inline('x+y','x','y')

创建了二元函数f(x,y)=x+y,工作区输入f(2,3)计算2+3,等同于f(f,2,3)。

3.匿名函数(Anonymous Function)

匿名函数使用函数句柄来表示匿名函数,定义形式为

函数句柄=@(变量名) 函数表达式

例如:

f=@(x) x.^2

定义了函数f(x)=x^2,f(2)计算在x=2处的值。

匿名函数可以调用Matlab函数,也可以使用工作区中存在的变量,例如

a=2;

f=@(x) x.^2+a

f(2) %计算时引用了变量a

a=0;

f(2) %仍然引用的是a=2

匿名函数也可以由Matlab的内置函数或M文件函数创建,例如

f=@sin %f(x)=sin(x)

f(pi/2) %sin(pi/2)

functions(f) %查看函数信息

利用单元数组可以创建多个函数的句柄,例如

f={@sin @cos}

f{1}(pi/2) %计算sin(pi/2)

f{2}(pi) %计算cos(pi)

函数句柄的另一个重要特征是可以用来表示子函数、私有函数和嵌套函数。

Matlab 7以后,建议以匿名函数取代在线函数!!!

在创建匿名函数时,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多变量二次多项式拟合

一、对Y 总做线性多项式拟合:0112288......Y b b X b X b X =+++ 设置显著性水平为0.05,拟合得到: B=[ 0b ,1b ,………., 8b ]= [-60.0349 12.5809 2.2002 -12.9863 20.4145 0.0266 5.1430 17.2416 151.6779] 对应的置信区间为: -161.4058 41.3359 -7.5870 32.7488 -25.5706 29.9709 -33.5089 7.5362 -0.3096 41.1386 -2.5989 2.6520 0.9830 9.3030 -3.2810 37.7642 -64.0209 367.3767 r 2= 0.7454 (越接近于1,回归效果越显著),F= 2.5616, p= 0.1163,(p>0.05, 可知回归模型不成立)。 残差图如下:

从残差图可以看出,除第一个数据和最后一个数据的残差离零点均较远,说明这两个数据可视为异常点,去掉这两个数据之后再做拟合得到: B=[ 0b ,1b ,………., 8b ]= [-478.8 15.7 1.8 -85.3 43 2.8 24.7 135.3 1131.9] 对应的置信区间为: -1048.7 91.1 7.5 23.9 -8 11.6 -183.5 12.8 10.5 75.5 -1.1 6.7 -2 51.4 -25.8 296.4 -206.7 2470.4 r 2= 0.9690 (越接近于1,回归效果越显著),F= 19.5530, p= 0.0023,(p<0.05, 可知回归模型成立)。 残差图如下:

Matlab多变量回归分析报告材料教程

本次教程的主要内容包含: 一、多元线性回归 2# 多元线性回归:regress 二、多项式回归 3# 一元多项式:polyfit或者polytool 多元二项式:rstool或者rsmdemo 三、非线性回归 4# 非线性回归:nlinfit 四、逐步回归 5# 逐步回归:stepwise 一、多元线性回归 多元线性回归: 1、b=regress(Y, X ) 确定回归系数的点估计值

2、[b, bint,r,rint,stats]=regress(Y,X,alpha)求回归系数的点估计和区间估计、并检验回归模型 ①bint表示回归系数的区间估计. ②r表示残差 ③rint表示置信区间 ④stats表示用于检验回归模型的统计量,有三个数值:相关系数r2、F值、与F对应的概率p 说明:相关系数r2越接近1,说明回归方程越显著;时拒绝H0,F越大,说明回归方程越显著;与F对应的概率p<α时拒绝H0 ⑤alpha表示显著性水平(缺省时为0.05) 3、rcoplot(r,rint)画出残差及其置信区间 具体参见下面的实例演示 4、实例演示,函数使用说明 (1)输入数据 1.>>x=[143 145 146 147 149 150 153 154 155 156 157 158 159 160 162 164]'; 2.>>X=[ones(16,1) x]; 3.>>Y=[88 85 88 91 92 93 93 95 96 98 97 96 98 99 100 102]'; 复制代码 (2)回归分析及检验 1. >> [b,bint,r,rint,stats]=regress(Y,X) 2. 3. b = 4. 5. -1 6.0730 6.0.7194 7. 8. 9.bint =

matlab曲线拟合2010a演示

2010a版本曲线拟合工具箱 一、单一变量的曲线逼近 Matlab有一个功能强大的曲线拟合工具箱cftool ,使用方便,能实现多种类型的线性、非线性曲线拟合。下面结合我使用的Matlab R2007b 来简单介绍如何使用这个工具箱。 假设我们要拟合的函数形式是y=A*x*x + B*x, 且A>0,B>0。 1、在主命令输入数据: x=233.8:0.5:238.8; y=[235.148 235.218 235.287 235.357 235.383 235.419 235.456 235.49 235.503 235.508 235.536]; 2、启动曲线拟合工具箱 cftool(x,y) 3、进入曲线拟合工具箱界面“Curve Fitting tool” 如图 (1)利用X data和Y data的下拉菜单读入数据x,y,可在Fit name修改数据集名,这时会自动画出数据集的曲线图;

(2)在红色区域选择拟合曲线类型 工具箱提供的拟合类型有: ?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、cubicspline、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) 在results一栏看结果

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多变量拟合

首先申明本人是土木专业的,因为有需要要用到matlab中的拟合用途,今天好好学习了一些关于matlab多变量拟合的东西,从网上下载了一些程序,也运行了一下,就举一些实例,附上源程序吧,主要是两个自变量和三个自变量,一个因变量的拟合。让自己也更清楚,以后用起来也方便。 原理就是给出一个自变量和因变量的矩阵,然后给出一个自己认为的带有未知数的拟合方程,然后付一组初始值,根据matlab返回的初始值和误差在附一组初始值,知道最后的相关系数较大,也就是误差较小时,就能拟合的比较好,写出拟合后的方程了。 1.广义线性回归拟合和源码(两个自变量,一个因变量,非线性拟合) 【例】这里有这样一组数据,涉及三个变量:p,t 和z,要拟合出z = f(p,t) 的关系式(非线性的)。 z p 0.8 1 1.2 t 60 9.73875 20.75 36.5987 120 13.5725 29.6325 50.93875 180 18.97875 36.59875 80.13875 240 2075125 38.22125 90.925 300 22.055 44.58 104.7725 为了使得回归分析的结果更加直观,我调用regstats函数,编写了一个更为实用的函数:reglm,代码如下(代码中有调用方法和例子)。 首先写一个M文件: function stats = reglm(y,X,model,varnames) % 多重线性回归分析或广义线性回归分析 % % reglm(y,X),产生线性回归分析的方差分析表和参数估计结果,并以表格形式显示在屏幕上. 参 % 数X是自变量观测值矩阵,它是n行p列的矩阵. y是因变量观测值向量,它是n行1列的列向量. % % stats = reglm(y,X),还返回一个包括了回归分析的所有诊断统计量的结构体变量stats. % % stats = reglm(y,X,model),用可选的model参数来控制回归模型的类型. model 是一个字符串, % 其可用的字符串如下 % 'linear' 带有常数项的线性模型(默认情况) % 'interaction' 带有常数项、线性项和交叉项的模型 % 'quadratic' 带有常数项、线性项、交叉项和平方项的模型 % 'purequadratic' 带有常数项、线性项和平方项的模型 % % stats = reglm(y,X,model,varnames),用可选的varnames参数指定变量标签. varnames % 可以是字符矩阵或字符串元胞数组,它的每行的字符或每个元胞的字符串是一个变量的标签,它的行 % 数或元胞数应与X的列数相同. 默认情况下,用X1,X2,…作为变量标签.

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线性回归(拟合)-应用

Matlab 线性回归(拟合) 对于多元线性回归模型: e x x y p p ++++=βββ 110 设变量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 2122221112 11111,??????? ??=n y y y y 21, 则?????? ? ??=p ββββ 10 的估计值为 y x x x b ')'(?1-==β 在Matlab 中,用regress 函数进行多元线性回归分析,应用方法如下: 语法:b = regress(y, x) [b, bint, r, rint, stats] = regress(y, x) [b, bint, r, rint, stats] = regress(y, x, alpha) b = regress(y, x),得到的p+1维列向量b 即为(11.2)式给出的回归系数β的 估计值. [b, bint, r, rint, stats]=regress(y, x) 给出回归系数β的估计值b ,β的95%置 信区间((p+1)*2向量)bint ,残差r 以及每个残差的95%置信区间(2?n 向量)rint ;向量stats 给出回归的R2统计量和F 以及临界概率p 的值. 如果i β的置信区间(bint 的第i+1行)不包含0,则在显著水平为α时拒绝0i β=的假设,认为变量i x 是显著的. [b, bint, r, rint, stats]=regress(y, x, alpha) 给出了bint 和rint 的100(1-alpha)%的置信区间. 1.三次样条插值函数的MATLAB 程序 matlab 的spline x = 0:10; y = sin(x); %插值点 xx = 0:.25:10; %绘图点 yy = spline(x,y,xx);

曲线拟合的线性最小二乘法及其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 ,

数据回归分析和拟合的matlab实现

数据回归分析和拟合的Matlab实现 本次将教程的主要内容包含: 一、多元线性回归 2# 多元线性回归:regress 二、多项式回归 3# 一元多项式:polyfit或者polytool 多元二项式:rstool或者rsmdemo 三、非线性回归 4# 非线性回归:nlinfit 四、逐步回归 5# 逐步回归:stepwise 一、多元线性回归 多元线性回归: 1、b=regress(Y, X ) 确定回归系数的点估计值

2、[b, bint,r,rint,stats]=regress(Y,X,alpha) 求回归系数的点估计和区间估计、并检验回归模型 ①bint表示回归系数的区间估计. ②r表示残差 ③rint表示置信区间 ④stats表示用于检验回归模型的统计量,有三个数值:相关系数r2、F值、与F对应的概率p 说明:相关系数r2越接近1,说明回归方程越显著; 时拒绝H0,F越大,说明回归方程越显著;与F对应的概率p<α时拒绝H0 ⑤alpha表示显著性水平(缺省时为0.05) 3、rcoplot(r,rint) 画出残差及其置信区间具体参见下面的实例演示 4、实例演示,函数使用说明 (1)输入数据 复制内容到剪贴板 >>x=[143 145 146 147 149 150 153 154 155 156 157 158 159 160 162 164]'; >>X=[ones(16,1) x]; >>Y=[88 85 88 91 92 93 93 95 96 98 97 96 98 99 100 102]'; (2)回归分析及检验 复制内容到剪贴板 >> [b,bint,r,rint,stats]=regress(Y,X) b = -16.0730

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)'); 【操作界面】

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