.png)
カスタム関数 f(x) を定義したいと思います。
たとえば、関数が に設定されている場合、
\f{3}
が印刷されるはずです。ln(3) + 3
ln(x) + 3
関数を変更できるはずです:
\setfunc{sin(\x}}
。これは、将来の使用にのみ影響するはずです
\f{...}
そして、最初の 3 つの導関数を定義することも可能になるはずです。
コマンドはこのように実行する必要はありません。よりエレガントで実用的な方法があるかもしれません。警告: 次の環境で動作するはずです: https://tex.stackexchange.com/a/299720/101053
編集: 導関数を微分に変更しました。「微分を定義する」が何を意味するのか不明です。他の関数 (微分かそうでないかに関係なく) を単に追加できると言いたかったのです。
答え1
これが一般的に機能するのであれば、私はただ運が良かっただけです。導関数を実行するように編集しました。
編集済み 数式モードに忠実になるようにしました。 オプションの引数 (デフォルト ) を使用して異なる関数名を使用できるように編集しました。ではなく\f
より自然な構文を使用するように編集しました。マクロを提供するように編集しました。 で動作するように編集しました。\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}