Eigene mathematische Funktion f(x)

Eigene mathematische Funktion f(x)
  • Ich möchte eine benutzerdefinierte Funktion f(x) definieren.

  • Beispielsweise \f{3} sollte gedruckt werden ln(3) + 3, wenn die Funktion auf eingestellt ist ln(x) + 3.

  • Man sollte die Funktion ändern können: \setfunc{sin(\x}}.

  • Dies sollte nur zukünftige Verwendungen von\f{...}

  • Und es sollte möglich sein, die ersten drei Ableitungen zu definieren.

Die Befehle müssen nicht so sein. Es gibt vielleicht einen eleganteren/praktischeren Weg. Achtung: In dieser Umgebung sollte es funktionieren: https://tex.stackexchange.com/a/299720/101053

Bearbeiten: Derivat in Derivat geändert; Es ist unklar, was „die Ableitung definieren“ bedeuten soll. Ich wollte sagen, dass ich einfach andere Funktionen hinzufügen kann (egal ob Ableitung oder nicht).

Antwort1

Wenn das grundsätzlich funktioniert, hatte ich einfach Glück. BEARBEITET, um Ableitungen zu machen.

BEARBEITET, um dem Mathematikmodus näher zu kommen. BEARBEITET, um verschiedene Funktionsnamen mit Verwendung optionaler Argumente zuzulassen (Standard \f). BEARBEITET, um eine natürlichere Syntax \f(3)anstelle von zu verwenden. BEARBEITET, um Makros \f{3}bereitzustellen . BEARBEITET, um mit zu arbeiten .\listfuncamsmath

Schließlich BEARBEITET, um eine allgemeinere Syntax zu ermöglichen, die Primzahlen, Indizes usw. im Funktionsnamen selbst enthalten kann.

\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}

Bildbeschreibung hier eingeben

HINWEIS: Joel hat darauf hingewiesen, dass die Methode verwirrend sein kann, wenn der Auswertungswert selbst einen Term in Klammern enthält, z. B. $\f ( \ln(a + 1.5) )$. Die Problemumgehung hierfür besteht darin, das innere Argument einzubeziehen, z. B. $\f({\ln(a + 1.5)})$oder $\listfunc y''({\ln(a + 1.5)})$.

Antwort2

Meiner Meinung nach führt dies eher zu Komplikationen als dass es Probleme löst, aber hier ist eine Idee:

\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}

Bildbeschreibung hier eingeben

Wenn Sie nur die Funktion und nicht die Ableitungen möchten, ist es viel einfacher:

\newcommand{\setfunc}[1]{\renewcommand\f[1]{#1}}

Vollständiges Beispiel:

\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}

Bildbeschreibung hier eingeben

Eine andere Implementierung, bei der Sie jeden beliebigen Namen festlegen können (achten Sie jedoch darauf, bereits vorhandene Befehle nicht neu zu definieren).

\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}

verwandte Informationen