Raíces reales de grado 3 polinomio.Hola a todos,
Alguien sabe como Cómo calcular las raíces reales del polinomio grado 3 con scripts JMP?
yo tengo los coeficientes de la ecuación: 0 = A + BX + C.X² + DX ^ 3. Lo que necesito son las soluciones reales.
Comencé a crear una nueva tabla de datos con muchas filas para acercarme lo más posible al valor deseado, pero toma demasiado tiempo.
Gracias,
Re: Raíces reales de grado 3 polinomio.He seleccionado la respuesta que me funciona con mi versión JMP.
¡Gracias por toda tu ayuda!
Re: Raíces reales de grado 3 polinomio.Probé tanto Minimize () como la plataforma no lineal. Ambos funcionan bien para resolver polinomios, pero es fácil perder una o más raíces debido a un mal valor inicial. Mirando la gráfica ayuda.
Si tienes R instalada, puedes probar esta función 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: Raíces reales de grado 3 polinomio.(No soy matemático, estoy seguro de que esto tiene algunos defectos ...) Similar a tu idea original, pero haz que JSL haga el trabajo. Estoy bastante seguro de que Minimize ha visto algunas mejoras desde 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 zeroEncontró un cero
Si los coeficientes en los términos ^ 2 y ^ 3 son demasiado grandes, deberá reducir el intervalo de -1e99 a 1e99.
Re: Raíces reales de grado 3 polinomio.Probablemente ha habido mejoras desde JMP 10. Puede intentar experimentar con los parámetros, como la tolerancia.Re: Raíces reales de grado 3 polinomio.La función de minimizar parece ser una buena forma de hacerlo, pero no puedo hacer que funcione:
He probado tu guión, pero en la fila 3 ( minFromLeft = Minimizar ( Nombre Expr ( F ) , { X } ) ; )
Me sale la siguiente alerta:
"Falló la optimización: falló: no se puede disminuir la función del objetivo"
Tengo la versión JMP 10.0.0.
¿Tiene algo que ver con eso?
Re: Raíces reales de grado 3 polinomio.Tal vez la función Minimizar () pueda ayudar. Ya que encuentra el mínimo, en lugar del cero, tiene que transformar su cubic para que el cero esté en el mínimo. Presumiblemente, la cuadratura es mejor que el valor absoluto porque la función Mínima dice que tomará derivados.
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;
La búsqueda desde la izquierda y la derecha, si conoce tales límites, debe encontrar al menos una raíz real, y con eso el problema se vuelve cuadrático.
Re: Raíces reales de grado 3 polinomio.Gracias por esta respuesta.
De hecho, es una forma de hacerlo, pero me temo que no funcionará cada vez que use el script: la razón cuadrada es la raíz cuadrada de un número negativo.
En Excel puedo hacerlo, pero no en JMP, y prefiero no usar dos softwares para un script.
¿Alguien tiene otra forma de hacerlo?
Re: Raíces reales de grado 3 polinomio.Puedes usar esto fórmula para obtener la primera raíz, sustituya ese valor de x en la expresión para reducir el orden poliomial a 2, y use la solución cuadrática para obtener las raíces restantes.