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

📄 qiugen.java

📁 计算方法课
💻 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 + -