错误:A和B必须是浮点标量

时间:2016-06-06 02:58:20

标签: matlab

我正在尝试使用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]);

1 个答案:

答案 0 :(得分:0)

问题是当你整合x时,功能"整合"给f2一个矢量来评估。这与在函数" q3"。

中使用点符号的原因相同

快速解决方法是在" f2"周围使用arrayfun。 - 但你应该考虑适应用户20160在评论中提出的内容,即制作完整的功能,然后调试起来会更容易,因为它需要一个矢量,你可以制作一个for循环,它在输入的端点上运行。标准for循环比标准arrayfun快。