Definición
Los máximos y mínimos de una función dada son los valores más grandes y más pequeños de la función, ya sea dentro de un rango dado o de lo contrario dentro del dominio completo de la función.
Desafío
El desafío es encontrar los máximos y mínimos locales de una función polinómica dada utilizando cualquier método que desee . No se preocupe, haré todo lo posible para explicar el desafío y mantenerlo lo más simple posible.
La entrada contendrá todos los coeficientes del polinomio variable individual en orden decreciente o creciente de potencia (depende de usted). Por ejemplo,
[3,-7,1]
representará3x2 - 7x + 1 = 0
[4,0,0,-3]
representará4x3-3=0.
¿Cómo resolver (usando derivados)?
Ahora, digamos que nuestra entrada es [1,-12,45,8]
, que no es más que la función .x3 - 12x2 + 45x + 8
La primera tarea es encontrar la derivada de esa función. Dado que es una función polinómica, es una tarea simple de hacer.
La derivada de es . Cualquier término constante presente con simplemente se multiplica. Además, si hay términos agregados / restados, entonces sus derivados también se suman o restan respectivamente. Recuerde, la derivada de cualquier valor numérico constante es cero. Aquí están algunos ejemplos:
xn
n*xn-1
xn
x3 -> 3x2
9x4 -> 9*4*x3 = 36x3
-5x2 -> -5*2*x = - 10x
2x3 - 3x2 + 7x -> 6x2 - 6x + 7
4x2 - 3 -> 8x - 0 = 8x
Ahora resuelva la ecuación equiparando el nuevo polinomio a cero y obtenga solo los valores integrales de x.
Ponga esos valores de x en la función original y devuelva los resultados. Esa debería ser la salida .
Ejemplo
Tomemos el ejemplo mencionamos anteriormente, es decir, [1,-12,45,8]
.
- Entrada:
[1,-12,45,8]
- Función:
x3 - 12x2 + 45x + 8
- Derivado ->
3x2 - 24x + 45 + 0 -> [3,-24,45]
- Resolviendo la ecuación , obtenemos o .
3x2 - 24x + 45 = 0
x = 3
x = 5
- Ahora poniendo
x = 3
yx = 5
en la función, obtenemos los valores(62,58)
. - Salida ->
[62,58]
Supuestos
Suponga que todos los coeficientes de entrada son enteros . Pueden estar en orden creciente o decreciente de poder.
Suponga que la entrada es al menos un polinomio de 2 grados . Si el polinomio no tiene soluciones enteras, puede devolver cualquier cosa.
Suponga que el resultado final serán enteros solamente.
Puede imprimir los resultados en cualquier orden. El grado del polinomio de entrada no debería ser superior a 5, por lo que su código puede manejarlo.
La entrada será válida para que las soluciones de x no sean puntos de silla.
Además, no está obligado a hacerlo por el método derivado. Puede usar cualquier método que desee.
Muestra de entrada y salida
[2,-8,0] -> (-8)
[2,3,-36,10] -> (91,-34)
[1,-8,22,-24,8] -> (-1,0,-1)
[1,0,0] -> (0)
Puntuación
Este es el código de golf, por lo que gana el código más corto.
(-1, 0, 1)
, lo que creo que es la respuesta correcta real ... aunque no estoy seguro. Si no estás de acuerdo conmigo, hazme ping en el chat.The input will be valid so that the solutions of x are not saddle points
, el caso[1,0,0,3]
parece dar un punto de silla de montar.x^3 - 12x^2 + 45x
+8 = 0
, aunque personalmente prefiero que lo escribaf(x)=x^3-12x^2+45x+8
sin el=0
porque=0
no tiene sentido ya que estamos tratando con una función, no resolviendo una ecuación.Respuestas:
Jalea , 20 bytes
Pruébalo en línea!
Explicación
La función auxiliar en este programa se tomó de la respuesta del Sr. Xcoder aquí, que se basó en la respuesta de Luis aquí.
fuente
3
es0
. editar oh ya lo hiciste nvm simplemente votó el comentario entoncesJavaScript (ES7),
129120 bytesToma los coeficientes en orden creciente de potencia.
Casos de prueba
Mostrar fragmento de código
Comentado
fuente
0,0,1
(x ^ 2 = 0)Julia 0.6 (con
Polynomials
paquete), 57 bytesPruébalo en línea!
Toma los coeficientes en orden creciente, es decir, la primera entrada es el término constante.
Ejemplo de ejecución:
fuente
Java 8,
364239227226218 bytesUtiliza la misma funcionalidad de esta respuesta mía.
-8 bytes gracias a @ OlivierGrégoire al tomar la matriz en orden inverso.
Explicación:
Pruébalo en línea.
fuente
1,0,0
(x ^ 2 = 0)int... ,i, ...; for(;f>0;)A[--f]*=f;
. A menos que me equivoque, esto debería ahorrarle al menos 4 bytes. Si hace esto, asegúrese de invertir todos sus accesos a la entrada.Wolfram Language (Mathematica) , 30 bytes
Toma un polinomio de función pura (es decir, un polinomio con
#
una variable y con un&
al final).Pruébalo en línea!
fuente
Haskell , 89 bytes
-3 bytes gracias a Laikoni.
Pruébalo en línea!
Toma los coeficientes invertidos.
fuente
d<-tail$
se puede acortar a_:d<-
.Python 3 , 156 bytes
Pruébalo en línea!
-2 bytes gracias a Mr. Xcoder
-22 bytes gracias a ovs
fuente
Python + numpy, 91
Pruébalo en línea .
fuente
Pari / GP , 28 bytes
Evaluar el polinomio en las raíces de su derivada.
Pruébalo en línea!
fuente