4 Replies - 671 Views - Last Post: 01 December 2011 - 09:24 AM Rate Topic: -----

#1 ked22  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 5
  • Joined: 03-April 10

finding the numeric value of a polynomial

Posted 30 November 2011 - 05:35 AM

I'm trying to compute the value of a polynomial from a string formula, but I can't get this one equation to return the right value and I suspect it's because it doesn't process the - sign properly ( the run is correct for x2+4x +12). In this code x2 means x squared so a power directly follows the x symbol. Please excuse the lack of comments, I'm a relatively new at programming and using forums.. What I basically try to do is isolate each term without the +/- signs and find their value before making recursive calls to the same compute function. PLease, help!


  public static void main(String[] args) {
        // TODO code application logic here
    String ki = "x2 + 4x - 12";

    double y = computeValue(ki, 0, x);

    x=2;

}

private double computeValue(String rawNumber, double x) {
        
        
        String current;
        int index1 = rawNumber.indexOf(43);        // finding the position of + in the string
        int index2 = rawNumber.indexOf(45,1);     //  finding the position of - in the string after 1
        int startIndex=0;
        int endIndex;
        boolean hasSign= ( index1 != -1 ) || (index2 != -1);
        boolean isVariable=false;
        double number=0;
        double coeff, power;
        int whereX=-1;
        coeff = power = 1;
        
        if(rawNumber.charAt(0) == '-') // if the first char is minus, make the coefficient negative
        {
                coeff=-coeff;
                startIndex=1;
        }
        
        
        if( hasSign)
        { 
       
        if( index1 == -1 )
            endIndex = index2;
        else if(index2 == -1 )
            endIndex = index1;
        else
            endIndex = Math.min(index1, index2) - 1;
        }
        else
                endIndex = rawNumber.length() ;
        
        current=rawNumber.substring( startIndex, endIndex ).trim();
        
        whereX=current.indexOf("x");
        if(whereX != -1 ) //change the value of the coeff and power only if there is a x symbol
        {
                if( whereX > 0)
                        coeff= coeff * Double.parseDouble( current.substring(0, whereX) );
                if( whereX + 1 < current.length())
                                power=power * Double.parseDouble( current.substring(whereX+1 ) );
        }
        else //otherwise, parse the whole string ( a constant number into the coefficient)
        {
                coeff = coeff * Double.parseDouble( current);
                power=0;
        }
        //note that if x^0 = 1
        number= coeff * ( Math.pow(x, power) ); 
        
        if( hasSign )
        { 
                
           
            if( rawNumber.charAt(endIndex) == '+' )
            {
                number = number + isolateArg(rawNumber.substring(endIndex + 1), 0, x);
            }
            else
            {
                number = number - isolateArg(rawNumber.substring(index1 + 1), 0, x);   
            }
        }
                 
        
        return number;
    }





Is This A Good Question/Topic? 0
  • +

Replies To: finding the numeric value of a polynomial

#2 macosxnerd101  Icon User is online

  • Self-Trained Economist
  • member icon




Reputation: 10655
  • View blog
  • Posts: 39,568
  • Joined: 27-December 08

Re: finding the numeric value of a polynomial

Posted 30 November 2011 - 07:36 AM

Do you have to do this using Strings? Using classes and objects provides a much cleaner way of doing things. This should give you a better idea of what I'm talking about, and a good starting point. Now you can simply add Term objects to the Polynomial object.
class Term{
    private int coefficient, exponent;
 
    //other code 

    public double evaluate(){ 
        return Math.pow(coefficient, exponent); 
    }
 
}

class Polynomial{

     private Term[] terms;

     //other code

     public double evaluate(){
         double sum = 0;

         for(Term t:terms) 
             sum += t.evaluate();
    
         return sum;
     }
}


Was This Post Helpful? 0
  • +
  • -

#3 pbl  Icon User is offline

  • There is nothing you can't do with a JTable
  • member icon

Reputation: 8342
  • View blog
  • Posts: 31,880
  • Joined: 06-March 08

Re: finding the numeric value of a polynomial

Posted 30 November 2011 - 08:34 PM

Where did you get these 43 and 45 as index() value ?

My bad.. indexOf('+') and indexOf('-') would have been cleaner

This post has been edited by pbl: 30 November 2011 - 08:39 PM

Was This Post Helpful? 0
  • +
  • -

#4 ked22  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 5
  • Joined: 03-April 10

Re: finding the numeric value of a polynomial

Posted 01 December 2011 - 06:40 AM

I guess I am really wanting to make use of srings for this because I want to create a user friendly program, macosxnerd101. You did however raise the fact that I could encapsulate more and probably find an easier way to compute the numbers using a term-by term basis.
Was This Post Helpful? 0
  • +
  • -

#5 macosxnerd101  Icon User is online

  • Self-Trained Economist
  • member icon




Reputation: 10655
  • View blog
  • Posts: 39,568
  • Joined: 27-December 08

Re: finding the numeric value of a polynomial

Posted 01 December 2011 - 09:24 AM

I would do this:
-Replace all - signs with +- so you can split() on the + signs and keep the - terms.
-Parse through the array returned by the split() method to parse each individual term into Term objects.
-Add those Term objects into the Polynomial object.
Was This Post Helpful? 1
  • +
  • -

Page 1 of 1