Mathematica에서 함수를 어떻게 정의합니까?
나는 쓸 때 W[f_] := Integrate[f[x], {x, 0, π}]나는 바로 그 결론을 내릴 수있다 W[Sin] = 2, W[Cos] = 0, W[Log] = π (-1 + Log[π])등 그러나 나는 정의 드릴 수 없습니다 W[Sin + Cos]또는 W[Sin[Sin]]등 도움을 주시기 바랍니다.
답변
문제는 기능이 기능에서 작동한다는 것입니다.
W[f_] := Integrate[f[x], {x, 0, Pi}]
W기능을 제공해야합니다. 표현식 Sin+Cos또는 Sin[Sin]이러한 WL 기능하지 않기 때문에 실패합니다. 기능적 공간에서 작업 할 때 우리는 구성 연산자 @*를 가지고 \*있지만 일반 표현식과 함께 작동하도록 조정 된 WL의 내장 함수를 사용하려는 경우 충분하지 않습니다. 그러나 기능 공간에서 작동하도록 WL의 기능을 채택하는 한 가지 방법은 FunctionalConstruct다음과 같습니다.
FunctionalConstruct[op_, fs__] := Function[x, op @@ Through[{fs}[x]]];
FunctionalConstruct[op_] := op;
f = FunctionalConstruct[Plus, Sin, Cos];
ga = FunctionalConstruct[Sin, Sin];
gb = FunctionalConstruct[Sin@*Sin];
이러한 명확한 적분에 대해 어떤면에서는 이제 간단히 작성하는 것이 더 자연 스러울 것입니다.
Integrate[f, {0, Pi}]
Integrate[ga, {0, Pi}]
Integrate[gb, {0, Pi}]
기능적 공간이지만 수학으로는 (기능 WRT 목적으로 표현 선회 부정 적분 가변 수를 사용하는 것이 매우 유용하기 때문에 x, y우리는 얻을 등)를 W자동 적분을 수행하기 전에 더미 변수 함수를 적용 :
W[f]
W[ga]
W[gb]
2
파이 StruveH [0, 1]
파이 StruveH [0, 1]
올바른 헤드 / 기능을에 전달했는지 확인하십시오 W. 예를 들어, 적분의 여파 평가는 말할 것도없고 MMA에서 분명히 인식 할 수없는를 Sin[Sin] @ x제공합니다 Sin[Sin][x]. 따라서 하나의 선택적 솔루션이 될 수 있습니다.
W[Sin[#] + Cos[#] &]
W[Sin @* Sin]
@*컴포지션은 어디에 있습니까 ?
Sin인수를받는 것 --- Sin[7]은 숫자입니다.
반대로, Sin+Cos논쟁이 필요한 것이 아닙니다! 귀하의 기능은 예를 들어 평가하려고합니다. (Sin+Cos)[7]도움 없이는 이해하지 못합니다.
따라서 W의 인수를 적절하게 인수를 취하는 것으로 바꿔야합니다.
넌 말할 수있다
g[x]:= Sin[x]+Cos[x]
W[g]
예를 들면. 또는 순수 함수 (#)를 사용하여 익명으로 수행 할 수 있습니다.
W[Sin[#]+Cos[#]&]
들어 Sin + Cos당신이 정의 할 수 있습니다 SubValues위해 CirclePlus:
CirclePlus[f_, g_][x] := f[x] + g[x]
그때:
W[Sin ⊕ Cos]
2