Un produit scalaire de polynômes [Python]

On fixe {n\geq1}. Pour {0\leq k\lt n}, on pose {\theta_{n,k}=(2k+1)\pi/(2n)} et {c_{n,k}=\cos\theta_{n,k}}. On note {E=C([-1,1],\mathbb R)} et {F_n} l’espace des polynômes de degré strictement inférieur à {n}.

Pour {m\geq1}, on pose {T_m(x)=\cos(m\arccos x)}, et {T_0(x)=1/\sqrt2}. On admet que {T_m} est de degré {m}, de coefficient dominant {2^{m-1}}, et que les racines de {T_n} sont les {c_{n,k}}.

Pour {f,g\in E}, on définit {(f\mid g)_n=\frac2n\sum_{k=0}^{n-1}f(c_{n,k})g(c_{n,k})}et {N_n(f)=\sqrt{(f\mid f)_n}}. Les questions marquées [P] utilisent Python.

1. (a) [P] Écrire les fonctions theta(n,k), c(n,k) et S(n,m) calculant respectivement {\theta_{n,k}}, {c_{n,k}} et {\sum\limits_{k=0}^{n-1}\cos(m\theta_{n,k})}.

1. (b) [P] Calculer {S(n,m)} pour {n\in\{1,2,3\}} et {-4n\leq m\leq4n}, en arrondissant à dix décimales.

1. (c) Calculer {Z_{n,m}=\sum\limits_{k=0}^{n-1}e^{im\theta_{n,k}}}, pour {m\in\mathbb Z}. En déduire que {S(n,m)=(-1)^kn} si {m=2kn}, et {0} sinon.

2. (a) L’application {(f,g)\mapsto(f\mid g)_n} est-elle un produit scalaire sur {E} ? Vérifier que sa restriction à {F_n} en est un.

2. (b) [P] Écrire une fonction T(n,x) calculant {T_n(x)}.

2. (c) [P] Écrire scal(n,f,g), puis N(n,f).

2. (d) Montrer que {(T_m)_{0\leq m\lt n}} est une base orthonormée de {F_n}.

Pour {f\in E}, on pose {P_n(f)=\sum\limits_{m=0}^{n-1}(f\mid T_m)_nT_m}.

3. (a) Montrer que {(f-P_n(f)\mid Q)_n=0} pour tout {Q\in F_n}.

3. (b) Prouver, pour {Q\in F_n}, l’identité {N_n(f-Q)^2=N_n(f-P_n(f))^2+N_n(P_n(f)-Q)^2}

3. (c) En déduire que {P_n(f)} est l’unique élément de {F_n} prenant les valeurs {f(c_{n,k})} aux points {c_{n,k}}.

4. [P] On donne les fonctions suivantes, où T(n) renvoie le polynôme {T_n} et P(n,f) la fonction {P_n(f)}.

Pour {f(x)=\exp x}, tracer {f-P_5(f)} sur {[-1,1]} avec cent points en abscisse.

Indications Python. np.linspace(a,b,m) fournit des abscisses équidistantes. Les fonctions NumPy s’appliquent aux tableaux. plt.plot(x,y) relie les points correspondants et plt.show() affiche le graphique. Pour un tableau, utiliser np.round(x,n) ; pour un scalaire, round(x,n).