matlab 拟合函数,MATLAB的拟合函数和工具

matlab 拟合函数,MATLAB的拟合函数和工具一元函数拟合可用cftool工具箱,对于一元多项式拟合也可用polyfit()多元线性函数y=ax的拟合函数regress()语法是:[a,aint]=regress(y,x,alpha)其中1-alpha是置信度,默认alpha=0.05.即置信度为�,aint是a的置信区间多元非线性函数最小二乘拟合nlinfit()(在MATLAB的统计工具箱中);lsqcurvefit()(在M…

一元函数拟合可用cftool工具箱, 对于一元多项式拟合也可用polyfit()

多元线性函数y=ax的拟合函数regress()

语法是:

[a, aint]=regress(y,x,alpha)

其中1-alpha是置信度, 默认alpha=0.05. 即置信度为�, aint是a的置信区间

多元非线性函数最小二乘拟合nlinfit()(在MATLAB的统计工具箱中); lsqcurvefit()(在MATLAB的优化工具箱中)

函数nlinfit()的语法是:

[a,r,J]=nlinfit(X,Y,Fun,a0,options)

其中Fun是函数y=f(a,x)的M-函数, 用@函数文件名表示, 或由inline()函数表示,X是自变量的实测数据阵,第j列是第j个自变量数据, Y是因变量的实测数据列向量,其第i列的值是函数y=Fun(a,x)中x取X的第i行时的测量值. a0是参数a的估计初值列向量,输出是在最小二乘意义下的最佳参数a列向量,残差r,残差r对a的Jacobi向量构成的矩阵J,options是选项, 可以在运行nlinfit前先用statset来修改默认的参数值

常用的参数为

‘MaxIter’   – 最大叠代次数,默认值为100.

‘TolFun’    – 残数平方和允许值. 默认值 1e-8.

‘TolX’      – 参数a的允许误差. 默认值 1e-8.

函数nlinfit 忽略NaN

设置法如

options=statset(‘MaxIter’, 200, ‘TolFun’, 1e-10)

再运行 c=nlparci(a,r,J)就得到置信度为95%的置信区间c

再用n=numel(c);

errorbar(1:n,a,c(:,1)-a,c(:,2)-a); 绘制出参数估计及其置信区间.

也可以用nlintool图形交互式窗口来拟合,格式是

nlintool(X,Y, Fun, a0, a, ‘xname’,’yname’);

函数lsqcurvefit()的语法是

[a, rnorm, r, exitflag]=lsqcurvefit(Fun, a0, X,Y, lb,ub,options)

其中lb,up是a的预估下界和上界向量,rnorm为误差平方和, exitflag是运行情况,

1  收敛

2  a的改变比规定的允许值小.

3  残数的改变比规定的允许值小.

4  搜索方向减少的量比规定的允许值小.

0  超过叠代次数.

-1  因函数Fun内而终止

-2  不符合界的规定.

-4  在当前线搜索方向不足以减少残数.

Options可以用optimset来修改默认的参数值, 参数名见statset的参数名(更多的参数可用help optimoptionst得到)例

options=optimset(‘MaxIter’, 200, ‘TolFun’, 1e-10)

一元函数拟合可用cftool工具箱, 对于一元多项式拟合也可用polyfit()

多元线性函数y=ax的拟合函数regress()

语法是:

[a, aint]=regress(y,x,alpha)

其中1-alpha是置信度, 默认alpha=0.05. 即置信度为�, aint是a的置信区间

多元非线性函数最小二乘拟合nlinfit()(在MATLAB的统计工具箱中); lsqcurvefit()(在MATLAB的优化工具箱中)

函数nlinfit()的语法是:

[a,r,J]=nlinfit(X,Y,Fun,a0,options)

其中Fun是函数y=f(a,x)的M-函数, 用@函数文件名表示, 或由inline()函数表示,X是自变量的实测数据阵,第j列是第j个自变量数据, Y是因变量的实测数据列向量,其第i列的值是函数y=Fun(a,x)中x取X的第i行时的测量值. a0是参数a的估计初值列向量,输出是在最小二乘意义下的最佳参数a列向量,残差r,残差r对a的Jacobi向量构成的矩阵J,options是选项, 可以在运行nlinfit前先用statset来修改默认的参数值

常用的参数为

‘MaxIter’   – 最大叠代次数,默认值为100.

‘TolFun’    – 残数平方和允许值. 默认值 1e-8.

‘TolX’      – 参数a的允许误差. 默认值 1e-8.

函数nlinfit 忽略NaN

设置法如

options=statset(‘MaxIter’, 200, ‘TolFun’, 1e-10)

再运行 c=nlparci(a,r,J)就得到置信度为95%的置信区间c

再用n=numel(c);

errorbar(1:n,a,c(:,1)-a,c(:,2)-a); 绘制出参数估计及其置信区间.

也可以用nlintool图形交互式窗口来拟合,格式是

nlintool(X,Y, Fun, a0, a, ‘xname’,’yname’);

函数lsqcurvefit()的语法是

[a, rnorm, r, exitflag]=lsqcurvefit(Fun, a0, X,Y, lb,ub,options)

其中lb,up是a的预估下界和上界向量,rnorm为误差平方和, exitflag是运行情况,

1  收敛

2  a的改变比规定的允许值小.

3  残数的改变比规定的允许值小.

4  搜索方向减少的量比规定的允许值小.

0  超过叠代次数.

-1  因函数Fun内而终止

-2  不符合界的规定.

-4  在当前线搜索方向不足以减少残数.

Options可以用optimset来修改默认的参数值, 参数名见statset的参数名(更多的参数可用help optimoptionst得到)例

options=optimset(‘MaxIter’, 200, ‘TolFun’, 1e-10)

matlab中nlinfit函数非线性拟合的使用方法如下:

例1

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

混凝土的抗压强度随养护时间的延长而增加,现将一批混凝土作成12个试块,记录了养护日期x(日)及抗压强度y(kg/cm2)的数据:

养护时间x 2 3 4 5 7 9 12 14 17 21 28 56

抗压强度y 35+r 42+r 47+r 53+r 59+r 65+r 68+r 73+r 76+r 82+r 86+r 99+r

建立非线性回归模型,对得到的模型和系数进行检验。

注明:此题中的+r代表加上一个[-0.5,0.5]之间的随机数

%模型为:y=a+k1*exp(m*x)+k2*exp(-m*x);

clc;clear;

x=[2 3 4 5 7 9 12 14 17 21 28 56];

r=rand(1,12)-0.5;

y1=[35 42 47 53 59 65 68 73 76 82 86 99];

y=y1+r

myfunc=inline(‘beta(1)+beta(2)*exp(beta(4)*x)+beta(3)*exp(-beta(4)*x)’,’beta’,’x’);

beta=nlinfit(x,y,myfunc,[0.5 0.5 0.5 0.5]);

a=beta(1),k1=beta(2),k2=beta(3),m=beta(4)

%test the model

xx=min(x):max(x);

yy=a+k1*exp(m*xx)+k2*exp(-m*xx);

plot(x,y,’o’,xx,yy,’r’)

结果:

a = 87.5244

k1 = 0.0269

k2 = -63.4591

m = 0.1083

You need to define your ‘model’ as a function (possibly in a seperate m-file). For example

>>beta = nlinfit(X,y,myfun,beta0)

where MYFUN is a MATLAB function such as:

function yhat = myfun(beta, X)

b1 = beta(1);

b2 = beta(2);

yhat = 1 ./ (1 + exp(b1 + b2*X));

MYFUN can also be an inline object:

fun = inline(‘1 ./ (1 + exp(b(1) + b(2*x))’, ‘b’, ‘x’)

nlinfit(x, y, fun, b0)

例3

y=(Asin(Bx)+C)*sin(Dx)+E

x=11.96,y=1.7;

x=12.22,y=7.3;

x=27.56,y=1.0;

x=27.82,y=8.0;

x=19.76,y=4.5;

求未知参数A,B,C,D,E

x=[11.96,12.22,19.76,27.56,27.82];

y=[1.7,7.3,4.5,1.0,8.0];

fun=inline(‘(a(1)*sin(a(2)*x)+a(3)).*sin(a(4)*x)+a(5)’,’a’,’x’);

a=nlinfit(x,y,fun,[0.05 0.05 0.05 0.05 0.05]);

yy=(a(1)*sin(a(2)*x)+a(3)).*sin(a(4)*x)+a(5);

plot(x,y,’*’,x,yy,’r’)

非线性优化-matlab函数库-optimset

创建或编辑一个最优化参数选项

句法规则

options = optimset(‘param1′,value1,’param2’,value2,…) %设置所有参数及其值,未设置的为默认值options = optimset                                                         %全部设置为默认

options = optimset(optimfun)                                        %设置与最优化函数有关的参数为默认

options = optimset(oldopts,’param1′,value1,…)             %复制一个已存在的选项,修改特定项

options = optimset(oldopts,newopts)                            %用另一个新选项合并目前选项

因素ParameterValueDescription

Display’off’ | ‘iter’ | ‘final’ | ‘notify”off’ 表示不显示输出; ‘iter’ 显示每次迭代的结果; ‘final’ 只显示最终结果; ‘notify’ 只在函数不收敛的时候显示结果.

MaxFunEvalspositive integer函数允许估值的最大值.

MaxIterpositive integer迭代次数的最大值.

TolFunpositive scalar函数迭代的终止误差.

TolXpositive scalar结束迭代的X值.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/34183.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注