您如何将 ln(x^2) + 3y 等 2d 曲线拟合到 mxn 数组?
更新
我的意思是我有 mxn 数组并希望用 2D 曲线拟合它。很抱歉造成混乱。
您如何将 ln(x^2) + 3y 等 2d 曲线拟合到 mxn 数组?
更新
我的意思是我有 mxn 数组并希望用 2D 曲线拟合它。很抱歉造成混乱。
您可以从使用 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);
我建议运行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)