我有以下表达式:
披=(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无法继续。
请帮帮我吗?
干杯!