你如何将ld(x ^ 2)+ 3y等2d曲线拟合成mxn数组?
更新
我的意思是我有mxn数组,并希望它与2D曲线相符。抱歉混淆。
答案 0 :(得分: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);
答案 1 :(得分:2)
我建议运行cftool
。它实际上非常适合向导型小工具。
这是一个programmatic fitting example(我喜欢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)