D
과 차별화되는 연산자 f
을 구현하고 싶습니다. Mathematica에서 D로 통근하는 함수를 정의하는 방법
Unprotect[D];
D[f[y___], x] := f[D[y, x]];
Protect[D];
D[f[Sin[x]], x]
D[f[Sin[x]] + 1, x]
불행하게도이 코드는 두 개의 다른 결과
을 생산
f[Cos[x]] (* as expected *)
Cos[x] f´[Sin[x]] (* cannot explain *)
내가 무슨 일하는 방법과 두 번째 표현식뿐만 아니라 f[Cos[x]]
로 평가하도록 대체 규칙을 수정하는 것을 알고 싶습니다.
업데이트. Solution 1 다음 솔루션은 D
연산자를 다시 정의하는 작업을 수행하는 것 같습니다. (내 자신의 코드를 완전히 이해할 수는 없지만).
PartialDerivative[x_, x_] := 1;
PartialDerivative[c_, x_] := 0 /; FreeQ[c, x];
PartialDerivative[f_ConditionalExpectation, x_] :=
ConditionalExpectation[PartialDerivative[f, x]];
PartialDerivative[(f_)[g__], x_] := Module[{i, n, p},
n = Length[SequenceHold[g]];
Sum[
p = ConstantArray[0, n]; p[[i]] = 1;
((Derivative[##1][f] &) @@ p)[g]*
PartialDerivative[SequenceHold[g][[i]], x], {i, 1, n}]];
더 많은 경험을 가진 사람이 코드를 살펴보고이 접근 방식이 괜찮은지 알 수 있으면 감사하겠습니다.