-
Notifications
You must be signed in to change notification settings - Fork 0
/
Polynomial.py
112 lines (80 loc) · 2.92 KB
/
Polynomial.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
from applicable import Applicable, isApplicable
import numpy as np
import matplotlib.pyplot as plt
import math
import Function as func
import numerical_differentiation as diff
class Polynomial(Applicable):
elements = []
def __init__(self, degree):
"Initializes an empty polynomial of degree n"
self.degree = degree
self.elements = np.zeros(self.degree)
def __str__(self):
st = ""
for i in range(self.degree-1,-1,-1):
if(i == 0):
st += "{}x^{}".format(self.get_coeff(i),i)
else:
st += "{}x^{} + ".format(self.get_coeff(i),i)
return st
def add_element(self, degree, val):
self.elements[degree] = val
def get_coeff(self, degree):
return self.elements[degree]
def set_elements(self, new_elements):
self.elements = new_elements
def add(self, other):
assert(other.__name__ == 'Polynomial')
larger_degree = self.degree if(self.degree > other.degree) else other.degree
smaller_degree = other.degree if(self.degree > other.degree) else self.degree
t = self if (self.degree > other.degree) else other
new_poly = Polynomial(larger_degree)
for i in range(smaller_degree):
new_poly.add_element(self.degree, (self.get_coeff(i) + other.get_coeff(i)))
if(smaller_degree != larger_degree):
for i in range(smaller_degree, larger_degree):
new_poly.add_element(self.degree, t.get_coeff(i))
return new_poly
def isPolynomial(self):
return True
def user_input(self):
exp=input("Enter Polynommial")
arr=exp.split(" ")
for i in range(len(arr)):
for j in range(len(arr[i])):
if(arr[i][j]=='x'):
self.elements[int(arr[i].substring(0,j))]=int(arr[i].substring(j+2,len(arr[i])))
def apply(self, x):
result = 0
for i in range(self.degree):
<<<<<<< HEAD
Applicable((self.get_coeff(i))):
=======
if isApplicable(self.get_coeff(i)):
>>>>>>> 795bea09a33b7d289b18c0f30fe4af953bd15757
result += math.pow(x,i) * self.get_coeff(i).apply(x)
else:
result += math.pow(x,i) * self.get_coeff(i)
return result
def plot(self):
t = np.arange(-100.0, 100.0, 0.001)
plotable = []
for i in t:
plotable.append(self.apply(i))
plt.plot(t, plotable)
plt.title(self)
plt.ylabel("f(x)")
plt.xlabel("x")
plt.show()
def random_test():
t = Polynomial(4)
ex = func.periodic_function(1,1,1,1)
t.set_elements([1,ex,3,4])
print(t.apply(3))
print(t)
t.plot()
<<<<<<< HEAD
=======
random_test()
>>>>>>> 795bea09a33b7d289b18c0f30fe4af953bd15757