📄
字号:
/**
* @(#)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 + -