Racine et factorisation de polynome du deuxieme degré

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 636 fois - Téléchargée 27 fois

Contenu du snippet

comme le titre l'indique cet alias sert a factoriser des polynomes ou en obtenir les racines

pour utiliser l'alias faire :
//echo -a $polynome(3x²+5x-3,x).factor pour factoriser
//echo -a $polynome(3x²+5x-3,x).racine pour avoir les racines

il est tres important de preciser la variable ( x dans notre cas)

Source / Exemple :


alias polynome {
  set %itr 1
  unset %1
  while ( %itr <= $len($1) ) {
    if ( $mid($1,%itr,1) = $2 ) {
      if ( $mid($1,$calc(%itr -1),1) !isnum ) || ( $mid($1,$calc(%itr -1),1) = $null ) { set %1 %1 $+ 1 $+ $mid($1,%itr,1) }
      else { set %1 %1 $+ $mid($1,%itr,1) }
    }
    else { set %1 %1 $+ $mid($1,%itr,1) }
    inc %itr
  }
  set %itr 1
  while ( %itr <= $gettok(%1,0,$asc($2)) ) { 
    set % $+ $gettok(%ident,%itr,32) $remove($gettok(%1,%itr,$asc($2)),²,^2)
    inc %itr
  }
  set %delta $calc( (%b * %b) - (4 * %a * %c) )
  if ( %delta  > 0 ) { 
    set %x1 $+($chr(40),%b,-,$sqrt($ifmatch),$chr(41),/,$calc(%a *2))
    set %x2 $+($chr(40),%b,+,$sqrt($ifmatch),$chr(41),/,$calc(%a *2))
    if ( $prop = racine ) { return delta >0 deux racines , x1= %x1  x2= %x2 }
    if ( $prop = factor ) { return p( $+ $2 $+ )= $+($chr(40),$2,-,%x2,$chr(41),*,$chr(40),$2,-,%x1,$chr(41)) }
  }
  if ( %delta = 0 ) { 
    set %x $+(-,%b,/,$calc(2* %a))
    if ( $prop = racine ) { return delta nulle une racine double  x= %x }
    if ( $prop = factor ) { return p( $+ $2 $+ )= $+($chr(40),$2,+,$gettok(%x,2-,45),$chr(41)) }
  }
  if ( %delta < 0 ) {  
    set %x1 $+($chr(40),%b,-,i,$sqrt($calc(0 - $ifmatch)),$chr(41),/,$calc(%a *2))
    set %x2 $+($chr(40),%b,+,i,$sqrt($calc(0 - $ifmatch)),$chr(41),/,$calc(%a *2))
    if ( $prop = racine ) { return delta<0 deux racines complexes , x1= %x1  x2= %x2 }
    if ( $prop = factor ) { return p( $+ $2 $+ )= $+($chr(40),$2,-,%x2,$chr(41),*,$chr(40),$2,-,%x1,$chr(41)) }
  }
}

Conclusion :


Pour utiliser l'alias faire :

//echo -a $polynome(3x²+5x-3,x).factor pour factoriser
//echo -a $polynome(3x²+5x-3,x).racine pour avoir les racines

Le mirc n'etant pas specialement consacré au math la definition des racines complexes laisse a desirer. La fonction ne fait pas de calcul formel alors inutile de rentrer des polynomes de la forme ax²+bx+c ça ne va rien donner

si on respecte tout ça yaura pas de bug j'insiste aussi sur le fait que ce n'est pas un addon c juste une exemple de la souplesse du mirc.

A voir également

Ajouter un commentaire

Commentaires

Kerrigan
Messages postés
708
Date d'inscription
lundi 15 juillet 2002
Statut
Membre
Dernière intervention
17 mars 2005

erf j'avais pas fait attention a ça ... bref vais corriger ça pendant les vacances.
cs_PaDa
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
3
J'avais pas vu cette source je suppose que c celle qui t'a servi pour le math ... pas mal a mon avis l'idée est là mais :
//echo -a $polynome(3x²+5x-3,x).factor
> p(x)= (x-(+5+7.81025)/6)*(x-(+5-7.81025)/6)
le coefficient dominant me parait pas terrible
et surtout :
//echo -a $polynome(5x-3,x).factor
> p(x)= (x-(-3+8.306624)/10)*(x-(-3-8.306624)/10)
j't'avais déja dit le 2e le premier j'avais zappé c au cas ou tu t'en sois pas rendu compte ... bwef a++
cs_Kolibot
Messages postés
817
Date d'inscription
mercredi 25 juin 2003
Statut
Membre
Dernière intervention
19 avril 2004

Je ne sais pas expliqué GRRR ... je vais faire le code et tu verras.
Kerrigan
Messages postés
708
Date d'inscription
lundi 15 juillet 2002
Statut
Membre
Dernière intervention
17 mars 2005

j'ai pas bien saisi Kolibot ... tu veux que la fonction reconnaisse la variable toute seule ? d'ailleur qu'entend tu exactement par plus générique ?
j'utilise souvent $iif mais je vois pas ou le mettre la je trouve que c mieux dans les textes :)
cs_Kolibot
Messages postés
817
Date d'inscription
mercredi 25 juin 2003
Statut
Membre
Dernière intervention
19 avril 2004

L'idée est vraiment là, le problême c'est l'optimisation du code... Vu que tu as pris un polynome très facile : ax²+bx+c, tu pourrais faire un truc beaucoup plus générique, avec une extraction beaucoup plus simple de x. Renseigne toi sur $iif. Bonne Continuation !

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.