chap25

8
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package kapitulo25; /** * * @author Romaine Cate Pineda */ public class kap25 extends javax.swing.JFrame { /** * Creates new form kap25 */ public kap25() { initComponents(); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); xo = new javax.swing.JTextField(); jLabel4 = new javax.swing.JLabel(); xi = new javax.swing.JTextField(); jLabel5 = new javax.swing.JLabel(); hi = new javax.swing.JTextField(); calc = new javax.swing.JButton(); jLabel6 = new javax.swing.JLabel(); jLabel7 = new javax.swing.JLabel(); xin = new javax.swing.JTextField(); jLabel8 = new javax.swing.JLabel(); yi = new javax.swing.JTextField(); jScrollPane1 = new javax.swing.JScrollPane(); val_heun = new javax.swing.JTextArea(); jScrollPane2 = new javax.swing.JScrollPane(); val_mp = new javax.swing.JTextArea(); jScrollPane3 = new javax.swing.JScrollPane(); val_ral = new javax.swing.JTextArea(); jLabel9 = new javax.swing.JLabel(); jLabel10 = new javax.swing.JLabel(); jLabel11 = new javax.swing.JLabel(); jLabel12 = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jLabel1.setText("Runge - Kutta Methods"); jLabel2.setText("Equation: -2x^3 + 12x^2 - 20x + 8.5");

Upload: jovan-bucol

Post on 10-Jul-2016

213 views

Category:

Documents


1 download

TRANSCRIPT

/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */package kapitulo25;

/** * * @author Romaine Cate Pineda */public class kap25 extends javax.swing.JFrame {

/** * Creates new form kap25 */ public kap25() { initComponents(); }

/** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() {

jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); xo = new javax.swing.JTextField(); jLabel4 = new javax.swing.JLabel(); xi = new javax.swing.JTextField(); jLabel5 = new javax.swing.JLabel(); hi = new javax.swing.JTextField(); calc = new javax.swing.JButton(); jLabel6 = new javax.swing.JLabel(); jLabel7 = new javax.swing.JLabel(); xin = new javax.swing.JTextField(); jLabel8 = new javax.swing.JLabel(); yi = new javax.swing.JTextField(); jScrollPane1 = new javax.swing.JScrollPane(); val_heun = new javax.swing.JTextArea(); jScrollPane2 = new javax.swing.JScrollPane(); val_mp = new javax.swing.JTextArea(); jScrollPane3 = new javax.swing.JScrollPane(); val_ral = new javax.swing.JTextArea(); jLabel9 = new javax.swing.JLabel(); jLabel10 = new javax.swing.JLabel(); jLabel11 = new javax.swing.JLabel(); jLabel12 = new javax.swing.JLabel();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jLabel1.setText("Runge - Kutta Methods");

jLabel2.setText("Equation: -2x^3 + 12x^2 - 20x + 8.5");

jLabel3.setText("from x = ");

jLabel4.setText("to x = ");

jLabel5.setText("Step size = ");

calc.setText("Calculate"); calc.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { calcActionPerformed(evt); } });

jLabel6.setText("Initial Condition");

jLabel7.setText("x = ");

jLabel8.setText("y = ");

val_heun.setColumns(20); val_heun.setRows(5); jScrollPane1.setViewportView(val_heun);

val_mp.setColumns(20); val_mp.setRows(5); jScrollPane2.setViewportView(val_mp);

val_ral.setColumns(20); val_ral.setRows(5); jScrollPane3.setViewportView(val_ral);

jLabel9.setText("Heun Method");

jLabel10.setText("Midpoint Method");

jLabel11.setText("Ralston's Method");

jLabel12.setText("Exact Solution: -0.5x^4 + 4x^3 - 10x^2 + 8.5x + 1");

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addGroup(layout.createSequentialGroup() .addComponent(jLabel5) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(hi)) .addGroup(layout.createSequentialGroup() .addComponent(jLabel3)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(xo, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSequentialGroup() .addGap(23, 23, 23) .addComponent(jLabel7) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(xin))) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel8) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(yi, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSequentialGroup() .addGap(22, 22, 22) .addComponent(jLabel4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(xi, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel2) .addComponent(jLabel6) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(layout.createSequentialGroup() .addComponent(calc) .addGap(57, 57, 57)) .addGroup(layout.createSequentialGroup() .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 179, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(31, 31, 31) .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 176, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(32, 32, 32))) .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 180, Short.MAX_VALUE))) .addContainerGap()) .addGroup(layout.createSequentialGroup() .addGap(61, 61, 61) .addComponent(jLabel9) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel10) .addGap(138, 138, 138) .addComponent(jLabel11) .addGap(48, 48, 48)))) .addGroup(layout.createSequentialGroup()

.addGap(230, 230, 230) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(10, 10, 10) .addComponent(jLabel12)) .addComponent(jLabel1)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel2) .addComponent(jLabel12)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel3) .addComponent(xo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel4) .addComponent(xi, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel5) .addComponent(hi, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel6) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel7) .addComponent(xin, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel8) .addComponent(yi, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(calc)) .addGap(20, 20, 20) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel9) .addComponent(jLabel10) .addComponent(jLabel11)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRE

LATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 178, Short.MAX_VALUE) .addComponent(jScrollPane2) .addComponent(jScrollPane3)) .addContainerGap()) );

pack(); }// </editor-fold>

private void calcActionPerformed(java.awt.event.ActionEvent evt) { double x1 = Double.parseDouble(xo.getText()); double x2 = Double.parseDouble(xi.getText()); double h = Double.parseDouble(hi.getText()); double x = Double.parseDouble(xin.getText()); double y = Double.parseDouble(yi.getText()); int i = 1; int j = 1; int k = 1; double k1 = 0; double k2 = 0; double l1 = 0; double l2 = 0; double m1 = 0; double m2 = 0; double err1 = 0; double err2 = 0; double err3 = 0; double eqn1 = 0; double eqn2 = 0; double eqn3 = 0; double ans1 = 0; double ans2 = 0; double ans3 = 0; double a = x; double b = a; double c = a; double d = y; double e = d; double f = d; double r = x1; double s = r; double t = r; //Heun Method while (a < x2) { k1 = -2*Math.pow(r,3) + 12*Math.pow(r,2) - 20*r + 8.5; k2 = -2*Math.pow(r + h,3) + 12*Math.pow(r + h,2) - 20*(r + h) + 8.5; eqn1 = -0.5*Math.pow(r + h,4) + 4*Math.pow(r + h,3) - 10*Math.pow(r + h,2) + 8.5*(r + h) + 1; ans1 = d + (0.5*k1 + 0.5*k2)*h; err1 = Math.abs(((eqn1-ans1)/eqn1)*100);

val_heun.append("Step: " + i + "\r\n" + "\r\n"); val_heun.append("k1 = f(" + r + ", " + d + ") = " + k1 + "\r\n"); val_heun.append("k2 = f(" + (r + h) + ", " + (d + k1*h) + ") = " + k2 + "\r\n"); val_heun.append("y(" + (r + h) + ") = " + ans1 + "\r\n"); val_heun.append("True value = " + eqn1 + "\r\n"); val_heun.append("Et = " + err1 + " %" + "\r\n" + "\r\n"); a = a + h; i++; r = r + h; d = ans1; } //Midpoint Method while (b < x2) { l1 = -2*Math.pow(s,3) + 12*Math.pow(s,2) - 20*s + 8.5; l2 = -2*Math.pow(s + (0.5*h),3) + 12*Math.pow(s + (0.5*h),2) - 20*(s + (0.5*h)) + 8.5; eqn2 = -0.5*Math.pow(s + h,4) + 4*Math.pow(s + h,3) - 10*Math.pow(s + h,2) + 8.5*(s + h) + 1; ans2 = e + l2*h; err2 = Math.abs(((eqn2-ans2)/eqn2)*100); val_mp.append("Step: " + j + "\r\n" + "\r\n"); val_mp.append("k1 = f(" + s + ", " + e + ") = " + l1 + "\r\n"); val_mp.append("k2 = f(" + (x1+0.5*h) + ", " + (y + 0.5*(k1*h)) + ") = " + k2 + "\r\n" ); val_mp.append("y(" + (s + h) + ") = " + ans2 + "\r\n"); val_mp.append("True value = " + eqn2 + "\r\n"); val_mp.append("Et = " + err2 + "\r\n" + "\r\n"); b = b + h; e = ans2; s = s + h; j++; } //Ralston's Method while (c < x2) { m1 = -2*Math.pow(t,3) + 12*Math.pow(t,2) - 20*t + 8.5; m2 = -2*Math.pow(t + 0.75*h,3) + 12*Math.pow(t + 0.75*h,2) - 20*(t + 0.75*h) + 8.5; eqn3 = -0.5*Math.pow(t + h,4) + 4*Math.pow(t + h,3) - 10*Math.pow(t + h,2) + 8.5*(t + h) + 1; ans3 = f + ((m1/3) + (2*m2/3))*h; err3 = Math.abs(((eqn3-ans3)/eqn3)*100); val_ral.append("Step: " + k + "\r\n" + "\r\n"); val_ral.append("k1 = f(" + t + ", " + f + ") = " + m1 + "\r\n"); val_ral.append("k2 = f(" + (t + 0.75*h) + ", " + (f + 0.75*(m1*h)) + ") = " + m2 + "\r\n");

val_ral.append("y(" + (t + h) + ") = " + ans3 + "\r\n"); val_ral.append("True value = " + eqn3 + "\r\n"); val_ral.append("Et = " + err3 + "\r\n" + "\r\n"); c = c + h; f = ans3; t = t + h; k++; } }

/** * @param args the command line arguments */ public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Windows Classic".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(kap25.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(kap25.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(kap25.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(kap25.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold>

/* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new kap25().setVisible(true); } }); }

// Variables declaration - do not modify private javax.swing.JButton calc; private javax.swing.JTextField hi; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel10; private javax.swing.JLabel jLabel11;

private javax.swing.JLabel jLabel12; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JScrollPane jScrollPane3; private javax.swing.JTextArea val_heun; private javax.swing.JTextArea val_mp; private javax.swing.JTextArea val_ral; private javax.swing.JTextField xi; private javax.swing.JTextField xin; private javax.swing.JTextField xo; private javax.swing.JTextField yi; // End of variables declaration }