.png)
사용자 정의 함수 f(x)를 정의하고 싶습니다.
예를 들어 기능이 로 설정된 경우
\f{3}
인쇄해야 합니다 .ln(3) + 3
ln(x) + 3
다음 기능을 변경할 수 있어야 합니다
\setfunc{sin(\x}}
.이는 향후 사용에만 영향을 미칩니다.
\f{...}
그리고 처음 세 개의 도함수를 정의하는 것이 가능해야 합니다.
명령에는 이런 식으로 할 필요가 없습니다. 좀 더 우아하고 실용적인 방법이 있을 수 있습니다. 경고: 다음 환경에서 작동해야 합니다. https://tex.stackexchange.com/a/299720/101053
편집: 파생 상품을 파생 상품으로 변경했습니다. "미분 정의"가 무엇을 의미하는지 불분명합니다. 나는 단순히 다른 함수(미분이든 아니든)를 추가할 수 있다고 말하려고 했습니다.
답변1
이것이 일반적으로 작동한다면 운이 좋았을 것입니다. 파생 상품을 만들기 위해 편집되었습니다.
편집됨 수학 모드에 더 충실합니다. 선택적 인수(기본값)를 사용하여 다른 함수 이름을 허용하도록 편집되었습니다 \f
. .NET \f(3)
대신 더 자연스러운 구문을 사용하도록 편집되었습니다 \f{3}
. 매크로를 제공하도록 편집되었습니다 \listfunc
. 와 함께 작동하도록 편집되었습니다 amsmath
.
마지막으로 함수 이름 자체에 소수, 아래 첨자 등을 포함할 수 있는 보다 일반적인 구문을 허용하도록 편집되었습니다.
\documentclass{article}
\usepackage{amsmath}% BREAKS ORIGINAL CODE; REQUIRES \protected@edef IN \setfunc
\makeatletter
\newcommand\setfunc[2][f]{\expandafter\protected@edef\csname#1\endcsname(##1){#2}}
\makeatother
\def\func#1(#2){\csname#1\endcsname(#2)}
\def\listfunc#1(#2){#1(#2)=\func#1(#2)}
\newcommand\x{(##1)}
\begin{document}
\setfunc{\sin\x} I can list the function: $\listfunc f(3)$\par
or I can just print out $\f(x+y)$.\par
or with a general input syntax: $\func f(x+y)$\par
\setfunc[g'_y]{\ln\x + 3\x^2} Now we can have $\listfunc g'_y(7)$\par
\medskip
Derivatives:\par
\setfunc[y]{4\x^5 - 2\x^2 +3}
\setfunc[y']{20\x^4 - 4\x}
\setfunc[y'']{80\x^3 - 4}
\setfunc[y''']{240\x^2}
\setfunc[y^{iv}]{480\x}
$\listfunc y(2)$\par
$\listfunc y'(2)$\par
$\listfunc y''(2)$\par
$\listfunc y'''(2)$\par
$\listfunc y^{iv}(2)$\par
\end{document}
참고: Joel은 평가 값 자체에 괄호 안에 용어가 포함되어 있으면 방법이 혼동될 수 있다고 지적했습니다 $\f ( \ln(a + 1.5) )$
. 이에 대한 해결 방법은 $\f({\ln(a + 1.5)})$
또는 와 같은 내부 인수를 수용하는 것입니다 $\listfunc y''({\ln(a + 1.5)})$
.
답변2
제 생각에는 이로 인해 해결되는 것보다 더 많은 복잡성이 발생하지만 여기에 아이디어가 있습니다.
\documentclass{article}
\makeatletter
\newcommand{\setfunc}[4]{%
\@namedef{f@}##1{#1}%
\@namedef{f@'}##1{#2}%
\@namedef{f@''}##1{#3}%
\@namedef{f@'''}##1{#4}%
}
\def\f#1#{\@nameuse{f@#1}}
\makeatother
\begin{document}
\setfunc{\sin(#1)}{\cos(#1)}{-\sin(#1)}{-\cos(#1)}
$\f{x}$ $\f'{1}$ $\f''{\pi}$ $\f'''{\pi/2}$
\setfunc{\log(#1)+1}{}{}{}
$\f{3}$
\end{document}
파생 상품이 아닌 함수만 원하면 훨씬 간단합니다.
\newcommand{\setfunc}[1]{\renewcommand\f[1]{#1}}
전체 예:
\documentclass{article}
\newcommand{\f}[1]{} % initialize
\newcommand{\setfunc}[1]{\renewcommand{\f}[1]{#1}}
\begin{document}
\setfunc{\sin(#1)}
$\f{x}+\f{3}$
\setfunc{\log(#1)+1}
$\f{3}$
\end{document}
원하는 이름을 설정할 수 있는 다른 구현(단, 기존 명령을 재정의하지 않도록 주의)
\documentclass{article}
\newcommand{\setfunc}[2][\f]{\def#1##1{#2}}
\begin{document}
\setfunc{\sin(#1)}
$\f{x}+\f{3}$
\setfunc[\g]{\log(#1)+1}
$\g{3}$
\end{document}