求最小值

題意:對於函數F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x,給定一個y值,求當x在1~100時F(x)的最小值。

思路:先對F(x)求導,可以看出導數單調,求出x取何值時導數爲0,則該x就是函數最小時x的取值。用二分法查找該x。

感悟:其實應該所做這樣的問題,開闊一下思維,有些題看起來很簡單,但你用的方法卻不一定是最好的,看來簡單題也有它的學問在裏面,而我最大的感悟就是,有時候模板不一定最優,雖然能及很所算法,並靈活運用的人已經可以稱作大神,但我更佩服做每道題都動腦筋尋找最優答案的人。那就努力打好基礎吧,然後做一個思維活躍的人。

AC代碼:

#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;
double f (double x,double y)
{
    return 42*pow(x,6)+48*pow(x,5)+21*pow(x,2)+10*x-y;
}
double F(double x ,double y)
{
    return 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*pow(x,2)-x*y;
}
int main()
{
    int t;
    double a,m,l,h;
    cin>>t;
    while (t--)
    {
        cin>>a;
        l=0;h=100;
        m=(l+h)/2;
        while ( fabs (f(m,a))>0.00001)
        {
            if (f(m,a)>0)
            h=m;
            else
            l=m;
            m=(l+h)/2;
        }
        cout<<fixed<<setprecision(4)<<F(m,a)<<endl;
    }
    return 0;
}

發佈了32 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章