📄 qiugen.java
字号:
import java.awt.*;import java.applet.*;import java.awt.event.*;import java.lang.*;public class qiugen extends Applet implements ActionListener{ Button A, B, C, D; boolean choosea, chooseb, choosec, choosed; double error=0.001; public void init() { A = new Button("f(x)=x-2sinx"); B = new Button("二分法"); C = new Button("牛顿法"); D = new Button("弦截法"); add(A); add(B); add(C); add(D); A.addActionListener(this); B.addActionListener(this); C.addActionListener(this); D.addActionListener(this); } public void actionPerformed(ActionEvent ae) { String str = ae.getActionCommand(); if (str.equals("f(x)=x-2sinx")) { choosea = true; chooseb=false;choosec=false;choosed=false; repaint(); } if (str.equals("二分法")) { chooseb = true; choosec=false;choosed=false; repaint(); } if (str.equals("牛顿法")) { choosec = true; chooseb=false;choosed=false; repaint(); } if (str.equals("弦截法")) { choosed = true; chooseb=false;choosec=false; repaint(); } } public double f(double x){ return x-2*Math.sin(x); } public double fdao(double x){ return 1-2*Math.cos(x); } public void paint(Graphics g) { //绘图 g.drawLine(50, 350, 700, 350); g.drawLine(50, 30, 50, 550); g.drawLine(50, 30, 54, 39); g.drawLine(50, 30, 46, 39); g.drawLine(700, 350, 695, 345); g.drawLine(700, 350, 695, 355); g.drawString("x", 705, 360); g.drawString("y", 40, 32); g.drawString("0", 40, 355); g.drawLine(50, 420, 55, 420);//y轴1:140 g.drawString("-0.5", 20, 425); g.drawLine(50, 490, 55, 490); g.drawString("-1", 30, 495); g.drawLine(50, 280, 55, 280); g.drawString("0.5", 30, 285); g.drawLine(50, 210, 55, 210); g.drawString("1", 40, 215); g.drawLine(50, 140, 55, 140); g.drawString("1.5", 30, 145); g.drawLine(50, 70, 55, 70); g.drawString("2", 40, 75); g.drawLine(50 + 200, 350, 50 + 200, 345); g.drawString("1", 248, 365); //x轴比例为1:200 g.drawLine(50 + 400, 350, 50 + 400, 345); g.drawString("2", 448, 365); g.drawLine(50 + 600, 350, 50 + 600, 345);g.drawString("3", 648, 365); g.drawLine(500, 40, 523, 40); g.drawString("原方程曲线", 525, 45); g.setColor(Color.blue); g.drawLine(500, 60, 523, 60); g.drawString("二分法", 525, 65); g.setColor(Color.red); g.drawLine(500, 80, 523, 80); g.drawString("牛顿法", 525, 85); g.setColor(Color.green); g.drawLine(500, 100, 523, 100); g.drawString("弦截法", 525, 105); if (choosea) { g.setColor(Color.black); int m = 50, n = 350; double a = 0.005, j; for (int k = 50; k < 700; k++) { j = f(a) * 140; g.drawLine(m, n, k, 350 - (int) j); m = k; n = 350 - (int) j; a += 0.005; } } if (chooseb) { g.setColor(Color.blue); double a=1,b=2,y0,x=0.0,y=0.0,i,j; y0=a-2*Math.sin(a); while(b-a>=error){ x=(a+b)/2;y=f(x);i=50+200*x;j=140*y; try{ Thread.sleep(200);//延迟 }catch(InterruptedException e){} g.drawLine((int)i,350,(int)i,350-(int)j); if(y*y0>0) a=x; else b=x; } String T=new String(); T="x="+T.valueOf(x); g.drawString(T,300,500); T="f(x)="+T.valueOf(f(x)); g.drawString(T,500,500); } if(choosec){ g.setColor(Color.red); int N=20,k,p=0; double x0=2.8,x1; String T=new String();W1: for(k=0;k<N;k++){ if(fdao(x0)==0){ g.drawString("奇异方程",300, 500); break W1; } else{ x1 = x0 - f(x0) / fdao(x0); int i=(int)(350-140*f(x0)); while(i<345){ try { Thread.sleep(100); //延迟 } catch (InterruptedException e) {} double m=(50 + x0 * 200); g.drawLine( (int) m, (int)i, (int) m,(int) (i+5)); i+=10; } if(p==0){ g.drawLine( (int) (50 + x0 * 200), 350, (int) (50 + x0 * 200), 345); p=1; } g.drawLine( (int) (50 + x0 * 200), (int) (350 - 140 * f(x0)),(int) (50 + x1 * 200), 350); if(Math.abs(x1-x0)>=error){ x0 = x1; } else{ T="x1="+T.valueOf(x1); g.drawString(T,300,500); T="f(x1)="+T.valueOf(f(x1)); g.drawString(T,500,500);break W1; } } } if(k==20){ g.drawString("迭代失败!(N=20)",300,500); } } if(choosed){ g.setColor(Color.green); String T=new String(); int N=20,p=0,k; double x0=2.8,x1=2.5,x2; W1: for(k=1;k<=N;k++){ x2=x1-(f(x1)*(x1-x0))/(f(x1)-f(x0)); int i=(int)(350-f(x0)*140); while(i<345){ try { Thread.sleep(100); //延迟 } catch (InterruptedException e) {} g.drawLine( (int) (50 + x0 * 200), (int)i, (int) (50 + x0 * 200),(int) (i+5)); i+=10; } if(p==0){ g.drawLine( (int) (50 + x0 * 200), 350, (int) (50 + x0 * 200), 345); p-=0.5; } g.drawLine( (int) (50 + x0 * 200), (int) (350 - 140 * f(x0)), (int) (50 + x1* 200), (int)(350-f(x1)*140)); g.drawLine( (int) (50 + x1 * 200), (int) (350 - 140 * f(x1)), (int) (50 + x2* 200), 350); if(Math.abs(x2-x1)>=error){ x0=x1;x1=x2; } else{ T="x2="+T.valueOf(x2); g.drawString(T,300,500); T="f(x2)="+T.valueOf(f(x2)); g.drawString(T,500,500); break W1; } } if(k==20){ g.drawString("sytgsdif",300,500); } } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -