]> AND Private Git Repository - cours-mesi.git/blob - tps/chap2/diff_div.py~
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
correction pbnum
[cours-mesi.git] / tps / chap2 / diff_div.py~
1 import matplotlib.pyplot as plt
2 import numpy as np
3 from math import *
4
5
6 def coeffs(X,Y):
7     n = len(X)-1
8     diff_div=[[0 for _ in xrange(n+1)] for _ in xrange(n+1)]
9     for i in xrange(n+1):
10         diff_div[i][0] = Y[i]
11     for j in xrange(1,n+1):
12         for i in xrange(n-j+1):
13             r = float(diff_div[i+1][j-1]-diff_div[i][j-1])/(X[i+j]-X[i])
14             diff_div[i][j] = r
15     print diff_div
16     return diff_div[0]
17
18
19 print "TP 2.1 ............"
20
21
22 def forloop(list):
23     r = 1
24     for x in list:
25         r *= x
26     return r
27
28
29 def construit_pol(X,Y):
30     d = coeffs(X,Y)
31     n = len(X)-1
32     return lambda x : sum([d[i]*forloop([x - X[j] for j in xrange(i)]) for i in xrange(n+1)])
33
34
35 """
36 print "tp 2.1....."
37 X = [10,25,60]
38 Y = [2.3, 8, 24.6]
39 p = construit_pol(X,Y)
40 Yp =[p(x) for x in X]
41
42 print p(15)
43 print p(40)
44 print p(100)
45
46
47 x=np.linspace(10,100,100)
48 plt.plot(x,p(x))  
49 plt.ylabel('temps d\'execution')
50 plt.xlabel("taille des donnees")
51 plt.show()
52
53
54
55 """
56
57 print "tp 2.2....."
58 X1 = [-1+0.25*i for i in xrange(9)]
59 Y1 = [e**x for x in X1]
60 p1 = construit_pol(X1,Y1)
61
62
63 X2 = [cos(pi/2*(float(2*i+1)/9)) for i in xrange(9)]
64 Y2 = [e**x for x in X2]
65 p2 = construit_pol(X2,Y2)
66
67
68
69 e1 = lambda x : abs(p1(x) - e**x)
70 e2 = lambda x : abs(p2(x) - e**x)
71 x=np.linspace(-1,1,1000)
72
73 plt.plot(x,e1(x))  
74 plt.plot(x,e2(x))  
75
76 plt.ylabel('exp')
77 plt.xlabel("x")
78 plt.show()
79