我在使用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需要传递函数句柄而不是函数本身,我对如何传递这些系数感到困惑。
任何帮助将不胜感激!
答案 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
然后你可以在
中调用lsqcurvefitaFit = lsqcurvefit(@TwoSlitInter,a0,xData,yData);
然后绘制你需要的结果
plot(xData, yData, 'bo', xData, TwoSlitInter(aFit, xData) , 'k-') ;