方程求根

文章目录

  • 方程求根
    • 一、问题描述
    • 二、代码实现
    • 三、输出

方程求根

一、问题描述

  • 用java编程语言编写一程序,对形如:ax3+bx2+cx+d=0这样的一个一元三次方程。给出该方程中各项
    的系数(a,b,c,d均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),
    且根与根之差的绝对值>=1。要求三个实根。

二、代码实现

package com.mtons.mblog.leetcode;

import java.util.Scanner;

/**
 * 用java编程语言编写一程序,对形如:ax3+bx2+cx+d=0这样的一个一元三次方程。给出该方程中各项
 * 的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),
 * 且根与根之差的绝对值>=1。要求三个实根。
 * 

* 适当位置添加注释语句以增加程序的可读性! */ public class TestThree { public static void main(String[] args) throws java.lang.Exception { // 输入系数 //Scanner sc = new Scanner(System.in); double a = 1;//sc.nextDouble(); double b = -5;//sc.nextDouble(); double c = -4;//sc.nextDouble(); double d = 20;//sc.nextDouble(); // 根与根之差的绝对值>=1,所以每次增加1 for (double x = -100; x < 100; x++) { double x1 = x; double x2 = x + 1; if (a * x * x * x + b * x * x + c * x + d == 0) { // x是根 System.out.println(x); // 如果当x从x1变化到x2,函数值符号发生了变化,则x1和x2之间必有一个使函数值为0的数,即方程的一个根 } else if (f(x1, a, b, c, d) * f(x2, a, b, c, d) < 0) { // 不断缩小这个范围,直到达到一个满意的精度 1x10^(-3) while (x2 - x1 >= 1e-3) { double xx = (x1 + x2) / 2; if (f(xx, a, b, c, d) * f(x1, a, b, c, d) < 0) { x2 = xx; } else { x1 = xx; } } // x1是根 System.out.println(x1); } } } public static double f(double x, double a, double b, double c, double d) { return a * x * x * x + b * x * x + c * x + d; } }

三、输出

方程求根_第1张图片

你可能感兴趣的:(方程求根)