二分法和试位法 java

来源:互联网 发布:python os.execv 编辑:程序博客网 时间:2024/05/18 02:52
package com.zhp.fist;/** * 区间二分法和试位法的实验 *  * @author 郑海鹏 * @since 2014/09/24 13:09 */public class One {final static double scale = 0.000000001;// 计算精度public static void main(String[] args) {double leftX = 1.0;double rightX = 1.5;System.out.println("二分法的结果为:" + ErFen(leftX, rightX));System.out.println("试位法的结果为:" + ShiWei(leftX, rightX));}public static double ErFen(double leftX, double rightX) {double leftY = getY(leftX);double rightY = getY(rightX);double middleX = (leftX + rightX) / 2;double middleY = getY(middleX);if (leftX > rightX) {double temp = leftX;leftX = rightX;rightX = temp;}if (Math.abs(rightY - leftY) < scale) {return middleX;}if (leftY * middleY <= 0) {rightX = middleX;} else {leftX = middleX;}return ErFen(leftX, rightX);}public static double ShiWei(double leftX, double rightX) {double leftY = getY(leftX);double rightY = getY(rightX);double intersectionX = getXByLine(leftX, leftY, rightX, rightY);double intersectionY = getY(intersectionX);if (Math.abs(intersectionY) <= scale) {return intersectionX;}leftX = intersectionX;return ShiWei(leftX, rightX);}public static double getY(double x) {return Math.pow(x, 3) - x - 1;}public static double getXByLine(double leftX, double leftY, double rightX, double rightY) {leftY = Math.abs(leftY);rightY = Math.abs(rightY);return (rightX * leftY + leftX * rightY) / (leftY + rightY);}}


0 0
原创粉丝点击