Wolfram Computation Meets Knowledge

Como utilizar ?NumericQ para 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]

Este artigo foi útil?
Sim
Não

Algum comentário?

Obrigado pelo seu feedback.

Enviar

Contate o Suporte

Se você tiver alguma dúvida sobre cobrança, ativação ou algo mais técnico, estamos prontos para ajudá-lo.

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