$derive(expression) : fonction dérivée

Soyez le premier à donner votre avis sur cette source.

Snippet vu 24 113 fois - Téléchargée 29 fois

Contenu du snippet

Dérive une expression de type ax^m+bx^n+cx^o+... avec a, b, c, etc. et m, n, o, etc. appartenant à IR

exemple : $derive(2x+4) retourne 2
$derive(7x^4-0.5x^-6) retourne 28x^3+3x^-7

Ne supporte pas encore les multiplications et divisions (et les parenthèses)
Pas d'espace dans l'expression

Source / Exemple :


derive {
  if * !isin $$1 && / !isin $$1 && $chr(40) !isin $$1 && $chr(41) !isin $$1 {
    tokenize 32 $replace($replace($$1, -, +-, ¹, ^1, ², ^2, ³, ^3), ^+-, ^-)
    if ($left($$1, 1) == +) tokenize 32 $right($$1, $calc($len($$1) -1))
    if ($$1 isnum) return 0
    var %¥ = $numtok($$1, 43)
    var %? = 0
    while %? < %¥ {
      inc %?
      var %¤ = $gettok($$1, %?, 43)
      %¤ = $iif($left(%¤, 1) == x, 1) $+ %¤ $+ $iif($right(%¤, 1) == x, ^1)
      if %¤ !isnum {
        var %¢ = $remove($gettok(%¤, $numtok(%¤, 120), 120), ^)
        var %£ = $+(%£, +, $remove($calc(%¢ * $iif($gettok(%¤, 1, 120) != x, $v1, 1)) $+ x^ $+ $calc(%¢ -1), x^0, ^1))
      }    
    }
    return $replace($right(%£, $calc($len(%£) -1)), +-, -, 1x, x)
  }
}

Conclusion :


Ça fait longtemps que j'ai pas codé sur mIRC, donc je suis sûr que mon code doit être optimisable (peut-être y-a-t-il même des erreurs ?). J'essaierai d'améliorer le code pour pouvoir dériver n'importe quelle expression.

PS : évidemment celui qui n'aime pas les maths n'a rien à faire ici :P

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
4
c'est du parsing ouaip :)
mais c'est complètement algorithmique la dérivation, c'est pas difficile, c'est surtout très fastidieux.
A l'occase, matte ma source (moche) sur le calcul complexe, ici ou sur sdb, ou mieux la génération d'arbre de sax sur sdb.org.
En combinant ca avec un peu de truc comme tu as fait, on peut dériver bcp de choses je pense.. Juste que y'a du boulot ^^
Messages postés
165
Date d'inscription
mercredi 29 janvier 2003
Statut
Membre
Dernière intervention
15 avril 2010

ben disons que c'est chaud de faire une fonction qui puisse tout dériver, faut qu'elle prenne en compte parentheses etc. et comme ca fait longtemps qujai pas codé... :/
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
4
J'ai cru que t'avais fait un énorme truc de dérivation en lisant le titre lol :p

Bon en gros ca marche, mais attention à ton $remove(...,^1) ca renvoie certains résultats faux :
$derive(x^150) > 150x49 au lieu de 150x^149

(le mm pb a planté un quart des scripteurs lors d'un défi y'a deux ans sur sdb héhé...)

Bonne continuation, ca va ptet me remotiver a faire un parser d'expressions littérales en mIRC qui sait ;)
Messages postés
165
Date d'inscription
mercredi 29 janvier 2003
Statut
Membre
Dernière intervention
15 avril 2010

lol c'est des maths : pour avoir le sens de variation d'une fonction f on calcule sa dérivée f'
Messages postés
311
Date d'inscription
dimanche 23 février 2003
Statut
Membre
Dernière intervention
1 mai 2009

Je vais peut-être paraitre ignorant , mais a quoi sert cette expression ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.