1 import java.awt.*; 2 import java.awt.event.*; 3 import JSci.awt.*; 4 import JSci.maths.*; 5 import JSci.maths.polynomials.RealPolynomial; 6 7 13 public final class CurveFitter extends Frame { 14 private Label fnLabel = new Label("P(x) = ?",Label.CENTER); 15 private LineTrace graph = new LineTrace(-10.0f,10.0f,-10.0f,10.0f); 16 private TextField polyDegreeField = new TextField("4"); 17 private Button fitButton = new Button("Fit"); 18 private Button clearButton = new Button("Clear"); 19 20 public static void main(String arg[]) { 21 new CurveFitter(); 22 } 23 public CurveFitter() { 24 super("Curve Fitter"); 25 addWindowListener(new WindowAdapter() { 26 public void windowClosing(WindowEvent evt) { 27 dispose(); 28 System.exit(0); 29 } 30 }); 31 fitButton.addActionListener(new ActionListener() { 32 public void actionPerformed(ActionEvent evt) { 33 fitCurve(); 34 } 35 }); 36 clearButton.addActionListener(new ActionListener() { 37 public void actionPerformed(ActionEvent evt) { 38 graph.clear(); 39 } 40 }); 41 add(fnLabel,"North"); 42 add(graph,"Center"); 43 Panel buttonPanel=new Panel(); 44 buttonPanel.add(new Label("Polynomial degree:")); 45 buttonPanel.add(polyDegreeField); 46 buttonPanel.add(fitButton); 47 buttonPanel.add(clearButton); 48 add(buttonPanel,"South"); 49 setSize(500,400); 50 setVisible(true); 51 } 52 private void fitCurve() { 53 Graph2DModel model=graph.getModel(); 54 model.firstSeries(); 55 double data[][]=new double[2][model.seriesLength()]; 56 for(int i=0;i<data[0].length;i++) { 57 data[0][i]=model.getXCoord(i); 58 data[1][i]=model.getYCoord(i); 59 } 60 int degree = Integer.parseInt(polyDegreeField.getText()); 61 RealPolynomial poly = LinearMath.leastSquaresFit(degree, data); 62 fnLabel.setText(poly.toString()); 63 } 64 } 65 66 | Popular Tags |