实现多项式的JAVA类

  1  package practice;
  2  // http://introcs.cs.princeton.edu/java/92symbolic/Polynomial.java.html
  3  /** ***********************************************************************
  4   *  Compilation:  javac Polynomial.java
  5   *  Execution:    java Polynomial
  6   *
  7   *  Polynomials with integer coefficients.
  8   *
  9   *  % java Polynomial
 10   *  zero(x) =     0
 11   *  p(x) =        4x^3 + 3x^2 + 2x + 1
 12   *  q(x) =        3x^2 + 5
 13   *  p(x) + q(x) = 4x^3 + 6x^2 + 2x + 6
 14   *  p(x) * q(x) = 12x^5 + 9x^4 + 26x^3 + 18x^2 + 10x + 5
 15   *  p(q(x))     = 108x^6 + 567x^4 + 996x^2 + 586
 16   *  0 - p(x)    = -4x^3 - 3x^2 - 2x - 1
 17   *  p(3)        = 142
 18   *  p'(x)       = 12x^2 + 6x + 2
 19   *  p''(x)      = 24x + 6
 20   *
 21   ************************************************************************ */
 22  public  class Polynomial {
 23      private  int[] coef;  // coefficients 系数
 24       private  int deg; // degree of polynomial (0 for the zero polynomial)
 25      
 26       // a*x^b
 27       public Polynomial( int a,  int b){
 28         coef =  new  int[b+1];
 29         coef[b] = a;
 30         deg = degree();
 31     }
 32     
 33      //  return the degree of this polynomial (0 for the zero polynomial)
 34       public  int degree(){
 35          int d = 0;
 36          for( int i = 0; i<coef.length; i++)
 37              if(coef[i]!=0)
 38                 d = i;
 39 
 40          return d;
 41     }
 42     
 43      // return c = a+b
 44       public Polynomial plus(Polynomial b){
 45         Polynomial a =  this;
 46         Polynomial c =  new Polynomial(0, Math.max(a.deg, b.deg));
 47          for( int i = 0; i <= a.deg; i++)
 48             c.coef[i] += a.coef[i];
 49          for( int i = 0; i <= b.deg; i++)
 50             c.coef[i] += b.coef[i];
 51         c.deg = c.degree();
 52          return c;
 53     }
 54     
 55      //  return (a - b)
 56       public Polynomial minus(Polynomial b) {
 57         Polynomial a =  this;
 58         Polynomial c =  new Polynomial(0, Math.max(a.deg, b.deg));
 59          for ( int i = 0; i <= a.deg; i++) c.coef[i] += a.coef[i];
 60          for ( int i = 0; i <= b.deg; i++) c.coef[i] -= b.coef[i];
 61         c.deg = c.degree();
 62          return c;
 63     }
 64 
 65      //  return (a * b)
 66       public Polynomial times(Polynomial b) {
 67         Polynomial a =  this;
 68         Polynomial c =  new Polynomial(0, a.deg + b.deg);
 69          for ( int i = 0; i <= a.deg; i++)
 70              for ( int j = 0; j <= b.deg; j++)
 71                 c.coef[i+j] += (a.coef[i] * b.coef[j]);
 72         c.deg = c.degree();
 73          return c;
 74     }
 75 
 76      //  return a(b(x))  - compute using Horner's method
 77       public Polynomial compose(Polynomial b) {
 78         Polynomial a =  this;
 79         Polynomial c =  new Polynomial(0, 0);
 80          for ( int i = a.deg; i >= 0; i--) {
 81             Polynomial term =  new Polynomial(a.coef[i], 0);
 82             c = term.plus(b.times(c));
 83         }
 84          return c;
 85     }
 86 
 87 
 88      //  do a and b represent the same polynomial?
 89       public  boolean eq(Polynomial b) {
 90         Polynomial a =  this;
 91          if (a.deg != b.deg)  return  false;
 92          for ( int i = a.deg; i >= 0; i--)
 93              if (a.coef[i] != b.coef[i])  return  false;
 94          return  true;
 95     }
 96 
 97 
 98      //  use Horner's method to compute and return the polynomial evaluated at x
 99       public  int evaluate( int x) {
100          int p = 0;
101          for ( int i = deg; i >= 0; i--)
102             p = coef[i] + (x * p);
103          return p;
104     }
105 
106      //  differentiate this polynomial and return it
107       public Polynomial differentiate() {
108          if (deg == 0)  return  new Polynomial(0, 0);
109         Polynomial deriv =  new Polynomial(0, deg - 1);
110         deriv.deg = deg - 1;
111          for ( int i = 0; i < deg; i++)
112             deriv.coef[i] = (i + 1) * coef[i + 1];
113          return deriv;
114     }
115      public String toString(){
116          if(deg == 0)
117              return "" + coef[0];
118          if(deg == 1)
119              return coef[1] + "x + " + coef[0];
120         
121         String s = coef[deg] + "x^" + deg;
122          for( int i = deg-1; i >= 0; i--){
123              if(coef[i] == 0)
124                  continue;
125              else  if(coef[i] > 0)
126                 s = s + " + " + ( coef[i]);
127              else  if(coef[i] < 0)
128                 s = s + " - " + (-coef[i]);
129              if(i== 1)
130                 s = s + "x";
131              else  if(i > 1)
132                 s = s +"x^" + i;
133         }
134          return s;
135     }
136     
137      public  static  void main(String[] args) { 
138         Polynomial zero =  new Polynomial(0, 0);
139 
140         Polynomial p1   =  new Polynomial(4, 3);
141         Polynomial p2   =  new Polynomial(3, 2);
142         Polynomial p3   =  new Polynomial(1, 0);
143         Polynomial p4   =  new Polynomial(2, 1);
144         Polynomial p    = p1.plus(p2).plus(p3).plus(p4);    //  4x^3 + 3x^2 + 1
145 
146         Polynomial q1   =  new Polynomial(3, 2);
147         Polynomial q2   =  new Polynomial(5, 0);
148         Polynomial q    = q1.plus(q2);                      //  3x^2 + 5
149 
150 
151         Polynomial r    = p.plus(q);
152  //         Polynomial s    = p.times(q);
153  //         Polynomial t    = p.compose(q);
154 
155         System.out.println("zero(x) =     " + zero);
156         System.out.println("p(x) =        " + p);
157         System.out.println("q(x) =        " + q);
158         System.out.println("p(x) + q(x) = " + r);
159  //         System.out.println("p(x) * q(x) = " + s);
160  //         System.out.println("p(q(x))     = " + t);
161  //         System.out.println("0 - p(x)    = " + zero.minus(p));
162  //         System.out.println("p(3)        = " + p.evaluate(3));
163  //         System.out.println("p'(x)       = " + p.differentiate());
164  //         System.out.println("p''(x)      = " + p.differentiate().differentiate());
165     }
166 }

你可能感兴趣的:(java)