Problem Description
F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100)
Can you find the minimum value when x is between 0 and 100.
Input
Output
Sample Input
2 100 200
Sample Output
-74.4291
-178.8534
題意:找出那個函數在x屬於0~100內的最小值。
思路:首先想到的應該是求導求駐點,然後用二分法逼近。
- #include "cstdio"
- #include "cstring"
- #include "cmath"
- #define mi 0.00001
- using namespace std;
- double x,y;
- double f(double x)
- {
- return 42*pow(x,6)+48*pow(x,5)+21*pow(x,2)+10*x-y;
- }
- double fun(double x){
- return 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*pow(x,2)-x*y;
- }
- int main()
- {
- int T;
- scanf("%d",&T);
- while(T--)
- {
- scanf("%lf",&y);
- double l=0,r=100;
- double min;
- double mid=(l+r)/2;
- while(fabs(f(mid))>mi)
- {
- mid=(l+r)/2;
- double a=f(mid);
- if(a>=0)
- {
- r=mid;
- }
- else if(a<0)
- {
- l=mid;
- }
- }
- printf("%.4lf\n",fun(mid));
- }
- return 0;
- }