Função matemática própria f(x)

Função matemática própria f(x)
  • Gostaria de definir uma função personalizada f(x).

  • Por exemplo, \f{3} deve imprimir ln(3) + 3se a função estiver definida como ln(x) + 3.

  • Deve-se ser capaz de alterar a função: \setfunc{sin(\x}}.

  • Isto só deverá afectar futuras utilizações de\f{...}

  • E deveria ser possível definir as três primeiras derivadas.

Os comandos não precisam ser assim. Pode haver uma maneira mais elegante/prática. Aviso: Deve funcionar neste ambiente: https://tex.stackexchange.com/a/299720/101053

Editar: Derivada alterada para derivada; Não está claro o que “definir a derivada” deveria significar. Tentei dizer que posso simplesmente adicionar outras funções (sejam derivadas ou não).

Responder1

Se isso funcionar de maneira geral, tive sorte. EDITADO para fazer derivadas.

EDITADO Para ser mais fiel ao modo matemático. EDITADO para permitir nomes de funções diferentes com uso de argumento opcional (padrão \f). EDITADO para usar sintaxe mais natural \f(3)em vez de \f{3}. EDITADO para fornecer \listfuncmacro. EDITADO para trabalhar com amsmath.

Finalmente, EDITADO para permitir uma sintaxe mais geral que pode incluir números primos, subscritos etc. no próprio nome da função.

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

insira a descrição da imagem aqui

NOTA: Joel observou que o método pode ficar confuso se o próprio valor de avaliação contiver um termo entre parênteses, por exemplo, $\f ( \ln(a + 1.5) )$. A solução alternativa para isso é adotar o argumento interno, como $\f({\ln(a + 1.5)})$ou $\listfunc y''({\ln(a + 1.5)})$.

Responder2

Isso levanta mais complicações do que resolve, na minha opinião, mas aqui vai uma ideia:

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

insira a descrição da imagem aqui

Se você quer apenas a função e não as derivadas, é muito mais simples:

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

Exemplo completo:

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

insira a descrição da imagem aqui

Uma implementação diferente, onde você pode definir qualquer nome que desejar (mas cuidado para não redefinir comandos já existentes)

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

informação relacionada