Matlab lsq curvefit参数

时间:2017-10-23 02:30:56

标签: matlab

我在使用matlab的lsqcurvefit函数找到非线性拟合系数时遇到了一些问题。目前,我在运行代码时遇到索引超出矩阵维度错误。我的代码很简单,看起来如下:

function aFit = fitTwoSlit(xData,yData)

load twoSlit
a0 = 4;+
aFit = lsqcurvefit(@TwoSlitInter,a0,xData,yData);
plot(xData, yData, 'bo', xData, aFit, 'k-');
end

function Inten = TwoSlitInter(a,x)


L = 1025.; % Length in mm
lambda_l = 6.7e-4; %laser lambda in mm
k_l = 9.378e+03;   % k for laser in 1/mm
phi = k_l*a(2)*sin(abs(x-a(4))/L);
psi = k_l*a(3)*sin(abs(x-a(4))/L);

Inten = a(1)*(sin(phi/2)./(phi/2)).^2.*(cos(psi/2)).^2;

end

我有一个数组' a'带有强度函数使用的系数。如果lsqcurvefit需要传递函数句柄而不是函数本身,我对如何传递这些系数感到困惑。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

为什么要在fitTwoSlit中加载数据,因为它们是函数的参数?如果我理解了你的问题,我会期待像

这样的东西
load twoSlit; % this should load xData and yData

然后aFit = fitTwoSlit(xData,yData);

a0 = 4; + 

假设'+'是拼写错误,你会定义a0 = 4.问题是你的TwoSlitInter函数期望一个'a'变量是一个四维向量(你引用一个(1)。 .. a(4)。

所以假设你的a是

a0 = randn(4,1); % unlikely to be the best guess

然后你可以在

中调用lsqcurvefit
aFit = lsqcurvefit(@TwoSlitInter,a0,xData,yData);

然后绘制你需要的结果

plot(xData, yData, 'bo', xData, TwoSlitInter(aFit, xData) , 'k-') ;