📄 jifen.java
字号:
import java.awt.*;import java.applet.*;import java.awt.event.*;import java.lang.*;public class jifen extends Applet implements ActionListener{ double a=0.0001,b=6,error=0.0001; Button A, B,C; boolean choosea, chooseb,choosec; public void init() { A = new Button("龙贝格算法"); B = new Button("变步长梯形算法"); C=new Button("f(x)曲线"); add(C);add(A);add(B); A.addActionListener(this); B.addActionListener(this); C.addActionListener(this); } public void actionPerformed(ActionEvent ae) { String str = ae.getActionCommand(); if (str.equals("龙贝格算法")) { choosea = true;chooseb=false;choosec = false; repaint(); } if(str.equals("变步长梯形算法")){ chooseb=true;choosea = false;choosec = false; repaint(); } if(str.equals("f(x)曲线")){ choosec = true;choosea=false;chooseb=false; repaint(); } } public void paint(Graphics g) { //绘图 g.drawLine(30, 350, 30, 30); g.drawLine(30, 250, 400, 250); g.drawLine(30, 30, 34, 39); g.drawLine(30, 30, 26, 39); g.drawLine(400, 250, 395, 245); g.drawLine(400, 250, 395, 255); for(int i=1;i<7;i++) g.drawLine(30+i*50,250,30+i*50,245);//比例为1:50 g.drawString("1",78,265);g.drawString("2",128,265); g.drawString("3",178,265);g.drawString("4",228,265); g.drawString("5",278,265);g.drawString("6",328,265); g.drawLine(30,300,35,300);g.drawString("-0.5",8,305); g.drawLine(30,200,35,200);g.drawString("0.5",10,205); g.drawLine(30,150,35,150);g.drawString("1",20,155); g.drawString("x", 405, 260); g.drawString("y", 20, 32); g.drawString("0", 20, 255); g.drawString("a=0,b=6,误差为:0.0001",50,380); g.setColor(Color.green); g.drawLine(400, 40, 423, 40); g.drawString("f(x)曲线", 425, 45); g.setColor(Color.blue); g.drawLine(400, 60, 423, 60); g.drawString("龙贝格曲线", 425, 65); g.setColor(Color.red); g.drawLine(400, 80, 423, 80); g.drawString("变步长梯形曲线", 425, 85); if(choosec){ g.setColor(Color.green); g.drawString("y=sin(x)/x",150,200); int x=30,y=150;double a=0.02; for(int i=31;i<=330;i++){ double j=f(a)*100; g.drawLine(x,y,i,250-(int)j); try{ Thread.sleep(5); }catch(InterruptedException e){} x=i;y=250-(int)j; a+=0.02; } } if (choosea) { g.setColor(Color.blue); int x=30,y=150; double j,a=0.02; for(int i=31;i<=330;i++){ j=f(a)*100; g.drawLine(x,y,i,250-(int)j); try{ Thread.sleep(5); }catch(InterruptedException e){} if((boolean)(i%20==0)) g.drawLine(x,y,x,250); x=i;y=250-(int)j; a+=0.02; } g.drawString("龙贝格算法值为:",50,350); String T=new String(); g.drawString(T.valueOf(longbg()),150,350); } if (chooseb) { g.setColor(Color.red); int x=30,y=150; double j,a=0.02; for(int i=31;i<=330;i++){ j=f(a)*100; g.drawLine(x,y,i,250-(int)j); try{ Thread.sleep(5); }catch(InterruptedException e){} if((boolean)(i%10==0)) g.drawLine(x,y,x,250); x=i;y=250-(int)j; a+=0.02; } g.drawString("变步长算法值为:",300,350); String T=new String(); g.drawString(T.valueOf(bianbc()),400,350); } } public double f(double x){ return Math.sin(x)/x; } public double longbg(){//龙贝格算法 double h, k, s, x, s1 = 0.0, s2, c1 = 0.0, c2, T1, T2, R1 = 0.0, R2; h = b - a; T1 = (f(a) + f(b)) * h / 2; k = 1; W1:while (true) { s = 0; x = a + h / 2; do { s = s + f(x); x = x + h; } while (x < b); T2 = (T1 + h * s) / 2; s2 = T2 + (T2 - T1) / 3; if (k == 1) { k = k + 1; h = h / 2; T1 = T2; s1 = s2; continue W1; } else c2 = s2 + (s2 - s1) / 15; if (k == 2) { c1 = c2; k = k + 1; h = h / 2; T1 = T2; s1 = s2; continue W1; } else R2 = c2 + (c2 - c1) / 63; if (k == 3) { R1 = R2; c1 = c2; k = k + 1; h = h / 2; T1 = T2; s1 = s2; continue W1; } else if (Math.abs(R2 - R1) >= error) { R1 = R2; c1 = c2; k = k + 1; h = h / 2; T1 = T2; s1 = s2; continue W1; } else break W1; } return(R2); } public double bianbc(){//变步长算法 double h,T1,T2,S,x; h=b-a; T1=((Math.sin(a))/a+(Math.sin(b))/b)*h/2; W1:while(true){ S=0; x=a+h/2; do{ S = S + Math.sin(x)/x;; x = x + h; }while(x<b); T2=(T1+h*S)/2; if(Math.abs(T2-T1)>=error){ h = h / 2; T1 = T2; } else break W1; } return(T2); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -