📄 chazhi.java
字号:
import java.awt.*;import java.applet.*;import java.awt.event.*;import java.util.Random;import java.lang.String;import java.io.*;public class chazhi extends Applet implements ActionListener{ static int N=7; int minx, maxx; int[] x, y; Random ran = new Random(); Button a, b, c, d, e; boolean choosea, chooseb, choosec, choosed, choosee; public void init() { x = new int[N + 1]; y = new int[N + 1]; a = new Button("随机产生点"); b = new Button("拉格朗日"); c = new Button("牛顿"); d = new Button("样条"); e = new Button("退出"); add(a);add(b);add(c);add(d);add(e); a.addActionListener(this); b.addActionListener(this); c.addActionListener(this); d.addActionListener(this); e.addActionListener(this); } public void actionPerformed(ActionEvent ae) { String str = ae.getActionCommand(); if (str.equals("随机产生点")) { choosea = true;chooseb=false;choosec=false;choosed=false;choosee=false; for (int i = 0; i <= N; i++) { x[i] = ran.nextInt(60) + i * 50 + 60; y[i] = ran.nextInt(50)+ 200-10*i; } minx = x[0]; maxx = x[N]; repaint(); } if (str.equals("拉格朗日")) { chooseb = true; repaint(); } if (str.equals("牛顿")) { choosec = true; repaint(); } if(str.equals("样条")){ choosed=true; repaint(); } if(str.equals("退出")){ choosee=true; repaint(); } } public void paint(Graphics g) { //绘图 g.drawLine(30, 350, 30, 30); g.drawLine(30, 350, 500, 350); g.drawLine(30, 30, 34, 39); g.drawLine(30, 30, 26, 39); g.drawLine(500, 350, 495, 345); g.drawLine(500, 350, 495, 355); g.drawString("x", 505, 360); g.drawString("y", 20, 32); g.drawString("0", 20, 355); g.setColor(Color.blue); g.drawLine(400, 60, 423, 60); g.drawString("lagrange", 425, 65); g.setColor(Color.red); g.drawLine(400, 80, 423, 80); g.drawString("newton", 425, 85); g.setColor(Color.green); g.drawLine(400, 100, 423, 100); g.drawString("spline", 425, 105); if (choosea) { for (int i = 0; i <= N; i++) { g.setColor(Color.black); g.drawOval(x[i] - 2, y[i] - 2, 4, 4); //像素较正 g.fillOval(x[i] - 2, y[i] - 2, 4, 4); Point p=new Point(x[i]-30,350-y[i]); //String s=new String(); //坐标 //s=p.toString(); //g.setColor(Color.lightGray); //g.drawString(s,x[i]+4,y[i]+4 ); } } if (chooseb) { g.setColor(Color.blue); float L, LI; int i, j, k; int m = x[0]; int n = y[0]; for (k = minx; k <= maxx; k++) { L = 0; for (i = 0; i <= N; i++) { //拉格朗日插值函数L=... LI = 1; for (j = 0; j <= N; j++) { if ( (j != i)) LI = LI * (k - x[j]) / (x[i] - x[j]); } L = L + LI * y[i]; } g.drawLine(m, n, k, (int) L); m = k; n = (int) L; } } if (choosec) { g.setColor(Color.red); float[] f = new float[N + 1]; float NewTon;float t; int k; int m = x[0]; int n = y[0]; for (k = minx; k <= maxx; k++) { for (int r = 0; r <= N; r++) { f[r] = y[r]; } NewTon =y[0]; t = 1; for (int j = 1; j <= N; j++) { t = t * (k - x[j - 1]); for (int i = 0; i <= N - j; i++) { f[i] = (f[i + 1] - f[i]) / (x[j + i] - x[i]); } NewTon = NewTon + f[0] * t; } g.drawLine(m, n, k, (int) NewTon); m = k; n = (int) NewTon; } } if(choosed) { g.setColor(Color.green); float h[]=new float[N+1];float a[]=new float[N+1]; float c[]=new float[N+1];float d[]=new float[N+1]; float b[]=new float[N+1];float s2[]=new float[N+1]; float s1,s3; for(int k=0;k<N;k++) h[k]=x[k+1]-x[k]; a[1]=2*(h[0]+h[1]); for(int k=2;k<N;k++) a[k]=2*(h[k-1]+h[k])-(h[k-1]*h[k-1])/a[k-1]; for(int k=1;k<=N;k++) c[k]=(y[k]-y[k-1])/h[k-1]; for(int k=1;k<N;k++) d[k]=6*(c[k+1]-c[k]); b[1]=d[1]; for(int k=2;k<N;k++) b[k]=d[k]-b[k-1]*h[k-1]/a[k-1]; s2[N-1]=b[N-1]/a[N-1]; for(int k=N-2;k>0;k--) s2[k]=(b[k]-h[k]*s2[k+1])/a[k]; s2[0]=0;s2[N]=0; for (int k =0; k <= N; k++){ int m=x[k]; int n=y[k]; for(int x1=x[k];x1<x[k+1];x1++){ s1=c[k+1]-s2[k+1]*h[k]/6-s2[k]*h[k]/3; s3=y[k]+s1*(x1-x[k])+s2[k]*(x1-x[k])*(x1-x[k])/2 +(s2[k+1]-s2[k])*(x1-x[k])*(x1-x[k])*(x1-x[k])/(6*h[k]); g.drawLine(m, n, x1, (int) s3); m = x1; n = (int)s3; } } } /*(choosee){ exit(0); }*/}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -