def Newton_Interpolation_table(tab, pktX):
i_roznicowy = [[0]*len(tab) for i in range(len(tab))]
for i in range(size):
for j in range(size):
if (j == 0):
i_roznicowy[i][j] = tab[i]['y']
elif (j <= i):
i_roznicowy[i][j] = round(
(i_roznicowy[i][j-1]-i_roznicowy[i-1][j-1])/(tab[i]['x']-tab[i-j]['x']), 5)
else:
i_roznicowy[i][j] = ' '
W = 0
for k in range(len(tab)):
p = 1
for i in range(k):
p *= (pktX-tab[i]['x'])
W += p*i_roznicowy[k][k]
return round(W, 5)
def Newton_Interpolation(tab, pktX):
W = 0 # W = 1 v W = 1 * tab[i]['y'], dla k in range(1,size)
for k in range(len(tab)):
p = 1
b = 0
for i in range(k):
p *= (pktX-tab[i]['x'])
for i in range(k + 1):
I = 1
for j in range(k + 1):
if i != j:
I *= (tab[i]['x'] - tab[j]['x'])
b += tab[i]['y']/I
print(round(b, 3), " ", end='')
W += p*b
return round(W, 5)
if __name__ == '__main__':
f = open('MN-2-p2.txt', 'r')
tab = []
for i, line in enumerate(f):
if i == 0:
size = int(line[0])
else:
l = line.split()
x = float(l[0])
y = float(l[1])
tab.append({"x": x, "y": y})
f.close()
print("W którym punkcie policzyć wartość wielomianu? ")
pktX = input()
print("Liczba węzłów: ", size)
for i in tab:
print("x =", i['x'], "; f(x) =", i['y'])
print("Wartość wielomianu liczona jest w punkcie: x =", pktX)
print("Współczynniki wielomianu: ")
print("\nWartość wielomianu: f(x) =",
Newton_Interpolation(tab, float(pktX)))
#print(Newton_Interpolation_table(tab, float(pktX)))