Polynom.java |
1 package fi.jyu.mit.graphics; 2 3 /** 4 * N:n asteen polynomi (N <= 15) 5 * @author Vesa Lappalainen 6 * 7 */ 8 public class Polynom implements FunctionRR { 9 10 private double k[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; 11 private int deg = -1; 12 13 /** 14 * Luo uuden ensimmäisen asteen polynomifunktion 15 * @param a ensimmäisen asteen termin kerroin 16 * @param b vakiotermin kerroin 17 */ 18 public Polynom(double a, double b) { 19 deg = 1; 20 k[0] = b; 21 k[1] = a; 22 } 23 /** 24 * Luo uuden toisen asteen polynomifunktion 25 * @param a toisen asteen termin kerroin 26 * @param b ensimmäisen asteen termin kerroin 27 * @param c vakiotermin kerroin 28 */ 29 public Polynom(double a, double b, double c) { 30 deg = 2; 31 k[0] = c; 32 k[1] = b; 33 k[2] = a; 34 } 35 36 /** 37 * Luo uuden kolmannen asteen polynomifunktion 38 * @param a kolmannen asteen termin kerroin 39 * @param b toisen asteen termin kerroin 40 * @param c ensimmäisen asteen termin kerroin 41 * @param d vakiotermin kerroin 42 */ 43 public Polynom(double a, double b, double c, double d) { 44 deg = 3; 45 k[0] = d; 46 k[1] = c; 47 k[2] = b; 48 k[3] = a; 49 } 50 51 /** 52 * Luo uuden neljännen asteen polynomifunktion 53 * @param a neljännen asteen termin kerroin 54 * @param b kolmannen asteen termin kerroin 55 * @param c toisen asteen termin kerroin 56 * @param d ensimmäisen asteen termin kerroin 57 * @param e vakiotermin kerroin 58 */ 59 public Polynom(double a, double b, double c, double d, double e) { 60 deg = 4; 61 k[0] = e; 62 k[1] = d; 63 k[2] = c; 64 k[3] = b; 65 k[4] = a; 66 } 67 68 /** 69 * Asettaa n:n asteen termin kertoimen (n<=5) 70 * @param n aste (<=15) 71 * @param a n:n asteen termin kerroin 72 */ 73 public void add(int n, double a) { 74 if ( n >= k.length ) return; 75 if ( n > deg ) deg = n; 76 k[n] = a; 77 } 78 79 80 /** 81 * Asettaa n:n asteen termin kertoimen 82 * @param n aste (<=15) 83 * @param a n:n asteen termin kerroin 84 */ 85 public void set(int n, double a) { 86 add(n,a); 87 } 88 89 90 /** 91 * Palauttaa n:n asteen termin kertoimen 92 * @param n aste (<=15) 93 * @return n:n termin kerroin 94 */ 95 public double get(int n) { 96 if ( n > deg ) return 0; 97 return k[n]; 98 } 99 100 101 /** 102 * Palauttaa polynoimin asteluvun 103 * @return n:n termin kerroin 104 */ 105 public int getDeg() { 106 return deg; 107 } 108 109 110 /** 111 * Polynomi funktion arvo pisteessä x 112 * Lasketaan polynomi ax2 + bx +c 113 * muodossa (ax+b)*x + c 114 * @param x mistä polynomin arvo lasketaan 115 * @return polynomin arvo pisteessä x 116 * 117 */ 118 @Override 119 public double f(double x) { // NOPMD, nyt f on hyvä nimi 120 if ( deg == -1 ) return 0; 121 double s = k[deg]; 122 for (int i=deg-1; i>=0; i--) 123 s = s*x + k[i]; 124 return s; 125 } 126 } 127