# your code goes here
def lagrange(x0, xlist,ylist):
wynik =float(0)
if (len(xlist)!=len(ylist)):
raise BufferError("Rozmiary list wartosci x i y musza byc takie same!")
for i in range(len(xlist)):
licznik=float(1)
mianownik = float(1)
for j in range(len(xlist)):
if (i!=j):
licznik=licznik*(x0-xlist[j])
mianownik=mianownik*(xlist[i]-xlist[j])
wynik=wynik+((licznik/mianownik)*ylist[i])
return wynik
x=[2.0,4.0,5.0,6.0 ]
y=[0.57672, -0.06604, -0.32757, -0.27668]
print ("Lagrange polynomial for point 5.5 is %d" % lagrange(5.5, x, y))
为什么我跑完后得到答案0?当重写为c#并使用相同的数据运行时,它输出answer -0.3539。在我看来,就像投射/舍入错误,但我没有调试器就难以找到它。
我是python的新手,我在Windows上使用基本的IdleX来编写代码。
答案 0 :(得分:4)
问题不在于你的功能,而在于打印。
格式化程序%d
是签名的整数十进制。因此,如果结果为-0.354
,则会将其四舍五入为0
。
而是使用%f
打印:
>>> print ("Lagrange polynomial for point 5.5 is %f" % lagrange(5.5, x, y))
Lagrange polynomial for point 5.5 is -0.353952