当前位置: 首页 > article >正文

【Java OJ】弦截法求根(循环)

题目描述

此问题考察函数的嵌套。用弦截法求方程求方程f(x)=x3-5x2+16x-80=0的根, 方法描述如下:

(1)取两个不同点x1,x2,如果f(x1)f(x2)符号相反,(x1,x2)区间内必有一个根。如果f(x1)f(x2)同符号,则应重新输入x1,x2,直到f(x1)f(x2)异号为止。(注意x1x2的值不应差太大,以保证(x1,x2)区间内只有一个根)

(2)连接(x1,f(x1))(x2,f(x2))两点,此线(即弦)x轴于x

(3)若f(x)f(x1)同符号,则根必在(x,x2)区间内,此时将x作为新的x1。如果f(x)f(x2)同符号,则表示根在(x1,x)区间内,x作为新的x2

(4)重复步骤(2)(3) ,直到 |f(x)|<0.0001为止.此时认为f(x)≈0.

要求分别用以下几个函数来实现:

(1)用函数f(x)代表x的函数:x3-5x2+16x-80.f函数。

(2)用函数调用xpoint(x1,x2)来求(x1,f(x1))(x2,f(x2))的连线与x轴的交点x的坐标。

判断点(x1,f(x1))(x2,f(x2)) 的连线与x轴的交点 (xc, 0) 的计算方法如下:

xc=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));

(3)用函数调用root (x1,x2)来求(x1,x2)区间的那个实根。显然,执行root函数过程中要用到函数xpoint,而执行xpoint函数过程中要用 f 函数。

输入

x1 x2

输出

该区间的根

IO模式

本题IO模式为标准输入/输出(Standard IO),你需要从标准输入流中读入数据,并将答案输出至标准输出流中。

输入样例:

6 10
12 15
2 6

输出样例:

reinput:
reinput:
4.999999

*本题Scanner reader = new Scanner(System.in);不可在循环中进行,否则会消耗大量内存,造成运行时异常报错

AC代码:

import java.util.Scanner;
public class Main {
    public static void main(String[] args)
    {
        Scanner reader = new Scanner(System.in);
        while(true)
        {
            double x1=reader.nextDouble();
            double x2=reader.nextDouble();
            if(fx(x1)*fx(x2)>=0)
            {
                System.out.println("reinput:");
            }
            else
            {
                 double ans=root(x1,x2);
                System.out.printf("%f",ans);
                break;
            }
        }

    }
    public static double fx(double x)
    {
        double c=x*x*x-5*x*x+16*x-80;
        return(c);
    }
    public static double xpoint(double x1,double x2)
    {
        double xc=(x1*fx(x2)-x2*fx(x1))/(fx(x2)-fx(x1));
        return(xc);
    }
    public static double root(double x1,double x2)
    {
        while(true)
        {
            double x=xpoint(x1,x2);
            if(fx(x)<0.0001&&fx(x)>-0.0001)
            {
                return x;
            }
            else
            {
                if((fx(x)*fx(x1)>=0))
                {
                    x1=x;
                }
             else
                {
                    x2=x;
                }
            }
        }
    }

}


http://www.kler.cn/a/301898.html

相关文章:

  • ThriveX 博客管理系统前后端项目部署教程
  • MFC中Picture Control控件显示照片的几种方式
  • awk(常用)
  • MuMu模拟器安卓12安装Xposed 框架
  • 数字孪生乡村:数字乡村智慧化营建思路
  • SpringCloud基础 入门级 学习SpringCloud 超详细(简单通俗易懂)
  • 针对网上nbcio-boot代码审计的actuator方法的未授权访问漏洞和ScriptEngine的注入漏洞的补救
  • 基线代理 AI 系统架构
  • 一个以细节见功底的JAVA程序
  • MySQL——数据库的高级操作(二)用户管理(2)创建普通用户
  • 春招审核新策略:Spring Boot系统实现
  • 大型语言模型:通过代码生成、调试和 CI/CD 集成改变软件开发的游戏规则
  • 大数据新视界 --大数据大厂之Flink强势崛起:大数据新视界的璀璨明珠
  • Stable Diffusion绘画 | ControlNet应用-Tile(分块)—tile_resample(分块-重采样)
  • asio中的异步accept分析
  • 如何将 Electron 项目上架 Apple Store
  • 【时时三省】c语言例题----华为机试题<进制转换>
  • Android-10分区存储介绍及百度APP适配实践(1)
  • google vr 入门之制作简易的VR播放器(二)
  • 基于OpenCV与MQTT的停车场车牌识别系统:结合SQLite和Flask的设计流程
  • 基于Qt的自定制WPS
  • 垃圾回收
  • Flutter集成Firebase中的Realtime Analytics
  • 初学者指南:MyBatis 入门教程
  • 【开源免费】基于SpringBoot+Vue.JS房产销售系统(JAVA毕业设计)
  • Redis Key的过期策略