【问题标题】:How to stop and obtain the guess of fsolve when the objective function returns NaN目标函数返回NaN时如何停止并获取fsolve的猜测
【发布时间】:2015-09-28 15:36:34
【问题描述】:

我正在使用fsolve 求解方程组。有时fsolve 警告我目标函数返回NaN 并尝试一个新点。我想弄清楚我的方程如何传递NaN 以及 fsolve 在生成警告时放入的特定猜测。有没有办法在那个时候停止 fsolve 并获得猜测的值?

我尝试了dbstop if naninf,但它并没有多大帮助,因为我的函数中有几个地方会生成等于NaNInf 的中间变量。我只是很困惑为什么这些方程最后会返回NaN

【问题讨论】:

  • 简单。编写一个新的匿名函数来包装另一个函数,并在 NaN 值的情况下返回错误的目标函数值。例如,使用 g = @(x) f(x)*~isnan(x) + isnan(x)*1e+10 包裹 f(x)。

标签: matlab nan


【解决方案1】:

如果你有大量的迭代,这不是最优的,但你可以设置fsolveDisplay选项,在每次迭代后显示参数:

options = optimoptions('fsolve','Display','iter');
[x,fval] = fsolve(@fun,x0,options)

【讨论】:

    【解决方案2】:

    感谢以上答案,但它们并没有真正解决我的问题。我只是想出了一个简单的解决方法:检查函数中的输出是否包含NaN;如果是,则使用全局变量检索参数值并生成错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-17
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多