急求!MATLAB 二元非线性拟合

来源:百度知道 编辑:UC知道 时间:2024/09/28 14:20:19
希望拟合一个二元非线性函数,函数形式为y=1-(a/(a+x))^b,函数形式很简单,但是就是不知道为什么拟合不出来
clc;clear;
x=[7 24 32 48 72];
y=[0.8 1.96 2.62 3.68 5.14];
myfunc=inline('1-(beta(1)/(beta(1)+x))^beta(3)','beta','x');
beta=nlinfit(x,y,myfunc,[1 1 1]);
a=beta(1),b=beta(2)
??? Error using ==> inlineeval
Error in inline expression ==> 1-(beta(1)/(beta(1)+x))^beta(3)
??? Error using ==> ^
Matrix must be square.

Error in ==> C:\MATLAB6p5\toolbox\matlab\funfun\@inline\feval.m
On line 34 ==> INLINE_OUT_ = inlineeval(INLINE_INPUTS_, INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr);

Error in ==> C:\MATLAB6p5\toolbox\stats\nlinfit.m
On line 57 ==> if any(size(feval(model,beta0,X)) ~= size(y))
显示错误如上,麻烦高手解答一下
楼下的两位说的都不对,用最小二乘解出来的结果不在范围内,相关系数也很低啊 。根据资料显示,这个数值a应该等于0.03左右,b在10左右

牵着一头熊一只猴一条狗
天真无邪、很少忧愁,
罗池 译
变成褐色
而雨季却有不能说的秘密
漆黑的夜色,酝酿的黎后的骄阳!哈哈

恩 这个使用nlinfit函数求解该问题不太好使 建议使用lsqcurvefit

clc;clear;
x=[7 24 32 48 72];
y=[0.8 1.96 2.62 3.68 5.14];
myfunc=inline('1-(beta(1)./(beta(1)+x)).^beta(3)','beta','x');
beta=lsqcurvefit(myfunc,[1 1 1],x,y);
a=beta(1),b=beta(2)

Optimization terminated: first-order optimality less than OPTIONS.TolFun,
and no negative/zero curvature detected in trust region model.

a =

643.1115

b =

1

myfunc=inline('1-(beta(1)/(beta(1)+x))^beta(3)','beta','x');
此句改为:
myfunc=inline('1-(beta(1)./(beta(1).+x))^beta(3)','beta','x');