Skip to content

Commit 1d08374

Browse files
committed
Root gestion
1 parent 7969921 commit 1d08374

6 files changed

+143
-0
lines changed

FindRoots/Falsi_felix.py

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#Falsi - Félix
2+
3+
def falsi(f, a, b, err):
4+
if f(a) == 0:
5+
return a
6+
if f(b) == 0:
7+
return b
8+
if (f(a) > 0 and f(b) > 0) or (f(a) < 0 and f(b) < 0):
9+
# print("coucou")
10+
return None
11+
new = b - f(b) * (b - a)/(f(b) - f(a))
12+
while f(new) >= err:
13+
if (f(new) > 0 and f(a) > 0 ) or (f(new) < 0 and f(a) < 0):
14+
a = new
15+
else:
16+
b = new
17+
new = b - f(b) * (b - a)/(f(b) - f(a))
18+
19+
return new
20+
21+
if __name__ == "__main__":
22+
f = lambda x : 3*x -2
23+
print(falsi(f, -5, 5, 0.0000001))
24+
print(falsi(lambda x : 1, -5, 5, 0.001))

FindRoots/bisection_felix.py

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#bisection - Felix
2+
def bisection(f, a, b, err):
3+
if f(a) == 0:
4+
return a
5+
if f(b) == 0:
6+
return b
7+
mid = (b + a)/2
8+
f_mid = abs(f(mid))
9+
while abs(f(mid)) >= err:
10+
mid = (b + a)/2
11+
if (f(a) > 0 and f(b) > 0) or (f(a) < 0 and f(b) < 0):
12+
return None
13+
if f(mid) == 0:
14+
return mid
15+
if (f(mid) > 0 and f(a) > 0) or (f(mid) < 0 and f(a) < 0):
16+
a = mid
17+
else :
18+
b = mid
19+
return (a, b)
20+
21+
if __name__ == "__main__":
22+
f = lambda x : 3*x -3
23+
print(bisection(f, -5, 5, 0.0000001))
24+
print(bisection(lambda x : 1, -5, 5, 0.001))

FindRoots/newton_raphson_felix.py

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#newton raphson - Felix
2+
import numpy as np
3+
import bisection
4+
def nr(f,a, b, err):
5+
bracket = bisection.bisection(f, a, b, 1)
6+
if type(bracket) != tuple:
7+
return bracket
8+
x = (bracket[0] + bracket[1])/2
9+
df = lambda x : (f(x + err) - f(x - err))/err*2
10+
# print(df(x))
11+
if df(x) == 0:
12+
return None
13+
while f(x) >= err:
14+
x = x - f(x)/df(x)
15+
return x
16+
17+
if __name__ == "__main__":
18+
f = lambda x : 3*x - 2
19+
print(nr(f, -5, 5, 0.0000001))
20+
print(nr(lambda x : 1, -5, 5, 0.001))

FindRoots/rider_felix.py

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#rider - Felix
2+
from math import sqrt
3+
def rider(f, a, b, err):
4+
if f(a) == 0:
5+
return a
6+
if f(b) == 0:
7+
return b
8+
if (f(a) > 0 and f(b) > 0) or (f(a) < 0 and f(b) < 0):
9+
return None
10+
mid = (a + b)/2
11+
if (f(a) - f(b)) > 0:
12+
new = mid + (mid - a) * f(mid)/sqrt((f(mid)**2) - f(a)*f(b))
13+
else :
14+
new = mid - (mid - a) * f(mid)/sqrt((f(mid)**2) - f(a)*f(b))
15+
while f(new) >= err:
16+
if (f(new) > 0 and f(a) > 0 ) or (f(new) < 0 and f(a) < 0):
17+
a = new
18+
else:
19+
b = new
20+
if (f(a) - f(b)) > 0:
21+
new = mid + (mid - a) * f(mid)/sqrt((f(mid)**2) - f(a)*f(b))
22+
else :
23+
new = mid - (mid - a) * f(mid)/sqrt((f(mid)**2) - f(a)*f(b))
24+
return new
25+
26+
27+
if __name__ == "__main__":
28+
f = lambda x : 3*x - 2
29+
print(rider(f, -5, 5, 0.0000001))
30+
print(rider(lambda x : 1, -5, 5, 0.001))

FindRoots/rootsearch_felix.py

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# root search - Felix
2+
def root(f, a, b, h):
3+
"""
4+
f = funct
5+
a = first born
6+
b = last born
7+
h = number of steps
8+
"""
9+
parser = a
10+
step = (b - a)/h
11+
while parser <= b:
12+
f_parser = f(parser)
13+
f_parser_step = f(parser + step)
14+
if f_parser == 0:
15+
return parser
16+
if f_parser_step == 0:
17+
return parser + step
18+
if (f_parser < 0 and f_parser_step > 0) or (f_parser > 0 and f_parser_step < 0):
19+
return (parser, parser + step)
20+
parser += step
21+
return None
22+
23+
if __name__ == "__main__":
24+
f = lambda x : 3*x -3
25+
print(root(f, -5, 5, 1000))
26+
print(root(lambda x : 1, -5, 5, 1000))

FindRoots/secant_felix.py

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#secant - Felix
2+
def secant(f, a, b, err):
3+
if f(a) == 0:
4+
return a
5+
if f(b) == 0:
6+
return b
7+
if (f(a) > 0 and f(b) > 0) or (f(a) < 0 and f(b) < 0):
8+
return None
9+
new = b - f(b) * (b - a)/(f(b) - f(a))
10+
while f(new) >= err:
11+
a = b
12+
b = new
13+
new = b - f(b) * (b - a)/(f(b) - f(a))
14+
return new
15+
16+
if __name__ == "__main__":
17+
f = lambda x : 3*x -2
18+
print(secant(f, -5, 5, 0.0000001))
19+
print(secant(lambda x : 1, -5, 5, 0.001))

0 commit comments

Comments
 (0)