4

您如何将 ln(x^2) + 3y 等 2d 曲线拟合到 mxn 数组?

更新

我的意思是我有 mxn 数组并希望用 2D 曲线拟合它。很抱歉造成混乱。

4

2 回答 2

4

您可以从使用 meshgrid 生成两个数组开始,它们对应于您的 mxn 数组的索引(为简单起见,我们将其称为 z)。例如:

[x,y] = meshgrid(1:size(z,2),1:size(z,1));

在命令窗口中跟踪 x 和 y 以查看它们的结构,这将是有意义的。

然后,您可以使用诸如 lsqnonlin(非线性最小二乘法)之类的函数将 2d 曲线拟合到矩阵 z。因此,如果您要拟合的曲线是“a log(x^2) + b y”,其中 a 和 b 是自由参数,那么您可以使用如下内容:

%Define a function which returns the residual between your matrix and your fitted curve
myfun = @(params) params(1)*log(x(:).^2) + params(2)*y(:) - z(:)
%Define initial guesses for parameters a, b
params0 = [1,3];
%Add lots of debugging info
opts = optimset('Display','Iter');
%Fit
fitparams = lsqnonlin(myfun,params0,[],[],opts);
于 2010-08-19T22:20:14.823 回答
2

我建议运行cftool. 它实际上非常适合巫师类型的小工具。

这是一个编程拟合示例(我喜欢 MATLAB 文档),以及可能相关的摘录:

s = fitoptions('Method','NonlinearLeastSquares',...
               'Lower',[0,0],...
               'Upper',[Inf,max(cdate)],...
               'Startpoint',[1 1]);
f = fittype('a*(x-b)^n','problem','n','options',s);

使用拟合选项和 n = 2 的值拟合数据:

[c2,gof2] = fit(cdate,pop,f,'problem',2)
于 2010-06-23T00:11:54.257 回答