Calculer de la dérivée d'une fonction f en un point x à l'aide de l'approximation dx.
On pourra écrire: dérivée( f, x, dx).
var dérivée= function(f,x,dx){
return (f(x+dx)-f(x))/dx ;
var carré = function(x){ return x*x ;}
dérivée(carré,30,0.0000001); ///f'(x^2)=2x (réponse 60)
Version 2 : renvoyer la fonction dérivée :
var dérivée =function(f,dx){
return function(x){ (f(x+dx)-f(x))/dx} ;
}
Avez vous remarqué qu'ici on renvoi non pas un nombre mais une fonction ?,
dérivée(carré, 0.001)(3);
Ou encore :
// n'oubliez pas les return !!
var dérivée = function(dx){
return function(f){
return function(x){
return (f(x+dx)-f(x))/dx} ;
}
}
Dans cette dernière version on peut parler de "curryfication", terme utilisé en hommage à Haskell Curry précurseur avec Alonzon Church du lambda calcul, et qui avait montré cette possibilité , l'opérateur () ne se prête pas tellement à une curryfication systématique des fonctions comme en Caml mais il est souvent intéressant cependant de renvoyer une fonction en résultat.
On peut ainsi écrire:
var fprime = function(f){ return dérivée(0.001)(f) ; }
var sinprime = fprime(Math.sin) ;
var cosprime = fprime(Math.cos) ;
var carreprime = fprime(function(x){return x*x;}) ;
Pour être utilisé ultérieurement :
sinprime(Math.PI) ;// 0.99
Récursion :
La récursion est très peu utilisée par les programmeurs java ou C, souvent à raison car ces programmes sont fondamentalement procéduraux. Par contre le javascript se prête très bien à la programmation récursive, et la récursion permet de traiter des problèmes avec souvent beaucoup plus de facilité que le traitement procédural, il faudra par contre faire attention à ne pas compromettre la puissance de la machine par des récursions imbriquées.
On s'échauffe avec ce petit problème :
Créer une fonction récursive qui calcule le nombre de chiffres d'un entier :
function nchiffres(n) {
return n<10&&1 || 1+ nchiffres( Math.floor(n/10) ) ;
}
Remarquez la syntaxe qui permet de s'affranchir du if/else et qui n'est à pas nécessairement à considérer comme un exemple de programmation à suivre!
Aucun commentaire:
Enregistrer un commentaire