94 lines
2.1 KiB
Python
94 lines
2.1 KiB
Python
|
#!/usr/bin/env python3
|
||
|
# -*- coding: utf-8 -*-
|
||
|
"""
|
||
|
Created on Fri Mar 6 08:06:39 2020
|
||
|
|
||
|
@author: suwako
|
||
|
"""
|
||
|
import matplotlib.pyplot as plt
|
||
|
import numpy as np
|
||
|
def newton(f, df, u, xtol=1e-12, Nmax=100):
|
||
|
n = 1
|
||
|
v = u - f(u) / df(u)
|
||
|
while abs(u - v) >= xtol:
|
||
|
u, v = v, v - f(v) / df(v)
|
||
|
n += 1
|
||
|
if n > Nmax:
|
||
|
return None
|
||
|
return v, n
|
||
|
|
||
|
def secante(f, u, v, xtol=1e-12, Nmax=100):
|
||
|
n = 1
|
||
|
while abs(u - v) >= xtol:
|
||
|
u, v = v, (u * f(v) - v * f(u)) / (f(v) - f(u))
|
||
|
n += 1
|
||
|
if n > Nmax:
|
||
|
return None
|
||
|
return v, n
|
||
|
|
||
|
def f(x): return x**3 - 2 * x - 5
|
||
|
def df(x): return 3 * x * x - 2
|
||
|
plt.figure(0)
|
||
|
X = np.linspace(-3, 3, 256)
|
||
|
Y = [f(x) for x in X]
|
||
|
plt.plot(X,Y)
|
||
|
plt.grid()
|
||
|
plt.show()
|
||
|
|
||
|
for u in range(-3, 4):
|
||
|
x, n = newton(f, df, u)
|
||
|
print(f"Pour u0 = {u} on obtient {x} au bout de {n} itérations'")
|
||
|
|
||
|
nmax = 0
|
||
|
for u in range(-3, 4):
|
||
|
for v in range(-3, 4):
|
||
|
if u != v:
|
||
|
x, n = secante(f, u, v)
|
||
|
if n > nmax:
|
||
|
nmax = n
|
||
|
(a, b) = (u, v)
|
||
|
print(f"pour u0 = {a} et u1 = {b}, {nmax} itérations sont nécéssaires")
|
||
|
|
||
|
print(secante(df, 0, 1)[0])
|
||
|
print(newton(f, df, secante(df, 0, 1)[0], Nmax=200))
|
||
|
|
||
|
def f(x): return 3 * np.sin(4*x)+x*x - 2
|
||
|
def df(x): return 12*np.cos(4*x)+2*x
|
||
|
plt.figure(1)
|
||
|
X = np.linspace(-3, 3, 256)
|
||
|
Y = [f(x) for x in X]
|
||
|
plt.plot(X,Y)
|
||
|
plt.grid()
|
||
|
plt.show()
|
||
|
|
||
|
def zeros(f, df, a, b, n=100):
|
||
|
zer = []
|
||
|
for k in range(n):
|
||
|
u = a + np.random.random() * (b - a)
|
||
|
x = newton(f, df, u)
|
||
|
if x is not None and round(x[0], 12) not in zer:
|
||
|
zer.append(round(x[0], 12))
|
||
|
return zer
|
||
|
from scipy.integrate import quad
|
||
|
|
||
|
def f(x):
|
||
|
return quad(lambda t : np.sqrt(1-t*t)*np.cos(x*t),-1,1)[0]
|
||
|
def df(x):
|
||
|
return quad(lambda t : -t*np.sqrt(1-t*t)*np.sin(x*t),-1,1)[0]
|
||
|
plt.figure(2)
|
||
|
X = np.linspace(0, 16, 256)
|
||
|
Y = [f(x) for x in X]
|
||
|
plt.plot(X,Y)
|
||
|
plt.grid()
|
||
|
plt.show()
|
||
|
|
||
|
def derivee(f,x,h):
|
||
|
return (f(x+h)-f(x-h)/(2*h))
|
||
|
def delta(p):
|
||
|
return abs(np.cos(1)-derivee(np.sin,1,10**(-p)))
|
||
|
plt.figure(3)
|
||
|
P= np.arange(4,8,.1)
|
||
|
D=[delta(p) for p in P]
|
||
|
print(D)
|
||
|
plt.plot(P,D)
|
||
|
plt.show()
|