| 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