Esses dois resultados não deveriam ser iguais? Por que eles não são?
integrate(\(x) {x * min(-x+10, 10)},lower = 0, upper = 10)$value
> [1] 1.085709
integrate(\(x) {x * (-x+10)},lower = 0, upper = 10)$value
> [1] 166.6667
Tenha em mente que dos valores de x de 0 a 10 nunca devemos esperar obter um valor de y = -x + 10 que seja maior que 10, então min(-x+10, 10) sempre retornará (-x+10 ) desde que estejamos entre 0 e 10. Portanto, as duas integrais devem ser idênticas.
Por que eles não são?
O problema é que
min
retorna apenas um valor, não é vetorizado.Criado em 21/08/2023 com reprex v2.0.2
Editar
Se você não quiser atribuir duas vezes os mesmos nomes, a primeira para criar a função, a segunda para vetorizá-la, use o novo operador pipe.
Criado em 21/08/2023 com reprex v2.0.2
A resposta de @RuiBarradas funciona, mas encontrei uma maneira de mitigar o problema usando
pmin
:Se alguém, por algum motivo, tiver outros problemas com min() não sendo vetorizado, isso pode resolver o problema.