Reelle Wurzeln des Polynoms 3. GradesHallo zusammen,
Weiß jemand wie reale Wurzeln des Polynoms 3. Grades mit JMP-Scripting zu berechnen?
Ich habe die Koeffizienten der Gleichung: 0 = A + BX + C.X² + DX^3. Was ich brauche, sind die echten Lösungen.
Ich habe angefangen, eine neue Datentabelle mit vielen Zeilen zu erstellen, um dem gewünschten Wert so nahe wie möglich zu kommen, aber es dauert zu lange.
Vielen Dank,
Betreff: Reelle Wurzeln des Polynoms 3. GradesIch habe die Antwort ausgewählt, die für mich mit meiner JMP-Version funktioniert.
Vielen Dank für Ihre Hilfe!
Betreff: Reelle Wurzeln des Polynoms 3. GradesIch habe sowohl Minimize() als auch die Nonlinear-Plattform ausprobiert. Beide funktionieren gut, um Polynome zu lösen, aber es ist leicht, eine oder mehrere Wurzeln wegen eines schlechten Anfangswerts zu übersehen. Ein Blick auf die Grafik hilft.
Wenn Sie R installiert haben, können Sie diese JSL-Funktion ausprobieren:
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);
Betreff: Reelle Wurzeln des Polynoms 3. Grades(Kein Mathematiker, ich bin sicher, das hat einige Fehler ...) Ähnlich wie bei Ihrer ursprünglichen Idee, aber lassen Sie JSL die Arbeit erledigen. Ich bin mir ziemlich sicher, dass Minimize seit JMP 10 einige Verbesserungen erfahren hat. 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 zeroNull gefunden
Wenn die Koeffizienten der Terme ^2 und ^3 zu groß sind, müssen Sie das Intervall von -1e99 bis 1e99 verkleinern.
Betreff: Reelle Wurzeln des Polynoms 3. GradesWahrscheinlich gab es seit JMP 10 Verbesserungen. Sie können versuchen, mit den Parametern zu experimentieren, z. B. der Toleranz.Betreff: Reelle Wurzeln des Polynoms 3. GradesDie Minimierungsfunktion scheint eine gute Möglichkeit zu sein, aber ich kann sie nicht zum Laufen bringen:
Ich habe Ihr Skript ausprobiert, aber in Zeile 3 ( minVonLinks = Minimieren ( Name Ausdruck ( f ) , { x } ) ; )
Ich bekomme folgende Warnung:
"Optimierung fehlgeschlagen: Fehlgeschlagen: Zielfunktion kann nicht verringert werden"
Ich habe die JMP-Version 10.0.0.
Hat es etwas damit zu tun?
Betreff: Reelle Wurzeln des Polynoms 3. GradesVielleicht kann die Minimize()-Funktion helfen. Da sie das Minimum und nicht die Null findet, müssen Sie Ihre Kubik so transformieren, dass die Null am Minimum ist.Vermutlich ist das Quadrieren besser als der absolute Wert, da die Minimum-Funktion besagt, dass Ableitungen verwendet werden.
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;
Die Suche von links und rechts, wenn Sie solche Grenzen kennen, sollte mindestens eine echte Wurzel finden, und damit wird das Problem quadratisch.
Betreff: Reelle Wurzeln des Polynoms 3. GradesVielen Dank für diese Antwort.
Es ist in der Tat eine Möglichkeit, aber ich fürchte, das wird nicht immer funktionieren, wenn ich das Skript verwende: Die Quadratwurzel einer negativen Zahl ist der Grund dafür.
In Excel kann ich das, aber nicht in JMP, und ich bevorzuge es lieber, nicht zwei Softwares für ein Skript zu verwenden.
Hat jemand eine andere Möglichkeit, es zu tun?
Betreff: Reelle Wurzeln des Polynoms 3. GradesSie können dies verwenden Formel Um die erste Wurzel zu erhalten, setzen Sie diesen x-Wert in den Ausdruck ein, um die Polyomialordnung auf 2 zu reduzieren, und verwenden Sie die quadratische Lösung, um die verbleibenden Wurzeln zu erhalten.