// Estimatin of Roots by Exner Enterprises, C.2000 // Author: Nicholas Exner // http://www.uiuc.edu/ph/www/exner // Free to redistribute/publish/modify pending that // the above comments are retained. import java.applet.*; import java.awt.*; import java.awt.event.*; import java.net.URL; import java.util.*; public class Integration2 extends java.applet.Applet { Panel controlA, controlB; String S_formula; TextField inputA, inputB, inputC, inputD; TextArea ta; StringBuffer buf; Choice d; GraphFunction graph; public void init(){ ta= new TextArea("Ready...",15,40);; buf= new StringBuffer(); graph = new GraphFunction(); // Layout Stuff controlA = new Panel(); controlB = new Panel(); controlA.setLayout(new GridLayout(5,2)); controlB.setLayout(new GridLayout(2,1)); this.setLayout(new BorderLayout()); controlA.setBackground(new Color(205,205,205)); setBackground(new Color(205,205,205)); inputA = new TextField(3); inputB = new TextField(3); inputC = new TextField(10); inputD = new TextField(3); d = new Choice(); d.addItem("All Methods"); d.addItem("Rectangular"); d.addItem("Trapezoidal"); d.addItem("Simpson's"); d.addItem("Romberg"); controlA.add(new Label("Left Endpoint: ")); controlA.add(inputA); controlA.add(new Label("Right Endpoint: ")); controlA.add(inputB); controlA.add(new Label("Formula: ")); controlA.add(inputC); controlA.add(new Label("# of Partitions:")); controlA.add(inputD); controlA.add(d); controlA.add(new Button("Calculate")); inputA.setText("0"); inputB.setText("1"); inputC.setText("y=x^3"); inputD.setText("10"); controlB.add(controlA); controlB.add(ta); add("West",graph); add("Center",controlB); repaint(); } public void paint(Graphics g) { // Paint Nothing } public void processButton() { buf = new StringBuffer(); //Clean off buffer buf.append("Method name\t\t\tEstimated Integral\n"); double aa = 0.0,bb = 0.0, dd=0.0; String spacedString=""; try { aa = Double.valueOf(inputA.getText()).doubleValue(); bb = Double.valueOf(inputB.getText()).doubleValue(); dd = Double.valueOf(inputD.getText()).doubleValue(); spacedString = inputC.getText(); } catch (NumberFormatException e) { } S_formula = ""; for (int i=0;i < spacedString.length();i++) { if (spacedString.charAt(i) != ' ') S_formula += spacedString.charAt(i); } /////////// graph.reset(); for (int i=0;i<40;i++) { double step = Math.abs(bb-aa)/40; graph.addValue(aa+step*i,f(aa+step*i)); System.out.println("1: "+f(1)); System.out.println("-1: "+f(-1)); System.out.println("-4: "+f(-4)); } graph.findBounds(); graph.rescale(); /////////// String key = d.getSelectedItem(); if (key.equals("All Methods")) { rectangular(aa,bb,dd); trapezoidal(aa,bb,dd); simpsons(aa,bb,dd); romberg(aa,bb); } if (key.equals("Rectangular")) { rectangular(aa,bb,dd); } if (key.equals("Trapezoidal")) { trapezoidal(aa,bb,dd); } if (key.equals("Simpson's")) { simpsons(aa,bb,dd); } if (key.equals("Romberg")) { romberg(aa,bb); } System.out.println("Button Pressed"); ta.setText(buf.toString()); } //End Processbutton public boolean action (Event evt, Object arg) { if (evt.target instanceof Button) { processButton(); } return true; } public void rectangular(double a,double b, double n) { double sum1 = 0.0, sum2=0.0, e=(b-a)/n, x=a; for(int i=0;i= '0' && (s.charAt(i)<= '9')) { return true; } else if (s.charAt(i) == '.') return true; else return false; } } // End class Integration ///////////////////////////////////////// class GraphFunction extends Canvas { Dimension size; int width=225, height=225, max=40, index=0, leftInterval=0, rightInterval=0; double leftPt = 0.0, rightPt = 0.0, upPt = 0.0, downPt = 0.0; double x[] = new double [max]; double y[] = new double [max]; boolean showGraph; public GraphFunction() { size = new Dimension (width,height); reset(); } public void paint(Graphics g) { g.setColor(Color.blue); g.drawLine(0,height/2,width,height/2); // X grid lines int unit=20; for (int i=0;i rightPt) rightPt=x[i]; if (y[i] < upPt) upPt=y[i]; if (y[i] > downPt) downPt=y[i]; } } // End findBounds() public void rescale() { double scaleFactor, scaleFactorY; scaleFactor = width/Math.abs(rightPt-leftPt); scaleFactorY = -height/Math.abs(downPt - upPt); for (int i=0;i< max;i++) { x[i]=x[i]-leftPt; x[i]=x[i]*scaleFactor; //+width/2; y[i]=y[i]*scaleFactorY +height/2; } System.out.println("scaleX= "+scaleFactor+" scaleY= "+scaleFactorY); showGraph=true; repaint(); } public void addValue(double x1, double y1) { if (index < max) { x[index]=x1; y[index]=y1; index++; } } // End addValue() public void reset() { for (int i=0;i< max;i++) { x[i]=0; y[i]=0; } leftInterval=0; rightInterval=0; index=0; showGraph=false; } }