一千萬個為什麽

搜索

查找插值函數的最小值

我似乎無法使用 FindMinValue 來查找min。由插值函數表示的曲線的值。 例如,下面的代碼生成插值函數多項式作為熱方程的解。 tsol = u /. NDSolve[{D[u[t, x], t] == D[u[t, x], x, x], u[0, x] == 0, u[t, 0] == Sin[t], u[t, 5] == 0}, u, {t, 0, 10}, {x, 0, 5}][[1]]

這包括: Plot3D[Evaluate[u[t, x] /. %], {t, 0, 10}, {x, 0, 5}, PlotRange -> All]

我想找到這個函數表示的曲線中的最小點,比如 t = 10.0 ,所以我嘗試這樣做: FindMinValue[tsol, {{x, 0, 5}, {t, 0, 10}}]

這顯然是錯的。我想找到最小值AT t = 10。 這也不起作用: FindMinValue[tsol[10, x], {x, 0, 5}]

我實際上有一個插值函數。這是在 x y 和 t 中,我非常驚訝。 為什麽 tsol 5的維度?我認為它只是2,因為它只在x和t中。 tsol [10,x]的情節:

最佳答案

確保使用區域內的參數調用 InterpolatingFunction 始終是一件好事: tsol = u /. NDSolve[{D[u[t, x], t] == D[u[t, x], x, x], u[0, x] == 0, u[t, 0] == Sin[t], u[t, 5] == 0}, u, {t, 0, 10}, {x, 0, 5}][[1]]; Plot3D[tsol[t, x], {t, 0, 10}, {x, 0, 5}, PlotRange -> All]

FindMinimum[{tsol[t, x], 0 <= t <= 10 && 0 <= x <= 5}, {{x, 1}, {t, 9}}]

(* {-1.00007, {x -> 1.43395*10^-7, t -> 4.71148}} *)

這應該只給你一個想法,雖然它沒有找到你喜歡的最小值。 的更新</強> 要找到問題最後部分中指出的最小值,您可以這樣做 Plot[tsol[10, x], {x, 0, 5}, PlotRange -> All] FindMinValue[{tsol[10, x], 0 <= x <= 5}, x]

(* -0.544147 *)

選項值是 All 來繪制所有內容。

轉載註明原文: 查找插值函數的最小值