Vere radici del Polinomio di terzo gradoCiao a tutti,
Qualcuno sa come calcolare le radici reali del polinomio di grado 3 con lo scripting JMP?
io ho i coefficienti dell'equazione: 0 = A + BX + C.X² + DX ^ 3. Ciò di cui ho bisogno sono le soluzioni reali.
Ho iniziato a creare una nuova tabella di dati con un sacco di righe al fine di ottenere il più vicino possibile al valore desiderato, ma ci vuole troppo tempo.
Grazie,
Re: Vere radici del Polinomio di terzo gradoHo selezionato la risposta che funziona per me con la mia versione JMP.
Grazie a tutti per il vostro aiuto!
Re: Vere radici del Polinomio di terzo gradoHo provato sia Minimize () che la piattaforma Non lineare. Entrambi funzionano bene per risolvere polinomi, ma è facile perdere una o più radici a causa di un cattivo valore iniziale. Guardare il grafico aiuta.
Se hai installato R puoi provare questa funzione 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: Vere radici del Polinomio di terzo grado(Non sono un matematico, sono sicuro che questo ha alcuni difetti ...) Simile alla tua idea originale, ma fai lavorare il JSL. Sono abbastanza sicuro che Minimize ha visto alcuni miglioramenti da 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 zeroTrovato zero
Se i coefficienti sui termini ^ 2 e ^ 3 sono troppo grandi, sarà necessario ridurre l'intervallo da -1e99 a 1e99.
Re: Vere radici del Polinomio di terzo gradoProbabilmente ci sono stati miglioramenti da JMP 10. Potresti provare a sperimentare i parametri, come la tolleranza.Re: Vere radici del Polinomio di terzo gradoLa funzione di minimizzazione sembra un buon modo per farlo, ma non riesco a farlo funzionare:
Ho provato la tua sceneggiatura, ma alla riga 3 ( minFromLeft = Minimizzare ( Nome Espr ( f ) , { X } ) ; )
Ottengo il seguente avviso:
"Ottimizzazione fallita: non riuscita: impossibile ridurre la funzione obiettivo"
Ho la versione 10.0.0 di JMP.
Ha qualcosa a che fare con quello?
Re: Vere radici del Polinomio di terzo gradoForse la funzione Minimize () può aiutare. Dal momento che trova il minimo, piuttosto che lo zero, devi trasformare il tuo cubo in modo che lo zero sia al minimo. Presumibilmente la quadratura è migliore del valore assoluto perché la funzione Minima dice che prenderà dei derivati.
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;
Cercare da sinistra e da destra se si conoscono tali limiti dovrebbe trovare almeno una radice reale e con ciò il problema diventa quadratico.
Re: Vere radici del Polinomio di terzo gradoGrazie per questa risposta.
È davvero un modo di fare, ma temo che non funzioni ogni volta che userò la sceneggiatura: la radice quadrata di un numero negativo è la ragione per cui.
In Excel sono in grado di farlo, ma non su JMP, e preferisco piuttosto non usare due software per uno script.
Qualcuno ha un altro modo di farlo?
Re: Vere radici del Polinomio di terzo gradoPuoi usare questo formula per ottenere la prima radice, sostituire quel valore x nell'espressione per ridurre il numero di poliomiale a 2 e utilizzare la soluzione quadratica per ottenere le radici rimanenti.