Definição
Os máximos e mínimos de uma determinada função são os maiores e menores valores da função, dentro de um determinado intervalo ou de outra forma, dentro de todo o domínio da função.
Desafio
O desafio é encontrar os máximos e mínimos locais de uma determinada função polinomial usando qualquer método que você desejar . Não se preocupe, vou tentar o meu melhor para explicar o desafio e mantê-lo o mais simples possível.
A entrada conterá todos os coeficientes do polinômio de variável única na ordem de potência decrescente ou crescente (até você). Por exemplo,
[3,-7,1]
representará3x2 - 7x + 1 = 0
[4,0,0,-3]
representará4x3-3=0.
Como resolver (usando derivativos)?
Agora, digamos que nossa entrada seja [1,-12,45,8]
, que nada mais é que a função .x3 - 12x2 + 45x + 8
A primeira tarefa é encontrar a derivada dessa função. Como é uma função polinomial, é de fato uma tarefa simples de executar.
A derivada de é . Quaisquer termos constantes presentes com são simplesmente multiplicados. Além disso, se houver termos adicionados / subtraídos, seus derivados também serão adicionados ou subtraídos, respectivamente. Lembre-se, a derivada de qualquer valor numérico constante é zero. Aqui estão alguns exemplos:
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
Agora resolva a equação equiparando o novo polinômio a zero e obtenha apenas os valores integrais de x.
Coloque esses valores de x na função original e retorne os resultados. Essa deve ser a saída .
Exemplo
Vamos pegar o exemplo que mencionamos anteriormente, ou seja [1,-12,45,8]
,.
- Entrada:
[1,-12,45,8]
- Função:
x3 - 12x2 + 45x + 8
- Derivada ->
3x2 - 24x + 45 + 0 -> [3,-24,45]
- Resolvendo a equação , obtemos ou .
3x2 - 24x + 45 = 0
x = 3
x = 5
- Agora, colocando
x = 3
ex = 5
na função, obtemos os valores(62,58)
. - Saída ->
[62,58]
Premissas
Suponha que todos os coeficientes de entrada sejam inteiros . Eles podem estar em ordem crescente ou decrescente de poder.
Suponha que a entrada seja pelo menos um polinômio de 2 graus . Se o polinômio não tiver soluções inteiras, você poderá retornar qualquer coisa.
Suponha que o resultado final será apenas números inteiros.
Você pode imprimir os resultados em qualquer ordem. O grau do polinômio de entrada não seria superior a 5, para que seu código possa lidar com isso.
A entrada será válida para que as soluções de x não sejam pontos de sela.
Além disso, você não é forçado a fazê-lo pelo método derivativo. Você pode usar qualquer método que desejar.
Entrada e saída de amostra
[2,-8,0] -> (-8)
[2,3,-36,10] -> (91,-34)
[1,-8,22,-24,8] -> (-1,0,-1)
[1,0,0] -> (0)
Pontuação
Isso é código-golfe, então o código mais curto vence.
(-1, 0, 1)
, que acredito ser a resposta correta real ... embora não tenha certeza. Se você não concorda comigo, envie-me um bate-papo.The input will be valid so that the solutions of x are not saddle points
, o caso[1,0,0,3]
parece dar um ponto de sela.x^3 - 12x^2 + 45x
+8 = 0
, embora pessoalmente prefira que você o escreva comof(x)=x^3-12x^2+45x+8
sem o=0
porque=0
não faz sentido, pois estamos lidando com uma função, não resolvendo uma equação.Respostas:
Gelatina , 20 bytes
Experimente online!
Explicação
A função auxiliar deste programa foi retirada da resposta do Sr. Xcoder aqui, que foi baseada na resposta de Luis aqui
fonte
3
é0
. editar oh você já fez nvm apenas upvoted o comentário entãoJavaScript (ES7),
129120 bytesToma os coeficientes em ordem crescente de poder.
Casos de teste
Mostrar snippet de código
Comentado
fonte
0,0,1
(x ^ 2 = 0)Julia 0.6 (com
Polynomials
pacote), 57 bytesExperimente online!
Toma coeficientes em ordem crescente, ou seja, a primeira entrada é o termo constante.
Exemplo de execução:
fonte
Java 8,
364239227226218 bytesUsa a mesma funcionalidade desta resposta minha.
-8 bytes graças a @ OlivierGrégoire , tomando a matriz em ordem inversa.
Explicação:
Experimente online.
fonte
1,0,0
(x ^ 2 = 0)int... ,i, ...; for(;f>0;)A[--f]*=f;
. A menos que eu esteja enganado, isso deve economizar pelo menos 4 bytes. Se você fizer isso, inverta todos os seus acessos à entrada.Wolfram Language (Mathematica) , 30 bytes
Toma um polinômio de função pura (ou seja, um polinômio com
#
uma variável e com um&
no final).Experimente online!
fonte
Haskell , 89 bytes
-3 bytes graças a Laikoni.
Experimente online!
Toma coeficientes invertidos.
fonte
d<-tail$
pode ser reduzido para_:d<-
.Python 3 , 156 bytes
Experimente online!
-2 bytes graças ao Sr. Xcoder
-22 bytes graças ao ovs
fonte
Python + numpy, 91
Experimente online .
fonte
Pari / GP , 28 bytes
Avalie o polinômio nas raízes de sua derivada.
Experimente online!
fonte