如何做这个涉及积分的非线性最小二乘拟合?

时间:2016-07-07 18:06:53

标签: matlab

我有以下表达式:

披=(a)中的 INT(EXP(-x (1+(8×PI B'/ EM> C)^ 2))DX), 其中积分从0到inf,而a,b,c是常数。

我知道phi,但我不知道常数a,b和c。这就是为什么我想做一个非线性最小二乘拟合,因为我不确定我会得到一条直线,如果得到它我会改变它。

问题是我认为我在定义积分时遇到了问题,并将其引入到最后的表达式中,在那里我进行非线性最小二乘拟合。运行后会出现大量错误。

代码如下:

%I introduce the data
qy=[0.022 0.023 0.025 0.027 0.028 0.03 0.033 0.037 0.043 0.049 0.058 0.065 0.075 0.094 0.141 0.155 0.192 0.219 0.369];

QY=qy(end);
%I introduce initial guesses for my fitting
initial_guesses=[max(max(qy))/2  QY/10 max(max(qy))/2];
i_g(1,1)=initial_guesses(1,1);
i_g(2,1)=initial_guesses(1,2);
i_g(3,1)=initial_guesses(1,3);

%Let's define my integral
fun=@(x,parameters) exp(-x.*(1+(8*pi()*parameters(2)*parameters(3)).^2));

%We model the fitting
HoffForst_decaydiff=@(parameters) (qy(1:end)-parameters(1)*integral(@(x,parameters)fun,0,Inf));

%options = optimoptions(@lsqnonlin,'Algorithm','levenberg-marquardt');
options = optimoptions(@lsqnonlin,'Algorithm','levenberg-marquardt','TolFun',1e-7,'TolX',1e-7);

%perform NL LS fit
[fit_parameters, resnorm, fit_residuals]=lsqnonlin(HoffForst_decaydiff, i_g, [], [], options);

运行最后一行(lsqnonlin行)后出现的错误是: 使用integralCalc / finalInputChecks时出错(第511行) 输入功能必须返回' double'或者'单身'值。找到' function_handle'。

integralCalc / iterateScalarValued中的错误(第315行)                 finalInputChecks(X,FX);

integralCalc / vadapt出错(第132行)             [q,errbnd] = iterateScalarValued(u,tinterval,pathlen);

integralCalc出错(第83行)         [q,errbnd] = vadapt(@ AToInfInvTransform,interval);

积分误差(第88行) Q = integralCalc(fun,a,b,opstruct);

@(参数)出错(qy(1:end)-parameters(1)* integral(@(x,parameters)fun,0,Inf))

lsqnonlin中的错误(第194行)             initVals.F = feval(funfcn {3},xCurrent,varargin {:});

引起:     初始用户提供的目标函数评估失败。 LSQNONLIN无法继续。

请帮帮我吗?

干杯!

0 个答案:

没有答案