【问题标题】:find minimum of a function defined by integration in Mathematica在 Mathematica 中找到由积分定义的函数的最小值
【发布时间】:2010-08-13 07:58:52
【问题描述】:

我需要找到函数 f(t) = int g(t,x) dx 在 [0,1] 上的最小值。我在mathematica中所做的如下:

f[t_] = NIntegrate[g[t,x],{x,-1,1}]
FindMinimum[f[t],{t,t0}]

但是,mathematica 在第一次尝试时就停止了,因为 NIntegrate 不适用于符号 t。它需要一个特定的值来评估。虽然 Plot[f[t],{t,0,1}] 可以完美运行,但 FindMinimum 会在初始点停止。

我不能用 Integrate 代替 NIntegrate,因为函数 g 有点复杂,如果你输入 Integrate,mathematica 就会继续运行...

有什么办法可以解决吗?谢谢!

【问题讨论】:

  • 请参阅 this 答案以获取指向文档页面的指针以及此行为的说明。

标签: wolfram-mathematica


【解决方案1】:

试试这个:

In[58]:= g[t_, x_] := t^3 - t + x^2

In[59]:= f[t_?NumericQ] := NIntegrate[g[t, x], {x, -1, 1}]

In[60]:= FindMinimum[f[t], {t, 1}]

Out[60]= {-0.103134, {t -> 0.57735}}

In[61]:= Plot[f[t], {t, 0, 1}]

我对您的代码做了两个相关的更改:

  1. :=而不是=定义f。当 f 的用户提供了参数的值时,这有效地给出了 f “稍后”的定义。见SetDelayed

  2. t_?NumericQ 代替t_ 定义f。这就是说,t 可以是任何数字(Pi、7、0 等)。但不是任何非数字(t、x、“foo”等)。

【讨论】:

    【解决方案2】:

    一盎司的分析...

    只要 Mathematica 可以对 g[t,x] w.r.t x 进行符号积分,然后对 w.r.t.吨。一个更复杂的 g[t,x] 示例,其中包括 x 和 t 中的多项式乘积:

    g[t_, x_] := t^2 + (7*t*x - (x^3)/13)^2;
    xMax = 1; xMin = -1; f[t_?NumericQ] := NIntegrate[g[t, x], {x, xMin, xMax}];
    tMin = 0; tMax = 1;Plot[f[t], {t, tMin, tMax}];
    tNumericAtMin = t /. FindMinimum[f[t], {t, tMax}][[2]];
    dig[t_, x_] := D[Integrate[g[t, x], x], t];
    Print["Differentiated integral is ", dig[t, x]];
    digAtXMax = dig[t, x] /. x -> xMax; digAtXMin = dig[t, x] /. x -> xMin;
    tSymbolicAtMin = Resolve[digAtXMax - digAtXMin == 0 && tMin ≤ t ≤ tMax, {t}];
    Print["Exact: ", tSymbolicAtMin[[2]]];
    Print["Numeric: ", tNumericAtMin];
    Print["Difference: ", tSymbolicAtMin [[2]] - tNumericAtMin // N];
    

    结果:

    ⁃Graphics⁃
    Differentiated integral is 2 t x + 98 t x^3 / 3 - 14 x^5 / 65
    Exact: 21/3380
    Numeric: 0.00621302
    Difference: -3.01143 x 10^-9
    

    【讨论】:

      【解决方案3】:

      函数的最小值只能在它的导数的零点处,那为什么首先要积分呢?

      • 您可以使用FindRootSolve 查找g 的根
      • 然后,您可以通过检查 g 的导数来验证点是否真的是局部最小值(此时应该是正数)。
      • 然后您可以NIntegrate 找到f 的最小值 - 只有一个数值积分!

      【讨论】:

      • -1,@phadej,我为这个迟到的评论道歉,但我刚刚遇到了这个。不幸的是,您的数学不正确,因为g[x,t]==0 很可能不会出现在f[t]==0 的位置。一个简单的反例是Sin[x+t],绘制ContourPlot[Evaluate[{# == 0, D[Integrate[#, {x, 0, 1}], t]==0}], {x, 0, 1}, {t, -5, 5}] & @ Sin[x + t] 表明在{x,t} 空间中有g[t,x]!= D[Integrate[g[t,x]],t] 的区域。因此,虽然它可能在特殊情况下工作,例如g[x,t]==T[t]X[x]g[x,t]==T[t]+X[x],一般不能应用。
      猜你喜欢
      • 2012-03-01
      • 2014-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-04
      • 1970-01-01
      • 2011-09-10
      • 1970-01-01
      相关资源
      最近更新 更多