Como utilizar ?NumericQ para alterar a ordem de cálculo?
Ao usar funções numéricas como NIntegrate ou NMaximize, a ordem do cálculo é importante. Considere a seguinte função chamada f
:
f[a_] := NIntegrate[ (2 - a) Sin[a x], {x, 0, Pi}]
A função f
parece ser uma função bem definida, porque calcula para valores numéricos tais como f[0.5]
. O problema aparece quando para a função f
é dada um símbolo em vez de um número:
f[a]
NIntegrate::inumr : The integrand (2 - a) Sin[a x] has evaluated to non-numerical values for all sampling points in the region with boundaries {{0, Pi}}
Porque a
não está definida, a Wolfram Language não pode integrar numericamente a expressão (2 - a) Sin[a x]
com relação a x
. Este é um problema para qualquer função que calcule f[a]
antes de dar um valor para a
. Por exemplo, a Wolfram Language não pode maximizar numericamente a função f
:
NMaximize[f[a], a]
NIntegrate::inumr : The integrand (2 - a) Sin[a x] has evaluated to non-numerical values for all sampling points in the region with boundaries {{0, Pi}}
Este código dá a mesma mensagem de erro de quando apenas f[a]
é calculada. Neste exemplo, f[a]
é calculada antes da demonstração completa NMaximize.
Para mudar a ordem de cálculo, defina a função f
para calcular apenas se receber um valor numérico, usando NumericQ e teste padrão. Acrescente o padrão ?NumericQ
ao argumento da função f
:
Clear[f]
f[a_?NumericQ] := NIntegrate[ (2 - a) Sin[a x], {x, 0, Pi}]
Agora, calculando f[a]
retorna a função sem calcular em vez de produzir uma mensagem de erro. A Wolfram Language pode maximizar numericamente a nova definição de f
porque o padrão ?NumericQ
muda a ordem de cálculo:
NMaximize[f[a], a]
{3.05716, {a -> 0.581569}}}
[English]
Entre em contato com o Suporte
Caso tenha alguma dúvida sobre cobrança, ativação ou suporte técnico, estamos a sua total disposição.
1-800-WOLFRAM (+1-217-398-0700 para chamadas internacionais)
Suporte ao consumidor
Segunda–Sexta
8:00–17:00 Horário Central dos EUA
- Registro ou ativação do produto
- Informações de pré-venda e pedidos
- Ajuda com instalação e início
Suporte técnico avançado (para clientes habilitados)
Segunda–Quinta
8:00–19:00 Horário Central dos EUA
FSexta
8:30–10:00 & 11:00–17:00 Horário Central dos EUA
- Suporte técnico prioritário
- Assistência com especialistas da Wolfram
- Ajuda com a programação da Wolfram Language
- Suporte avançado de instalação