【问题标题】:Error: A and B must be floating point scalars错误:A 和 B 必须是浮点标量
【发布时间】:2016-10-05 13:28:44
【问题描述】:

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

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

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

@(x,p)(integral(@(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 = 积分计算(fun,a,b,opstruct);

@(p)(integral(@(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]);

【问题讨论】:

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

标签: matlab


【解决方案1】:

问题在于,当您对 x 进行积分时,函数“integrate”会为 f2 提供一个要评估的向量。这与您在函数“q3”中使用点符号的原因相同。

快速解决方法是在“f2”周围使用arrayfun - 但您应该真正考虑适应用户20160在cmets中建议的内容,即制作完整的功能,这样调试起来会更容易,因为它需要一个向量,您可以创建一个 for 循环,该循环在输入的端点上运行。标准 for 循环比标准 arrayfun 更快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    相关资源
    最近更新 更多