我有一大组 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
代替我已经使用的功能有什么建议?
谢谢!!
我认为您只需要创建一个匿名函数并确保您的初始猜测向量具有正确的维度。将 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