⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 binarysearch.java

📁 用二分搜索算法求x=2sinx的所有根
💻 JAVA
字号:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class BinarySearch extends JFrame implements ActionListener
{
	private JTextArea display = new JTextArea (7,10);
	private JButton search = new JButton("二分搜索START!");
	private Picture p = new Picture();                  //画板
	public BinarySearch ()                         //初始化过程
	{
		p.setBackground(Color.gray);
		p.setSize(600,400);
		p.setVisible(true);
		JPanel control = new JPanel();
		control.setBackground(Color.darkGray);
		control.setSize(600,200);
		control.setVisible(true);
		control.add(display);
		control.add(search);
		search.addActionListener(this);
		getContentPane().add(p,"Center");
		getContentPane().add(control,"South");
		display.append("单击按钮可用动态演示二分搜索全过程,并得出图形的所有根");
		display.setEditable(false);
		setTitle("数值算法:二分搜索(张轶雯 软件0402 040950211)");
	}

	public double binarySearch(double begin,double end)     //二分搜索算法
	{
		int HREF=300,VREF=200;                          //设置坐标
		double d=0.000001;                               //精度值
		double a=begin,b=end,x=(begin+end)/2,zzuobiao;
		Graphics g=p.getGraphics();
		g.setColor(Color.yellow);                       //创建蓝色的画笔
		while (b-a>d)
		{
			x=(b+a)/2;
			for(int i=0;i<=20000000;i++);           //延长计算机运行时间
			g.drawLine((int)(x*50)+HREF,VREF-30,(int)(x*50)+HREF,VREF);     //对搜过的x画线
			System.out.println(x);
			if (Math.sin(x)*Math.sin(a)<0)
				b=x;
			else
				a=x;
		}
		zzuobiao=2*Math.sin(x);
		g.setColor(Color.green); 
		g.fillOval((int)(x*50)+HREF,-(int)(zzuobiao*50)+VREF,5,5);
		g.drawString(String.valueOf(x),(int)(x*50)+HREF,VREF+15);        //对最终结果做标记
		return x;                     //返回二分搜索得出的根值
	}
	public void actionPerformed(ActionEvent e)
	{
		display.append('\n'+"y=2sinx的根为:");
		double m=-4.6,n=5.0,x0=0.0;                               
		for (;m<5.0 ;m+=1.0){       //逐段检验是否存在根值   
			if (Math.sin(m)*Math.sin(m+1)<=0){
				x0=binarySearch(m,m+1);         //若存在,调用二分搜索算法
				display.append('\n'+"x="+x0);
			}
		}
	}
	
	public static void main(String args[])
	{
		BinarySearch f = new BinarySearch();
        f.setBackground(Color.black);
		f.setSize(600,600);
		f.setVisible(true);
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
	}
}

class Picture extends JPanel      //画板初始化
{
   private final int HREF = 300 , VREF = 200;
  
   public void paintComponent(Graphics g)
	{
	   super.paintComponent(g);
	   g.setColor(Color.black);
	   g.drawString("用二分法求y=2sinx在图中的所有根",5,15);
	   g.setColor(Color.white);
	   g.drawLine(HREF-250,VREF,HREF+250,VREF);
	   g.drawLine(HREF,VREF-160,HREF,VREF+160);
	   g.drawLine(HREF+245,VREF-5,HREF+250,VREF);
	   g.drawLine(HREF+245,VREF+5,HREF+250,VREF);
	   g.drawLine(HREF-5,VREF-155,HREF,VREF-160);
	   g.drawLine(HREF+5,VREF-155,HREF,VREF-160);
	   g.drawString("0",HREF,VREF);
	   g.drawString("x",HREF+255,VREF);
	   g.drawString("y=2sinx",HREF,VREF-165);       //建坐标

	   int rate = 50,HBound,VBound;
	   double hBound,vBound;
       double a= -5.0,b=5.0;
	   int m = (int)(rate * a),n = (int)(rate*b);
	  
	   g.setColor(Color.red);
	   for(HBound=m; HBound<=n;HBound++)
		{
		   hBound = (double)HBound/rate;                   
		   vBound = 2*Math.sin(hBound);
		   VBound = (int)(vBound*rate);
		   g.drawLine(HBound+HREF,-VBound+VREF,HBound+HREF,-VBound+VREF);        

		}  //画函数 y=2sinx
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -