Wolfram Computation Meets Knowledge

?NumericQ를 사용한 계산 순서 변경

NIntegrateNMaximize의 제곱근을 사용할 때는 평가의 순서가 중요합니다. 다음의 함수 f의 예를 참조하십시오.

f[a_] := NIntegrate[ (2 - a) Sin[a x], {x, 0, Pi}]

함수 f f[0.5] 등의 수치로 계산할 수 있어 명확하게 정의 된 함수처럼 보입니다. 그러나 함수 f에 숫자가 아닌 문자가 주어지면 문제가 발생합니다.

f[a]
NIntegrate::inumr :  피 적분함수 (2 - a) Sin[a x]는 경계 {{0, Pi}} 영역의 모든 샘플링 포인트에 대해 평가 후 수치가 아닌 값으로 평가되었습니다.

a 가 정의되어 있지 않기 때문에 Wolfram 언어는 (2 - a) Sin[a x]식을 x에 대한 수치적 적분을 실행할 수 없습니다. 이것은  a의 값이 정의되기 전에 f[a]를 평가하는 모든 함수가 가진 문제입니다.  예를 들어, Wolfram 언어는 함수 f를 수치적으로 극대화 할 수 없습니다.

NMaximize[f[a], a]
NIntegrate::inumr :  피 적분함수 (2 - a) Sin[a x]는 경계 {{0, Pi}} 영역의 모든 샘플링 포인트에 대해 숫자가 아닌 값으로 평가되었습니다.

이 코드 역시  f[a]를 평가했을 때와 같은 오류 메세지를 생성합니다.  이 예제에서 NMaximize 문장 전체가 평가되기 이전에 f[a]가 먼저 평가됩니다.

평가의 순서를 변경하려면 NumericQ페턴 테스팅을 사용하여 함수f가 수치적 값을 갖는 경우에만 이를 평가하도록 정의합니다. 함수 f의 인수에 패턴 ?NumericQ를 추가합니다.

Clear[f]
f[a_?NumericQ] := NIntegrate[ (2 - a) Sin[a x], {x, 0, Pi}]

이제 f[a]를 평가하면 오류 메세지 대신 함수가 평가되지 않은 채로 반환됩니다. 패턴 ?NumericQ로 계산의 순서를 변경하였으므로, Wolfram 언어는 f의 새로운 정의의 수치적 극대화가 가능합니다.

NMaximize[f[a], a]
 {3.05716, {a -> 0.581569}}}

[English]

설명이 도움이 되었나요?
아니오

하실 말씀이 있습니까?

피드백 감사합니다.

제출하기

지원 문의

청구서, 제품 동기화에 관한 질문에서 기술적인 질문까지 부담없이 문의하세요.

1-800-WOLFRAM (국제 전화는 +1-217-398-0700)

고객 지원

월요일 - 금요일
8am–5pm 중부 표준시

  • 제품 등록 및 동기화
  • 구매 전 정보 및 주문
  • 설치 및 동작

고급 기술지원 (해당 고객을 대상으로)

월요일 - 목요일
8am–7pm 중부 표준시

금요일
8:30–10am & 11am–5pm 중부 표준시

  • 우선적 기술지원
  • Wolfram 전문가들의 제품 지원
  • Wolfram 프로그래밍
  • 고급 설치 지원