我有一大组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
而不是我已经使用过的功能有什么建议?
谢谢!!
答案 0 :(得分: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