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

📄

📁 用牛顿插值多项式形式实现分段二次多项式插值
💻
字号:
/**
 * @(#)work2.java
 *
 * work2 application 分段二次多项式插值法
 *
 * @author 503所 马灵霞
 * @version 1.00 2008/12/4
 */
import java.awt.Graphics2D;
import java.awt.geom.Line2D;
import java.awt.Graphics;
import java.awt.Container;
import javax.swing.JFrame;
import java.awt.Toolkit;
import java.awt.Image;
import java.awt.Dimension;
import javax.swing.JPanel;
class Method{
	static double linear2(double x){
		double vectorX[]={0,4.74,9.50,19.00,38.00,57.00,76.00,95.00,114.00,133.00,152.00,171.00,190.00};
   		double vectorY[]={0.00,5.32,8.10,11.97,16.15,17.10,16.34,14.63,12.16,9.69,7.03,3.99,0.00};
   		double chashang1[]=new double[11];
   		double chashang2[]=new double[11];
   		for(int i=0;i<=10;i++){
   			chashang1[i]=(vectorY[i+1]-vectorY[i])/(vectorX[i+1]-vectorX[i]);
   			chashang2[i]=(vectorY[i+2]-vectorY[i]-chashang1[i]*(vectorX[i+2]-vectorX[i]))/(vectorX[i+2]-vectorX[i])/(vectorX[i+2]-vectorX[i+1]);
   		}
		if(x>=vectorX[0]&&x<(vectorX[1]+vectorX[2])/2){
			return vectorY[0]+chashang1[0]*(x-vectorX[0])+chashang2[0]*(x-vectorX[0])*(x-vectorX[1]);
		}
		else if(x>=(vectorX[1]+vectorX[2])/2&&x<(vectorX[2]+vectorX[3])/2){
			return vectorY[1]+chashang1[1]*(x-vectorX[1])+chashang2[1]*(x-vectorX[1])*(x-vectorX[2]);
		}
		else if(x>=(vectorX[2]+vectorX[3])/2&&x<(vectorX[3]+vectorX[4])/2){
			return vectorY[2]+chashang1[2]*(x-vectorX[2])+chashang2[2]*(x-vectorX[2])*(x-vectorX[3]);
		}
		else if(x>=(vectorX[3]+vectorX[4])/2&&x<(vectorX[4]+vectorX[5])/2){
			return vectorY[3]+chashang1[3]*(x-vectorX[3])+chashang2[3]*(x-vectorX[3])*(x-vectorX[4]);
		}
		else if(x>=(vectorX[4]+vectorX[5])/2&&x<(vectorX[5]+vectorX[6])/2){
			return vectorY[4]+chashang1[4]*(x-vectorX[4])+chashang2[4]*(x-vectorX[4])*(x-vectorX[5]);
		}
		else if(x>=(vectorX[5]+vectorX[6])/2&&x<(vectorX[6]+vectorX[7])/2){
			return vectorY[5]+chashang1[5]*(x-vectorX[5])+chashang2[5]*(x-vectorX[5])*(x-vectorX[6]);
		}
		else if(x>=(vectorX[6]+vectorX[7])/2&&x<(vectorX[7]+vectorX[8])/2){
			return vectorY[6]+chashang1[6]*(x-vectorX[6])+chashang2[6]*(x-vectorX[6])*(x-vectorX[7]);
		}
		else if(x>=(vectorX[7]+vectorX[8])/2&&x<(vectorX[8]+vectorX[9])/2){
			return vectorY[7]+chashang1[7]*(x-vectorX[7])+chashang2[7]*(x-vectorX[7])*(x-vectorX[8]);
		}
		else if(x>=(vectorX[8]+vectorX[9])/2&&x<(vectorX[9]+vectorX[10])/2){
			return vectorY[8]+chashang1[8]*(x-vectorX[8])+chashang2[8]*(x-vectorX[8])*(x-vectorX[9]);
		}
		else if(x>=(vectorX[9]+vectorX[10])/2&&x<(vectorX[10]+vectorX[11])/2){
			return vectorY[9]+chashang1[9]*(x-vectorX[9])+chashang2[9]*(x-vectorX[9])*(x-vectorX[10]);
		}
		else if(x>=(vectorX[10]+vectorX[11])/2&&x<=vectorX[12]){
			return vectorY[10]+chashang1[10]*(x-vectorX[10])+chashang2[10]*(x-vectorX[10])*(x-vectorX[11]);
		}
		else{ 
			return 0;
		}
	}
} 
class BlankFrame extends JFrame{
	private static final int WIDTH=1200;
	private static final int HEIGHT=200;
	public BlankFrame(){
		Container con=getContentPane();
		setSize(WIDTH,HEIGHT);
		setTitle("分段二次多项式插值");
		setLocation(10,10);
		StringPanel panel=new StringPanel();
		con.add(panel);
	}
}
class StringPanel extends JPanel{
	public static final double WIDTH=1200;
	public static final double HEIGHT=200;
	public void paintComponent(Graphics g){
		super.paintComponent(g);
		Graphics2D g2=(Graphics2D)g;
		double vectorX[]={0,4.74,9.50,19.00,38.00,57.00,76.00,95.00,114.00,133.00,152.00,171.00,190.00};
    	double vectorF[]={0.00,5.32,8.10,11.97,16.15,17.10,16.34,14.63,12.16,9.69,7.03,3.99,0.00};
		Line2D.Double lineX=new Line2D.Double(0,100,1000.00,100.00);
		g2.draw(lineX);
		g2.drawString("x",1000,90);
		Line2D.Double lineY=new Line2D.Double(0,100,0,0);
		g2.draw(lineY);
		g2.drawString("y",10,10);
    	for(int i=0;i<=11;i++){
    		line=new Line2D.Double(vectorX[i]*5,100-vectorF[i]*5,vectorX[i+1]*5,100-vectorF[i+1]*5);
    		g2.drawString("。",(float)vectorX[i]*5,100-(float)vectorF[i]*5);
    	}
    	double i=0;
    	do{
    		g2.drawString(".",(float)i*5,100-(float)Method.linear2(i)*5);
    		i=i+0.2;
    	}while(i<=190);
	}
}
public class work2 {
     public static void main(String[] args) {
    	System.out.println("用分段二次多项式插值法细化后的全部数据为:");
    	for(int i=0;i<=190;i++){
    		System.out.println("坐标x为	"+i+"	时,y为:	"+Method.linear2(i));
    	}
    	BlankFrame frame=new BlankFrame();
    	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	frame.show();
    }
}

⌨️ 快捷键说明

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