zoukankan      html  css  js  c++  java
  • ybt 第二部分 基础算法 --> 第七章 分治算法 1241:二分法求函数的零点

    1241:二分法求函数的零点


    时间限制: 1000 ms         内存限制: 65536 KB
    提交数: 3263     通过数: 1974 

    【题目描述】

    有函数:f(x)=x515x4+85x3225x2+274x121f(x)=x5−15x4+85x3−225x2+274x−121

    已知f(1.5)>0,f(2.4)<0f(1.5)>0,f(2.4)<0 且方程f(x)=0f(x)=0 在区间[1.5,2.41.5,2.4] 有且只有一个根,请用二分法求出该根。

    【输入】

    (无)

    【输出】

    该方程在区间[1.5,2.41.5,2.4]中的根。要求四舍五入到小数点后66位。

    源代码

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<math.h>
    using namespace std;
    
    double f(double x)
    {
    	return x*x*x*x*x-15*x*x*x*x+85*x*x*x-225*x*x+274*x-121;
    }
    
    int  main(void)
    {
    	double i=1.5;
    	double j=2.4;
    	double xx;
    	
    	while(i+0.000001<j)
    	{
    		xx=(i+j)/2.0;
    		
    		if(f(xx)>0)
    		{
    		    i=xx;
    		}
    		
    		if(f(xx)<0)
    		{
    			j=xx;
    		}
    		
    		if(f(xx)==0)
    		{
    			printf("%.6lf",xx);
    			return 0;
    		}
     	}
     	
     	if(f(i)==0)
     	{
     		printf("%.6lf",i);
     		return 0;
    	}
    	
    	else
    	{
    		printf("%.6lf",j);
    		return 0;
    	}
    } 

    这道题的分治主要体现在探求他的取值范围。

    已知x=1.5时,f(x)>0,x=2.4时,f(x)<0,且方程的具体解在[1.5,2.4]的范围之间,那么这个函数在定义域[1.5,2.4]的范围内应为单调递减,所以在二分的时候,

    应注意:当f(x)>0时,不是将中值mid赋给右端的j,而是赋给左端的i,(在这里WA了好几次,QWQ),当f(x)<0时相反。

    这道题就是不断地取i,j的中值,进行查找比较,当找到符合使f(x)=0的值时停止,当在一遍查找结束后应将左端加上1e-6来缩小取值范围(或在右端减去),直

    到找到满足条件的值或i>j时退出循环,输出。

    找到止

  • 相关阅读:
    html中frameset的详细使用方法
    日期控件API
    限制input输入类型(多种方法实现)
    springmvc导出excel并弹出下载框
    Spring mvc 验证码的做法
    Spring Boot 集成MyBatis
    Spring Boot 实践折腾记(三):三板斧,Spring Boot下使用Mybatis
    支付系统架构
    javaScript事件(六)事件类型之滚轮事件
    你不是真正的快乐
  • 原文地址:https://www.cnblogs.com/jd1412/p/12395793.html
Copyright © 2011-2022 走看看