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

Private GIT Repository
correction pbnum
[cours-mesi.git] / tps / chap3 / methodes.py~
1 import matplotlib.pyplot as plt
2 import numpy as np
3 from math import *
4
5
6
7
8
9 def f(x):
10     return cos(x)-x
11
12 def fp(x):
13     return -sin(x)-1
14
15
16
17
18 def  iteration_dichotomie(a,b,m,epsilon,f):
19     def maj_test(xn,xnm1):
20         return f(xn) != 0 and abs(xnm1-xn) > epsilon  
21     xnm1 = a 
22     xn= a
23     X=[]
24     n = 1
25     an= a
26     bn=b
27     test = True
28     while n <= m and test:
29         xnm1 = xn
30         xn=float(an+bn)/2
31         test = maj_test(xn,xnm1)
32         X +=[xn]
33         if f(an)*f(xn)<=0 : 
34             bn=xn
35         else :
36             an=xn
37         n +=1
38     return (n,X)
39
40 def  iteration_newton(x0,m,epsilon,f,fp):
41     def maj_test(xn,xnm1):
42         return f(xn) != 0 and abs(xnm1-xn) > epsilon  
43     n=0;
44     test= f(x0) != 0
45     xn=x0
46     X=[x0]
47     while n < m and test:
48         qn=fp(xn)
49         xnm1=xn
50         xn= xn-f(xn)/qn
51         X += [xn]
52         n=n+1
53         test= maj_test(xn,xnm1)
54
55 #f(x) !=0 and n<m  and abs(x-xm1)>epsilon
56     return (n,X)
57
58
59 def  iteration_corde(a,b,x0,m,epsilon,f):
60     def maj_test(xn,xnm1):
61         return f(xn) != 0 and abs(xnm1-xn) > epsilon  
62     n=0;
63     q=float(f(b)-f(a))/(b-a)
64     test= f(x0) != 0
65     xn=x0
66     X=[x0]
67     while n < m and test:
68         xnm1=xn
69         xn= xn-f(xn)/q
70         X += [xn]
71         n=n+1
72         test= maj_test(xn,xnm1)
73
74 #f(x) !=0 and n<m  and abs(x-xm1)>epsilon
75     return (n,X)
76
77 """def  iteration_newton(x0,m,epsilon,f,fp):
78     n=0;
79     delta=float(1)/fp(x0)
80     test= f(x0) != 0
81     x=x0
82     X=[x0]
83     while(test):
84         xm1=x
85         x= x-delta*f(x)
86         delta=float(1)/fp(x)
87         X += [x]
88         n=n+1
89         test= not (f(x)==0 or n>=m  or abs(x-xm1)<=epsilon)
90     return (n,X)
91 """
92
93 def  iteration_lagrange(x0,x1,m,epsilon,f):
94     n=0;
95     delta=float(x1-x0)/(f(x1)-f(x0))
96     test= f(x0) != 0
97     x=x1
98     X=[x1]
99     while(test):
100         xm1=x
101         x= x-delta*f(x)
102         delta=float(x-xm1)/(f(x)-f(xm1))
103         X += [x]
104         n=n+1
105         test= not (f(x)==0 or n>=m  or abs(x-xm1)<=epsilon)
106     return (n,X)
107
108
109 def main():
110     print "TP 3.1 ............ dichotomie"
111     print iteration_dichotomie(0,pi/2,200,0.00000001,f)
112
113     
114     print "TP 3.1 ............ corde"
115     print iteration_corde(0,pi/2,0,200,0.00000001,f)
116
117
118     print "TP 3.1 ............ newton"
119     print iteration_newton(0,200,0.00000001,f,fp)
120
121
122     print "TP 3.1 ............ lagrange"
123     print iteration_lagrange(0,pi/2,200,0.00000001,f)
124     
125
126 if __name__ == '__main__':
127     main()
128