?NumericQ를 사용한 계산 순서 변경
다른 언어로 읽기: Deutsch, Español, Français, 日本語, 한국어, Português, Русский, 中文
NIntegrate와 NMaximize의 제곱근을 사용할 때는 평가의 순서가 중요합니다. 다음의 함수 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 프로그래밍
- 고급 설치 지원