2

我有一大组 x 数据和一大组 y 数据,它们形成了一系列不规则的洛伦兹峰。我正在尝试使用内置的 matlab 函数 lsqcurvefit

X = lsqcurvefit(FUN,X0,XDATA,YDATA)

我知道X0, XDATA,YDATA是什么,但我正在为投入什么而苦苦挣扎FUN。我创建了以下函数,但从 matlab 中删除了一条错误消息:

function is undefined for arguments of type 'double'

我的功能:

function F = myfun(c,xdata)
F = c(1) + c(2)*exp(-1*(xdata-c(3)).^2/c(4).^2);
end

有没有人对我应该/可以使用什么FUN而不是我已经使用的功能有任何建议?谢谢!!

4

1 回答 1

0

我认为您只需要创建一个匿名函数并确保您的初始猜测向量具有正确的维度。将 X0 设置为您对曲线拟合参数的初始猜测,并确保 X0 是 1x4 向量,您可能希望将初始值添加到您的问题中,以明确您要解决的问题。

% setup your initial guess, this is just an example
X0 = [ 1 1 1 1];
X = lsqcurvefit(@(c,xdata) c(1)+(c(2)*exp(-1*(((xdata-c(3)).^2)/(c(4)).^2))),X0,XDATA,YDATA);

当我测试上述内容时,我得到:

% assign the anon function to a handle
me = @(c,xdata) c(1)+(c(2)*exp(-1*(((xdata-c(3)).^2)/(c(4)).^2)))
% test the function
me([1,1,1,1],1)
ans =

     2
于 2013-06-19T19:13:15.790 回答