• Aucun résultat trouvé

le corrigé

N/A
N/A
Protected

Academic year: 2021

Partager "le corrigé"

Copied!
5
0
0

Texte intégral

(1)

corrigé

informatique

Analyse

import numpy as np

import matplotlib.pyplot as plt

Exercice 1

from scipy.integrate import quad def u(n):

def f(x):

return (3 * x ** 2 − 2 * x ** 3) ** n return quad(f, 0, 1)[0]

from math import comb def ubis(n):

s = 0

for k in range(n + 1):

s += comb(n, k) * 3 ** k * (−2) ** (n − k) / (3 * n − k + 1)

return s

Le tracé pour n = 50 montre que la deuxième version présente des aberrations numériques à partir d’un certain rang (qui démarrent un peu avant n = 25 dans ma configuration). Il est donc préférable d’utiliser la première version de la fonction.

U = [u(n) for n in range(28)]

Ubis = [ubis(n) for n in range(28)]

plt.plot(U) plt.plot(Ubis) plt.show() 0 5 10 15 20 25 0.4 0.2 0.0 0.2 0.4 0.6 0.8 1.0

(2)

V = [np.sqrt(100 * k) * u(100 * k) for k in range(101)] plt.plot(V) plt.show() 0 20 40 60 80 100 0.0 0.1 0.2 0.3 0.4 0.5

On peut raisonnablement conjecturer qu’il existe une constante K telle que un

K √

n, avec K ≈ 1 2.

Exercice 2 L’expérience montre que la résolution de l’équation : x = n ln x souffre moins d’aberrations numériques que l’équation ex= xn.

from scipy.optimize import fsolve def u(n):

def f(x):

return x − n * np.log(x) return fsolve(f, 1.5)

U = [u(10 * k) for k in range(1, 101)]

plt.plot(U) plt.show() 0 20 40 60 80 100 1.00 1.02 1.04 1.06 1.08 1.10 1.12

(3)

On conjecture d’abord la valeur de a en estimant lim n(un−1) : A = [10 * k * (u(10 * k) − 1) for k in range(1, 101)]

plt.plot(A) plt.show() 0 20 40 60 80 100 1.000 1.025 1.050 1.075 1.100 1.125 1.150 1.175

Il semble bien que a = 1. On procède de même pour b, qui donne cette fois-ci b = 3/2 (avec un graphe analogue, non reporté ici) :

B = [(10 * k) ** 2 * (u(10 * k) − 1 − 1 / (10 * k)) for k in range(1, 101)]

plt.plot(B) plt.show()

Exercice 3

from scipy.integrate import odeint

a = np.sqrt(np.pi / 2)

Le tracé de f ne pose pas de problème : def f(t):

return np.sin(t * t) − np.cos(t * t) / (2 * a)

T = np.linspace(a, 4, 128) G1 = [f(t) for t in T]

plt.plot(T, G1)

Pour utiliserodeintil faut commencer par définir la fonction à deux variables (la première étant vectorielle) F(X, t) où X = (x, x0) et F(X, t) = (x00, x0) :

def F(X, t):

x, xprime = X

return xprime, (xprime − 4 * t ** 3 * x) / t

La fonctionodeintprend pour arguments F, la condition initiale (x(a), x0(a)) et une discrétisation du temps. Elle renvoie un vecteur dont les composantes sont les valeurs approchées (x(ti), x

0

(ti)) ; il ne faut garder que les premières composantes

pour tracer la fonction x.

M = odeint(F, [1, 1], T) G2 = [m[0] for m in M]

(4)

Enfin, la méthode d’Euler consiste à faire terme par terme ce que produit la fonctionodeinten utilisant les approximations x(ti+1) ≈ x(ti) + (ti+1ti)x 0 (ti) et x 0 (ti+1) ≈ x 0 (ti) + (ti+1ti)x 00 (ti). M = [[1, 1]]

for i in range(0, len(T) − 1):

x, xprime = M[−1]

xseconde = (xprime − 4 * T[i] ** 3 * x) / T[i] y = x + xprime * (T[i + 1] − T[i])

yprime = xprime + xseconde * (T[i + 1] − T[i]) M.append([y, yprime])

G3 = [m[0] for m in M]

plt.plot(T, G3) On obtient les tracés suivants :

1.5 2.0 2.5 3.0 3.5 4.0 1 0 1 1.5 2.0 2.5 3.0 3.5 4.0 1 0 1 1.5 2.0 2.5 3.0 3.5 4.0 2 0 2 Exercice 4

from numpy.polynomial import Polynomial def Q(p):

lst = [−k − 1 for k in range(2 * p)] + [0, 2 * p + 2]

return Polynomial(lst)

Le code qui suit permet de conjecturer que Qppossède une seule racine réelle :

for p in (3, 4, 5, 10): print(Q(p).roots())

Le tracé suivant permet de conjecturer que toutes les racines complexes non réelles de Qpsont incluses dans le disque

unité :

X = [np.cos(t) for t in np.linspace(0, 2 * np.pi, 128)]

Y = [np.sin(t) for t in np.linspace(0, 2 * np.pi, 128)]

plt.plot(X, Y) Rx, Ry = [], [] for p in range(1, 30): for z in Q(p).roots(): Rx.append(z.real) Ry.append(z.imag) plt.plot(Rx, Ry, ".") plt.show()

(5)

1.0 0.5 0.0 0.5 1.0 1.5 1.00 0.75 0.50 0.25 0.00 0.25 0.50 0.75 1.00

Références

Documents relatifs

Il faut en premier calculer la position de l’interférence constructive de premier ordre en fonction de la longueur d’onde et de l’écartement de deux fentes :.. a

- Si les deux mentent : alors comme Marion ment : elle est donc célibataire et comme Cloé ment aussi, elle est mariée.. - Si l’une seulement des deux ment : par

- Si les deux mentent : alors comme Marion ment : elle est donc célibataire et comme Cloé ment aussi, elle est mariée.. - Si l’une seulement des deux ment : par

[r]

Comme les deux descripteurs sont inversés et qu’il n’y a pas d’autre atome asymétrique ou source d’asymétrie dans le reste de la molécule, on en déduit :. Ces molécules

Les causes d’existence de stéréo-isomères de configuration sont donc la présence d’atomes asymétriques (pouvant être R ou S) et de liaisons doubles dissymétriquement

On s’intéresse alors à la stéréochimie du mécanisme E2. On sait que la base attaque un hydrogène

• Pour mesurer une résistance, l'ohm-mètre utilise son alimentation pour imposer un courant dans le dipôle étudié et compare (puisque c'est un voltmètre) la tension correspondante