ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 02 Mai 2007 10:03 Sujet du message: |
|
|
Bonjour, au sujet de la méthode des différences finies, je pense que l'on doit utiliser l'opérateur nabla de différence décroissante décrit par R.Théodor dans son livre "Initiation à l'analyse numérique" chez Masson p 105.
Je l'avais programmé il y a quelque temps. Voici le texte de l'exercice et le corrigé en Maple:
Code: |
Exercice:
a) f étant une fonction de IR dans IR , soit l'opérateur nabla défini pour tout n réel par :
nabla(f)(n) = f(n) - f(n - 1)
Définir cet opérateur nabla .
b) si f: x ->1/(1+x²) , afficher pour k=0,1,2,3 les images au point réel n par la fonction
(nabla@@k)(f)
c'est à dire (nabla o . . . o nabla)(f) , nabla étant composé k fois avec lui-même .
c) définir la fonction c à 2 variables p et q telle que :
p (p - 1) ... (p - q + 1)
c(p, q) = -------------------------
factorial(q)
d) soit la procédure PolyNewton(f,a,b,n,x) définie par :
f est une fonction de IR dans IR ,
[a,b] est un intervalle de IR que l'on découpe en n intervalles de même longueur h ,
x est le nom de la variable réelle .
On pose s=(x-b)/h .
PolyNewton calcule un polynôme P de IR[x] défini par la formule de Newton :
n
-----
\
)
P(x) = / (-1)^k c(-s, k) (nabla@@k)(f)(b)
-----
k = 0
Ecrire la procédure PolyNewton et la tester sur f: x ->1/(1+x²) pour [-8,-3] découpé
en 5 intervalles de même longueur.
e) vérifier que le polynôme P obtenu par la procédure PolyNewton est le polynôme
d'interpolation de Lagrange de f aux points d'abscisses -8,-7,-6,-5,-4,-3.
NB: la fonction CurveFitting[PolynomialInterpolation] permet de calculer ce polynôme
d'interpolation de Lagrange .
f) vérifier graphiquement le résultat précédent.
Corrigé Exercice:
nabla:=f->unapply(f(n)-f(n-1),n);
nabla := f -> unapply(f(n) - f(n - 1), n)
b)
f:=x->1/(1+x^2):for k from 0 to 3 do (nabla@@k)(f)(p) od;
1
------
2
1 + p
1 1
------ - ------------
2 2
1 + p 1 + (p - 1)
1 2 1
------ - ------------ + ------------
2 2 2
1 + p 1 + (p - 1) 1 + (p - 2)
1 3 3 1
------ - ------------ + ------------ - ------------
2 2 2 2
1 + p 1 + (p - 1) 1 + (p - 2) 1 + (p - 3)
c)
c:=(p,q)->product(p-i,i=0..q-1)/q!;
q - 1
,--------'
| |
| |
| | (p - i)
| |
i = 0
c := (p, q) -> -----------------
factorial(q)
d)
PolyNewton:=proc(f::operator,a,b,n,x::name)
local h,s,k,P;
h:=(b-a)/n;s:=(x-b)/h;
P:=0;
for k from 0 to n do
P:=P+(-1)^k*c(-s,k)*(nabla@@k)(f)(b);
end do;
unapply(sort(expand(P)),x);
end proc;
PolyNewton := proc(f::operator, a, b, n, x::name) ... end;
N:=PolyNewton(f,-8,-3,5,x);
33 5 269 4 14223 3 2841 2 86526 2137
N := x -> ------ x + ------ x + ------ x + ----- x + ------ x + ----
817700 204425 817700 24050 204425 3145
e)
X:=[-8,-7,-6,-5,-4,-3];
X := [-8, -7, -6, -5, -4, -3]
Y:=[seq(f(X[k]),k=1..nops(X))];
[1 1 1 1 1 1 ]
Y := [--, --, --, --, --, --]
[65 50 37 26 17 10]
CurveFitting[PolynomialInterpolation](X,Y,x);
33 5 269 4 14223 3 2841 2 86526 2137
------ x + ------ x + ------ x + ----- x + ------ x + ----
817700 204425 817700 24050 204425 3145
f)
plot({f(x),N(x)},x=-8..-3);
|
A plus tard. |
|