Racines réelles du polynôme de degré 3Bonjour à tous,
Est-ce que quelqu'un sait comment calculer les racines réelles du polynôme de degré 3 avec les scripts JMP ?
j'ai les coefficients de l'équation : 0 = A + BX + C.X² + DX^3. Ce dont j'ai besoin, ce sont les vraies solutions.
J'ai commencé à créer une nouvelle table de données avec beaucoup de lignes afin de me rapprocher le plus possible de la valeur souhaitée, mais cela prend trop de temps.
Merci,
Re: Racines réelles du polynôme de degré 3J'ai sélectionné la réponse qui me convient avec ma version JMP.
Merci à tous pour votre aide!
Re: Racines réelles du polynôme de degré 3J'ai essayé Minimize() et la plate-forme non linéaire. Les deux fonctionnent bien pour résoudre des polynômes, mais il est facile de manquer une ou plusieurs racines à cause d'une mauvaise valeur initiale. Regarder le graphique aide.
Si vous avez installé R, vous pouvez essayer cette fonction JSL :
Names Default To Here(1);
// Function calling R, returns real roots of polynomials
// Input: a matrix of coefficients [x^0 ... x^n]
realroots = Function({p},
R Init();
R Send(p);
R Submit("roots=polyroot(p); real=Re(roots[which(round(Im(roots),12)==0)])");
real = R Get(real);
R Term();
real;
);
// Try it!
p1 = [-4 0 1]; // two real roots: ±2^2=4
p2 = [-27 0 0 1]; // one real root: 3^3=27
p3 = [7 -8 4 1]; // one real root
p4 = [1 -3 1 1]; // three real roots
ex1 = realroots(p1);
ex2 = realroots(p2);
ex3 = realroots(p3);
ex4 = realroots(p4);
Show(ex1, ex2, ex3, ex4);
Re: Racines réelles du polynôme de degré 3(Pas un mathématicien, je suis sûr que cela a quelques défauts ...) Similaire à votre idée originale, mais faites en sorte que JSL fasse le travail. Je suis presque sûr que Minimize a vu quelques améliorations depuis JMP 10. https://community.jmp.com/t5/JMPer-Cable/Minimize-and-Maximize-Functions-in-JSL/ba-p/36355/jump-to/first-unread-message
a = -2;
b = -3;
c = 5;
d = 1;
f = Function( {x},
a + b * x + c * x * x + d * x * x * x
);
lo = -1e99;
hi = 1e99;
vlo = f( lo );
vhi = f( hi );
v = 1;
nn=0;
While( (abs(v)>1e-15) ,
test = (lo + hi) / 2;
v = f( test );
If( v > 0,
If(
vhi > 0, hi = test,
vlo > 0, lo = test
),
If(
vhi < 0, hi = test,
vlo < 0, lo = test
)
);
);
New Window( "Example",
Graph Box(
X Scale( -10, 10 ),
Y Scale( -30, 30 ),
Pen Color( "red" );
Y Function( f(x), x );
pencolor("black");
V Line( test );
hline(0);
)
);
Found a zeroFound a zeroTrouvé un zéro
Si les coefficients des termes ^2 et ^3 sont trop grands, vous devrez réduire l'intervalle -1e99 à 1e99.
Re: Racines réelles du polynôme de degré 3Il y a probablement eu des améliorations depuis JMP 10. Vous pouvez essayer d'expérimenter avec les paramètres, tels que la tolérance.Re: Racines réelles du polynôme de degré 3La fonction de réduction semble être un bon moyen de le faire, mais je n'arrive pas à la faire fonctionner :
J'ai essayé votre script, mais à la ligne 3 ( minDepuisGauche = Minimiser ( Nom Expr ( F ) , { X } ) ; )
Je reçois l'alerte suivante :
"Échec de l'optimisation : Échec : Impossible de réduire la fonction objective"
J'ai la version JMP 10.0.0.
Est-ce que ça a quelque chose à voir avec ça ?
Re: Racines réelles du polynôme de degré 3Peut-être que la fonction Minimize() peut aider. Puisqu'elle trouve le minimum, plutôt que le zéro, vous devez transformer votre cubique pour que le zéro soit au minimum.Vraisemblablement, la quadrature est meilleure que la valeur absolue car la fonction Minimum indique qu'elle prendra des dérivées.
f = Expr( Power( -2 - 3 * x + 5 * Power( x, 2 ) + Power( x, 3 ), 2 ) );
x = -100;
minFromLeft = Minimize( Name Expr( f ), {x} );
xFromLeft = x;
x = 100;
minFromRight = Minimize( Name Expr( f ), {x} );
xFromRight = x;
show(xFromLeft, minFromLeft, xFromRight, minFromRight);
// result:
xFromLeft = -5.5995441248061;
minFromLeft = 1.07130883787516e-10;
xFromRight = 0.276987650239635;
minFromRight = 2.4771578468284;
En cherchant à gauche et à droite si vous connaissez de telles limites, vous devriez trouver au moins une racine réelle, et avec cela le problème devient quadratique.
Re: Racines réelles du polynôme de degré 3Merci pour cette réponse.
C'est en effet une façon de faire, mais j'ai peur que ça ne marche pas à chaque fois que j'utiliserai le script : la racine carrée d'un nombre négatif en est la cause.
Dans Excel, je suis capable de le faire, mais pas sur JMP, et je préfère plutôt ne pas utiliser deux logiciels pour un script.
Est-ce que quelqu'un a une autre façon de faire?
Re: Racines réelles du polynôme de degré 3Vous pouvez utiliser ceci formule pour obtenir la première racine, substituez cette valeur x dans l'expression pour réduire l'ordre polyomial à 2, et utilisez la solution quadratique pour obtenir les racines restantes.