【发布时间】:2013-12-23 03:47:12
【问题描述】:
我有一组测量值,并开始进行线性近似(如this plot)。参数V_{max}和K_{m}在Matlab中的线性最小二乘估计:
data=[2.0000 0.0615
2.0000 0.0527
0.6670 0.0334
0.6670 0.0334
0.4000 0.0138
0.4000 0.0258
0.2860 0.0129
0.2860 0.0183
0.2220 0.0083
0.2200 0.0169
0.2000 0.0129
0.2000 0.0087 ];
x = 1./data(:,1);
y = 1./data(:,2);
J = [x,ones(length(x),1)];
k = J\y;
vmax = 1/k(2);
km = k(1)*vmax;
lse = (vmax.*data(:,1))./(km+data(:,1));
plot(data(:,1),data(:,2),'o','color','red','linewidth',1)
line(data(:,1),lse,'linewidth',2)
这会产生看起来不错的合身。接下来,我想做同样的事情但使用非线性最小二乘法。但是,拟合总是看起来不对,这是该尝试的代码:
options = optimset('MaxIter',10000,'MaxFunEvals',50000,'FunValCheck',...
'on','Algorithm',{'levenberg-marquardt',.00001});
p=lsqnonlin(@myfun,[0.1424,2.5444]);
lse = (p(1).*data(:,1))./(p(2)+data(:,1));
plot(data(:,1),data(:,2),'o','color','red','linewidth',1)
line(data(:,1),lse,'linewidth',2)
在 M 文件中需要此功能:
function F = myfun(x)
F = data(:,2)-(x(1).*data(:,1))./x(2)+data(:,1);
如果您运行代码,您将看到我的问题。但希望与我不同,你能看到我做错了什么。
【问题讨论】:
-
myfun如何访问data? -
从第一个复制
-
你的意思是
myfun是嵌套的? -
你看起来适合我的朋友。数据在上面。
标签: matlab optimization least-squares nonlinear-optimization