1、二分法与黄金分割法的比较题目:计算函数 的值并画出图像并分析各种算法的效率一.二分法及黄金分割法计算函数的程序1.二分法程序:import java.math.*;import java.util.Scanner;public class Value1 public static void main(String args) int count=0; double y1=0,y2=0,y3=0,y4=0; double x1=0.1; double x2=1; Double x3=(x2-x1)*0.5+x1; / 二分中点 double jd=1; /精度 F a=new F(); /初始化
2、函数 y1=a.Zhi(x1); y2=a.Zhi(x2); y3=a.Zhi(x3); System.out.println(“请输入精度“); Scanner s=new Scanner(System.in); / 获取输入的精度 jd=s.nextInt(); long startTime=System.nanoTime(); / 获取程序开始时间 while(Math.abs(y3)Math.pow(10,( -jd-1) if(y30) x1=x3; else x2=x3; x3=(x2-x1)*0.5+x1; /用二分中点法向值靠近 y3=a.Zhi(x3); count+; lo
3、ng endTime=System.nanoTime(); / 获得程序结束时间 long sum=endTime-startTime; String x6=x3.toString(); / 截取精度 String x7=x6.substring(0, (int) (jd+2); System.out.println(“x的值为: “+x7); System.out.println(“y的逼近值为: “+y3); System.out.println(“运行程序所用的时间为: “+sum+” 纳纱”); System.out.println(“二分分割次数为: “+count); class
4、F / 计算F(X)的函数 double Zhi(double x) double y=0; y=1/x*(1-1/(Math.pow(1+x, 5)-2; return y; 程序运行结果:精度为6时的结果精度为8时的结果2.黄金分割法程序:import java.math.*;import java.util.Scanner;public class Value2 public static void main(String args) int count=0; double y1=0,y2=0,y3=0,y4=0; double x1=0.1; double x2=1; Double x
5、3=(x2-x1)*0.618+x1; / 黄金中点 double jd=1; /精度 F a=new F(); /初始化函数X y1=a.Zhi(x1); y2=a.Zhi(x2); y3=a.Zhi(x3); System.out.println(请输入精度); Scanner s=new Scanner(System.in); / 获取输入的精度 jd=s.nextInt(); long startTime=System.nanoTime(); / 获取程序开始时间 while(Math.abs(y3)Math.pow(10, (-jd-1) if(y30) x1=x3; else x2
6、=x3; x3=(x2-x1)*0.618+x1; /用黄金中点法向值靠近 y3=a.Zhi(x3); count+; long endTime=System.nanoTime(); / 获得程序结束时间 long sum=endTime-startTime; String x6=x3.toString(); / 截取精度 String x7=x6.substring(0, (int) (jd+2); System.out.println(“x的值为: “+x7); System.out.println(“y的逼近值为: “+y3); System.out.println(“运行程序所用的时间
7、为: “+sum+” 纳纱”); System.out.println(“黄金分割次数为: “+count); class F / 计算F(X)的函数 double Zhi(double x) double y=0; y=1/x*(1-1/(Math.pow(1+x, 5)-2; return y; 程序运行结果精度为6时的结果精度为8时的结果 二.函数的图像及程序1.图像程序代码import javax.swing.*;import java.awt.*;import java.lang.Math;public class Value3 extends JFrame public Value
8、3() add(new X2FunctionPanel(); public static void main(String args) Value3 frame = new Value3(); frame.setSize(700, 400); frame.setTitle(绘制函数); frame.setLocationRelativeTo(null);/ center frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); class X2FunctionPanel extends JPane
9、l protected void paintComponent(Graphics g) super.paintComponent(g); / 画x轴 g.drawLine(20, 150, getWidth() - 20, 150); / x箭头 g.drawLine(getWidth() - 30, 140, getWidth() - 20, 150); g.drawLine(getWidth() - 30, 160, getWidth() - 20, 150); / “x” g.drawString(X, getWidth() - 10, 150); / 画y轴 g.drawLine(20
10、0, getHeight() - 20, 200, 20); g.drawLine(190, 30, 200, 20); g.drawLine(210, 30, 200, 20); g.drawString(Y, 220, 30); / 画函数图像 Polygon p = new Polygon(); double scaleFactor = 0.02; for (double x = 0; x v2 v1v2和v1v3可以看出有时候二分法算法快,有时候黄金分割法快,这是因为黄金分割法的速度是波动的,在前面三个精度中可以看出二分法比黄金分割法快,但后面黄金分割法比前面的要快 ,对于数据范围在n以内的数,有二分法的算法最慢速度log2(n)和黄金分割算法最慢速度log1/0.618(n)。计算得log2(n)=log1/0.618(n),所以二分法的最慢速度在前面的时候较快,黄金分割法的所以二分法的稳定性更高
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1