Skip to content
Snippets Groups Projects
Commit 3f392a8a authored by orestis.malaspin's avatar orestis.malaspin
Browse files

jout listing

parent 56a568fc
Branches
Tags
No related merge requests found
...@@ -625,7 +625,7 @@ On a donc que la formule des différences finies centrées est d'ordre 2, notée ...@@ -625,7 +625,7 @@ On a donc que la formule des différences finies centrées est d'ordre 2, notée
![L'erreur moyenne et totale sur le calcul de la dérivée de $f(x)=\sin(x)$ ($f'(x)=\cos(x)$) en fonction de $h$ pour les différences finies en avant ![L'erreur moyenne et totale sur le calcul de la dérivée de $f(x)=\sin(x)$ ($f'(x)=\cos(x)$) en fonction de $h$ pour les différences finies en avant
et celle centrées.](figs/err_deriv_avant_centree.svg){#fig:err_deriv_avant_centree width=70%} et celle centrées.](figs/err_deriv_avant_centree.svg){#fig:err_deriv_avant_centree width=70%}
On peut voir ce comportement sur la @fig: que l'erreur est beaucoup plus faible à résolution équivalente pour On peut voir ce comportement sur la @fig:err_deriv_avant_centree que l'erreur est beaucoup plus faible à résolution équivalente pour
les différences finies centrées par rapport aux différences finies en avant. De plus la pente de l'erreur est plus faible les différences finies centrées par rapport aux différences finies en avant. De plus la pente de l'erreur est plus faible
pour les différences finies centrées. Elle est en fait de pente $2$ en échelle log-log, contrairement aux différences finies centrées en avant pour les différences finies centrées. Elle est en fait de pente $2$ en échelle log-log, contrairement aux différences finies centrées en avant
qui est de pente un. qui est de pente un.
...@@ -633,10 +633,112 @@ qui est de pente un. ...@@ -633,10 +633,112 @@ qui est de pente un.
![L'erreur sur chaque point $x_i$ pour un $h$ fixé sur le calcul de la dérivée de $f(x)=\sin(x)$ ($f'(x)=\cos(x)$) en fonction de $h$ pour les différences finies en avant ![L'erreur sur chaque point $x_i$ pour un $h$ fixé sur le calcul de la dérivée de $f(x)=\sin(x)$ ($f'(x)=\cos(x)$) en fonction de $h$ pour les différences finies en avant
et celle centrées (droite), ainsi que la valeur de $f'(x)$ pour chacune des deux méthodes. On constate que dans ce cas on ne peut pas distinguer $f'(x)$ de sa valeur approximée.](figs/err_cos_ac.svg){#fig:err_cos_ac width=70%} et celle centrées (droite), ainsi que la valeur de $f'(x)$ pour chacune des deux méthodes. On constate que dans ce cas on ne peut pas distinguer $f'(x)$ de sa valeur approximée.](figs/err_cos_ac.svg){#fig:err_cos_ac width=70%}
On constate également sur la @fig: que l'erreur sur chaque point est beaucoup plus faible poru les différences finies centrées, par rapport à celle en avant. On constate également sur la @fig:err_cos_ac que l'erreur sur chaque point est beaucoup plus faible poru les différences finies centrées, par rapport à celle en avant.
On doit en effet utiliser l'échelle logarithmique pour voir l'erreur des différences finies centrées, sinon on ne les verrait simplement pas sur le graphique (elle est de deux ordres On doit en effet utiliser l'échelle logarithmique pour voir l'erreur des différences finies centrées, sinon on ne les verrait simplement pas sur le graphique (elle est de deux ordres
de grandeur plus faible). de grandeur plus faible).
Les @fig:err_deriv_avant_centree et @fig:err_cos_ac sont obtenues avec le listing suivant
```python
import numpy as np
import matplotlib.pyplot as plt
import math
def f(x):
return np.sin(x)
def df(x):
return np.cos(x)
def app(x, h):
return (f(x+h)-f(x)) / h
def app_c(x, h):
return (f(x+h/2)-f(x-h/2)) / h
def comp_error_sqr(xmin, xmax, h):
x = np.arange(xmin, xmax, h)
approx = app(x,h)
exact = df(x)
error = (approx - exact)**2
return x, error
def comp_error_sqr_c(xmin, xmax, h):
x = np.arange(xmin, xmax, h)
approx = app_c(x,h)
exact = df(x)
error = (approx - exact)**2
return x, error
def comp_error_moy(error):
q = error.size
return np.sum(np.sqrt(error) / q)
def comp_error_tot(error):
return np.sum(np.sqrt(error))
h = 0.2
xmin = 0.0
xmax = math.pi
x, error = comp_error_sqr(xmin, xmax, h)
x, error_c = comp_error_sqr_c(xmin, xmax, h)
plt.figure(1)
plt.subplot(121)
plt.plot(x, df(x), 'b-', label="$f'(x)=\cos(x)$")
plt.plot(x, app(x, h), 'rx-', label="avant")
plt.plot(x, app_c(x, h), 'gx-', label="centr.")
plt.xlabel('$x$')
plt.legend(loc=0)
plt.grid(True)
plt.subplot(122)
plt.loglog(x, error, 'b-', label="Erreur en avant")
plt.loglog(x, error_c, 'g-', label="Erreur centrée")
plt.ylabel('Erreur')
plt.xlabel('$x$')
plt.legend(loc=0)
plt.grid(True)
plt.show()
h = [0.025, 0.05, 0.1, 0.2, 0.4]
xmin = 0.0
xmax = math.pi
e_tot = np.array([])
e_tot_c = np.array([])
e_moy = np.array([])
e_moy_c = np.array([])
for dx in h:
x, error = comp_error_sqr(xmin, xmax, dx)
e_tot = np.append(e_tot, comp_error_tot(error))
e_moy = np.append(e_moy, comp_error_moy(error))
x, error = comp_error_sqr_c(xmin, xmax, dx)
e_tot_c = np.append(e_tot_c, comp_error_tot(error))
e_moy_c = np.append(e_moy_c, comp_error_moy(error))
plt.figure(2)
plt.loglog(h, e_tot, 'b-', label="$E_\mathrm{tot,avant}$")
plt.loglog(h, e_moy, 'rx-', label="$E_\mathrm{moy,avant.}$")
plt.loglog(h, e_tot_c, 'k-', label="$E_\mathrm{tot,centr.}$")
plt.loglog(h, e_moy_c, 'gx-', label="$E_\mathrm{moy,centr.}$")
plt.legend(loc=0)
plt.ylabel('Erreur')
plt.xlabel('$h$')
plt.grid(True)
plt.show()
```
--- ---
Exercice (Ordre 3) +.# Exercice (Ordre 3) +.#
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment