【问题标题】:lsqcurvefit input parameters matlablsqcurvefit输入参数matlab
【发布时间】:2013-06-16 11:07:48
【问题描述】:

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

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

我知道X0XDATAYDATA 是什么,但我正在为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 使用什么而不是我已经使用的功能有任何建议? 谢谢!!

【问题讨论】:

  • 在调用lsqcurvefit时,我一直在使用X=lsqcurvefit(@myfun,x0,xdata,ydata)

标签: matlab function curve-fitting curve data-fitting


【解决方案1】:

我认为您只需要创建一个匿名函数并确保您的初始猜测向量具有正确的维度。将 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

【讨论】:

  • 感谢您的回复!但是当我输入 c=[1 1 1] 时,我得到了这个错误:尝试访问 c(4);索引超出范围,因为 numel(c)=3。 @(c,x)c(1)+(c(2)*exp(-1*(((xdata-c(3)).^2)/(c(4)).^2)) 中的错误) lsqcurvefit 中的错误(第 203 行)initVals.F = feval(funfcn_x_xdata{3},xCurrent,XDATA,varargin{:});原因:初始用户提供的目标函数评估失败。 LSQCURVEFIT 无法继续。 c=[ some stuff here ]; 到底是什么意思? ??
  • 可能是因为您使用的是 1x4 向量,而不是 1x3,您的意思是要包含 c(4) 元素吗?对不起我原来的帖子,读你的问题太快了,;-)
  • 别担心!我将 c 更改为 c=[1 1 1 1] 但仍然收到此错误:尝试访问 c(4);索引超出范围,因为 numel(c)=3。 @(c,xdata)c(1)+(c(2)*exp(-1*(((xdata-c(3)).^2)/(c(4)).^2)) 中的错误) lsqcurvefit 中的错误(第 203 行)initVals.F = feval(funfcn_x_xdata{3},xCurrent,XDATA,varargin{:});原因:初始用户提供的目标函数评估失败。 LSQCURVEFIT 无法继续。任何其他想法为什么这不起作用?
猜你喜欢
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多