Solved

# Automating a formula

Posted on 2004-09-14

Hi all,

This is not homework.

This is a JAVA program but I need to get the math formula to a better format.

I am looking for an improvement in expanding the formula(s) for finding the roots of a polynomial. The present setup is to use Horner's method and specifically show formulas that are for polynomials of degree 3 or 4. I would like to express the formula using any number of degree. And for the moment, I do not see how to create a general formula using Horner's method.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

// hornersMethodDemo attempts to find solutions to polynomial equations that are of degree 2 or 3.

// Any terms that are missing are given coefficients 0. Step size is variable.

/* Sample problems:

p(x) = x^2-25 use coefficients 1,0,-25 separated by "," as shown; interval from -7 to 7

p(x) = x^2-8x+15 use for coefficients 1,-8,15 separated by "," as shown; interval from 0 to 7

p(x) = x^3-11x^2+14x+80 use for coefficients 1,-11,14,80 separated by "," as shown; interval from -10 to 10

p(x) = 0.3x^2-3.8x+12 use coefficients 0.3,-3.8,+12 separated by "," as shown; interval from 5 to 7

note:

any x value that is at one point is above the line y = 0 and the next is below the line y=0, there exist a root.

or similarly, any x value that is at one point is below the line y = 0 and the next is above the line y=0, there exist a root.

*/

// This example demonstrates the use of JLabel, JTextField

// and JButton.

public class hornersMethodDemo

implements ActionListener {

JFrame HornerFrame;

JPanel HornerPanel;

JTextField FromTField;

JTextField ToTField;

JTextField IncTField;

JTextField PolyCoefs;

JLabel FromLabel, ToLabel, IncLabel, PolyCoefLabel, CalcValueLabel;

JButton Calculate;

// Constructor

public hornersMethodDemo() {

// Create the frame and container.

HornerFrame = new JFrame("Looking For Roots");

HornerPanel = new JPanel();

HornerPanel.setLayout(new GridLayout(3, 2));

// Add the widgets.

addWidgets();

// Add the panel to the frame.

HornerFrame.getContentPane().add(HornerPanel, BorderLayout.CENTER);

// Exit when the window is closed.

HornerFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// Show the frame.

HornerFrame.pack();

HornerFrame.setVisible(true);

}

// Create and add the widgets for converter.

private void addWidgets() {

// Create widgets.

FromTField = new JTextField();

ToTField= new JTextField();

IncTField = new JTextField();

PolyCoefs = new JTextField();

FromLabel = new JLabel("Evaluate X From", SwingConstants.LEFT);

ToLabel= new JLabel("Evaluate X To", SwingConstants.LEFT);

IncLabel = new JLabel("Step Size", SwingConstants.LEFT);

PolyCoefLabel = new JLabel("Enter Coefficients", SwingConstants.LEFT);

CalcValueLabel = new JLabel("See System Out For Value", SwingConstants.LEFT);

Calculate = new JButton("Calculate");

// Listen to events from Calc button.

Calculate.addActionListener(this);

// Add widgets to container.

HornerPanel.add(FromLabel);

HornerPanel.add(FromTField);

HornerPanel.add( ToLabel);

HornerPanel.add(ToTField);

HornerPanel.add(IncLabel);

HornerPanel.add(IncTField);

HornerPanel.add(PolyCoefLabel);

HornerPanel.add(PolyCoefs);

HornerPanel.add(Calculate);

HornerPanel.add(CalcValueLabel);

//HornerPanel.add(CalcValue );

FromLabel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

ToLabel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

IncLabel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

CalcValueLabel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

}

// Implementation of ActionListener interface.

public void actionPerformed(ActionEvent event) {

try {

float gofrmX = Float.parseFloat(FromTField.getText());//from

float gotoX = Float.parseFloat(ToTField.getText());//to

float stp = Float.parseFloat(IncTField.getText());//step

String in = new String(PolyCoefs.getText()); //coefficients in normal order

String[] atoms = in.split(",");

//P(x) = a0 + x *(a1 + x*(a2+x*(...x*an)...)): model

float y = 0;

int atmlength = atoms.length;

System.out.print(gofrmX + " ** is the first X point ** ");

while (gofrmX <= gotoX )

{

if (atmlength == 3) // 2nd degree

{

y = Float.parseFloat(atoms[atoms.length-1]) + gofrmX*(Float.parseFloat(atoms[atoms.length-2]) + gofrmX*Float.parseFloat(atoms[atoms.length-3]));

}

if (atmlength == 4) // 3rd degree

{

y = Float.parseFloat(atoms[atoms.length-1]) + gofrmX*(Float.parseFloat(atoms[atoms.length-2]) + gofrmX*(Float.parseFloat(atoms[atoms.length-3]) + gofrmX*Float.parseFloat(atoms[atoms.length-4])));

}

System.out.print("Value for y is " + y);

if( y < 0 ){

System.out.println(" and is below the line y = 0 ");

}

if( y == 0 ){

System.out.println(" and is on the line y = 0 and is a root ");

}

if( y > 0 ){

System.out.println(" and is above the line y = 0 ");

}

gofrmX = gofrmX + stp;

System.out.print(gofrmX + " ** is another step ** ");

}

}

catch (Exception e) {

//e.printStackTrace();

}

}

// main method

public static void main(String[] args) {

// Set the look and feel.

try {

UIManager.setLookAndFeel(

UIManager.getCrossPlatformLookAndFeelClassName());

}

catch (Exception e) {}

hornersMethodDemo calculator = new hornersMethodDemo();

}

}

Any help is appreciated.

Delphi3