日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

三分法求极值

發布時間:2025/7/25 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 三分法求极值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

二分法適用于單調函數求極值的問題

?

如果遇上了不單調的函數呢?like this:

?

對于這種在指定區間里只有一個極值點的函數(凸函數凹函數都可以),我們可以使用三分法求極值

三分極值法的思想:對于區間[l,r],令m=(l+r)/2即中點,再令mm=(m+r)/2,即右半段的中點。這樣l,m,mm,r四個點就把區間分成了三份。

此時若m更靠近極值點,則令r=mm。否則令l=m;這樣就把區間縮小了。

對于用float類型表示的連續函數,可以設定一個迭代次數size,例如可以取size=100。當運行了100次之后差不多就能取到極值點了2333

?

例如下面的程序:求二次函數y=(x-10)^2在區間[0,30]上的最小值

#include <iostream> using namespace std;float l,r,m,mm,ans1,ans2;float fun(float x) {return ((x-10)*(x-10)); }int main() {int size=100;l=0; r=30;while (size--){m=(l+r)/2;mm=(m+r)/2;ans1=fun(m);ans2=fun(mm);if (ans1<ans2) r=mm;else l=m;}cout<<ans1<<endl;cout<<m<<endl;return 0; }

輸出:0  10

?

求最大值?改成ans1>ans2即可

?

?

注意:若區間內該函數有兩個峰(or谷),則不一定能得到正確的解。比如像這樣的函數:

拿鼠標手繪的圖片,略渣==

如圖,在靠近r的位置有個橫坐標很短的峰,盡管這個峰是最大值,但是無奈m和mm點都在它左邊,而且m點的函數值大于mm,會導致r=mm。這樣這個真正的最值點就被錯過了。

?

?

?三分法在一些數學題(特別是計算幾何題)中很有用。

?

?

?Reference:

http://chenjianneng3.blog.163.com/blog/static/128345126201033101044920/

?http://blog.csdn.net/eastmoon502136/article/details/7706479

?

轉載于:https://www.cnblogs.com/pdev/p/3838523.html

總結

以上是生活随笔為你收集整理的三分法求极值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。