我正在尝试使用fminsearch和函数句柄优化函数
但是,我得到错误A和B必须是浮点标量。在detalis,
使用积分时出错(第86行) A和B必须是浮点标量。
@(x,p)出错(积分(@(n)((p(1)-p(2))* exp(n)), - inf,x + 3))
@(x)中的错误((x-f2(x,p))。^ 2)
integralCalc / iterateScalarValued中的错误(第314行) fx = FUN(t);
integralCalc / vadapt出错(第133行) [q,errbnd] = iterateScalarValued(u,tinterval,pathlen);
integralCalc出错(第76行) [q,errbnd] = vadapt(@ AtoBInvTransform,interval);
积分误差(第89行) Q = integralCalc(fun,a,b,opstruct);
@(p)中的错误(积分(@(x)((x-f2(x,p))。^ 2), - 3,3))
fminsearch出错(第191行) fv(:,1)= funfcn(x,varargin {:});
我该如何解决这个问题?
我认为x-3成为一个问题,但我不能处理它。 x应该在f2中是可变的,以便在q3
中相对于x进行积分提前谢谢
sigma=0.1;
f2=@(x,p)(integral(@(n)((p(1)-p(2))*exp(n)),-inf,x+3));
q3=@(p)(integral(@(x)((x-f2(x,p)).^2),-3,3));
[p, fval] = fminsearch(q3,[0.1 0.4]);
答案 0 :(得分:0)
问题是当你整合x时,功能"整合"给f2一个矢量来评估。这与在函数" q3"。
中使用点符号的原因相同快速解决方法是在" f2"周围使用arrayfun。 - 但你应该考虑适应用户20160在评论中提出的内容,即制作完整的功能,然后调试起来会更容易,因为它需要一个矢量,你可以制作一个for循环,它在输入的端点上运行。标准for循环比标准arrayfun快。