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

Matlab 错误:A和B必须是浮点标量,matlab,Matlab,我正在尝试使用fminsearch和函数句柄优化函数 但是,我得到错误A和B必须是浮点标量。具体来说 使用积分时出错(第86行) A和B必须是浮点标量 @(x,p)(整数(@(n)((p(1)-p(2))*exp(n)),-inf,x+3))中的错误 @(x)((x-f2(x,p))中的错误。^2) integralCalc/IterateScalavalue中的错误(第314行) fx=乐趣(t) integralCalc/vadapt中的错误(第133行) [q,errbnd]=迭代Cala

我正在尝试使用fminsearch和函数句柄优化函数

但是,我得到错误A和B必须是浮点标量。具体来说

使用积分时出错(第86行) A和B必须是浮点标量

@(x,p)(整数(@(n)((p(1)-p(2))*exp(n)),-inf,x+3))中的错误

@(x)((x-f2(x,p))中的错误。^2)

integralCalc/IterateScalavalue中的错误(第314行) fx=乐趣(t)

integralCalc/vadapt中的错误(第133行) [q,errbnd]=迭代Calavaled(u,tinterval,pathlen)

积分计算错误(第76行) [q,errbnd]=vadapt(@AtoBInvTransform,interval)

积分误差(第89行) Q=积分计算器(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]);

问题是当你对x积分时,函数“integrate”给了f2一个向量来计算。这与在函数“q3”中使用点表示法的原因相同


快速修复是在“F2”周围使用ARARYFAY,但是您应该真正考虑到在评论中建议使用USER 20160,即生成完整的函数,然后调试更容易,并且在向量中,可以创建一个for循环,它在输入端点上运行。标准for循环比标准arrayfun快。

问题是,当对x进行积分时,函数“integrate”会给f2一个向量进行求值。这与在函数“q3”中使用点表示法的原因相同


快速修复是在“F2”周围使用ARARYFAY,但是您应该真正考虑到在评论中建议使用USER 20160,即生成完整的函数,然后调试更容易,并且在向量中,可以创建一个for循环,它在输入端点上运行。标准for循环比标准arrayfun快。

欢迎来到stackoverflow J.Lee。用你正在使用的编程语言标记你的问题是很有帮助的——我添加了“matlab”,这是它的样子,并删除了“floating”,这是css中用于浮点div之类的标记。为了调试,请尝试将代码编写为完整函数,而不是函数句柄。然后,matlab将告诉您有关错误发生位置的更多有用信息(如行号)。能否提供
p
n
?如果它们很大,请只发布足够的内容来重新创建您的问题。yuo也可以复制粘贴整个错误堆栈吗?谢谢,我复制了patste整个错误堆栈来stackoverflow J.Lee。用你正在使用的编程语言标记你的问题是很有帮助的——我添加了“matlab”,这是它的样子,并删除了“floating”,这是css中用于浮点div之类的标记。为了调试,请尝试将代码编写为完整函数,而不是函数句柄。然后,matlab将告诉您有关错误发生位置的更多有用信息(如行号)。能否提供
p
n
?如果它们很大,请只发布足够的内容来重新创建您的问题。yuo也可以复制粘贴整个错误堆栈吗?谢谢,我复制了整个错误堆栈