2010-08-13 43 views
5

我需要找到[0,1]上的函數f(t)= int g(t,x)dx的最小值。我在做數學是如下:找到在Mathematica中通過積分定義的函數的最小值

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

但是數學暫停在第一次嘗試,因爲NIntegrate不與象徵性的科技工作。它需要一個具體的價值來評估。雖然Plot [f [t],{t,0,1}]可以持續運行,但FindMinimum會在初始點停止。

我不能整合代替NIntegrate,因爲函數g是有點複雜,如果你鍵入整合,只是數學繼續運行......

任何辦法來解決呢?謝謝!

+0

請參見[this](http://stackoverflow.com/questions/6990285/mathematica-evaluation-order-during-numerical-optimisation-of-black-box-function/7020539#7020539)答案指針文檔頁面,解釋這種行爲。 – 2011-08-17 08:53:03

回答

10

試試這個:

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的用戶提供了參數的值時,這有效地給出了「稍後」的定義。請參閱SetDelayed

  2. t_?NumericQ而不是t_定義f。這就是說,t可以是任何數字(Pi,7,0等)。但不是任何非數字(t,x,「foo」等)。

0

分析一盎司...

你可以得到一個確切的答案,完全避免了數值積分的重任,只要Mathematica可以做克符號積分[T, x] wrt x然後符號分化wrt噸。具有更復雜克以下簡單的例子[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 
-1

函數的最低可僅在零它的衍生點,所以爲什麼要整合在第一位?

  • 您可以使用FindRootSolve找到g
  • 根然後你可以驗證點真的是局部極小通過檢查g衍生物(它應該是在這一點正)。
  • 然後你可以NIntegrate找到最小值f - 只有一個數值積分!
+0

-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 [整合並[g [T,X],T]'。所以,雖然它可能在特殊情況下工作,例如'g [x,t] == T [t] X [x]'或'g [x,t] == T [t] + X [x]',但它不能被普遍應用。 – rcollyer 2010-11-10 15:30:46

相關問題