Ich möchte eine mathematische Funktion in LaTeX in Abhängigkeit eines Argumentes auswerten. Nennen wir die Funktion \myMathFunction, dann soll

Open in writeLaTeX
\myMathFunction{2}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

den Wert 6 zurückgeben, wenn die Funktion definiert ist als 5*x - x^2. Außerdem wäre es schön, wenn die Funktion in einem PSTricks Plot nutzbar wäre.

Open in writeLaTeX
Code, hier editierbar zum Übersetzen:
\documentclass[pstricks]{standalone}
\usepackage{pst-plot}
\begin{document}
\begin{pspicture}(0,0)(6.5,7)
\psplot[
algebraic,
linecolor = red,
linewidth = 1pt
]{0}{TwoPi}
{\myMathFunction{x}}
\end{pspicture}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

gefragt 10 Mär '14, 23:54

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

bearbeitet 11 Mär '14, 15:32

cgnieder's gravatar image

cgnieder
22.1k253463

Die Frage ist zum Archivieren gedacht, kein Support benötigt. Antworten sind jedoch sehr willkommen! Ich antworte auf jeden Fall selbst.

(10 Mär '14, 23:54) Henri

l3fp

Das LaTeX3 Makropaket bietet umfangreiche Möglichkeiten für dieses Problem. Hier wurde der Teil l3fp verwendet, der automatisch von xparse geladen wird.

Open in writeLaTeX
Code, hier editierbar zum Übersetzen:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\myMathFunction}{m}
{ \fp_to_decimal:n {((#1) * 5) - (#1)^2} }
\ExplSyntaxOff
\begin{document}
\myMathFunction{2}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

pgfmath

Das PGF Paket besitzt ein Modul namens pgfmath, das nur dazu gedacht ist mathematische Ausdrücke zu verarbeiten. Außerdem funktioniert diese Lösung auch mit Plain TeX. Eine beispielhafte Benutzung zeigt sich hier

Open in writeLaTeX
Code, hier editierbar zum Übersetzen:
\documentclass{article}
\usepackage{pgfmath}
\newcommand*\myMathFunction[1]{\pgfmathparse{5*#1-(#1)^2}\pgfmathresult}
\begin{document}
\myMathFunction{2}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

siehe auch Original-Antwort auf TeX.SX von Jubobs.

fp

Ein weiteres Paket für diesen Zweck stellt fp dar. Im Gegensatz zu pgfmath ist fp sehr leichtgewichtig, hat dafür aber mit Rundungsfehlern und grauenhafter Syntax zu kämpfen.

Open in writeLaTeX
Code, hier editierbar zum Übersetzen:
\documentclass{article}
\usepackage[nomessages]{fp}
\newcommand*\myMathFunction[1]{\FPeval\result{trunc(((#1)*5)-(#1)^2:0)}\result}
\begin{document}
\myMathFunction{2}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

siehe auch Original-Antwort auf TeX.SX von Werner.

Integration in PSTricks

Im Prinzip eignet sich keine der obigen Lösungen für einen PSTricks Plot, da \psplot die funktionale Form erwarten und kein Makro. Jedoch lässt sich dies über ein \ifx sehr leicht mit allen anderen Lösungen verbinden.

Open in writeLaTeX
Code, hier editierbar zum Übersetzen:
\documentclass[pstricks]{standalone}
\usepackage{pst-plot}
\newcommand*\myMathFunction[1]{%
\ifx x#1 (#1*5)-(#1)^2
\else %other solution
\fi}
\begin{document}
\begin{pspicture}(-1,-1)(6.5,7)
\psaxes{->}(6.5,6)
\psplot[
algebraic,
linecolor = red,
linewidth = 1pt
]{0}{TwoPi}
{\myMathFunction{x}}
\end{pspicture}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

siehe auch Original-Antwort auf TeX.SX von Herbert.

alt text

Permanenter link

beantwortet 11 Mär '14, 00:12

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

bearbeitet 14 Mär '14, 23:18

2

Vielen Dank für das Übertragen Deiner Lösung und das kommentierte Posten der weiteren Lösungen von TeX.SE! (Herbert, Werner, Jubobs) Ich habe da mal eine 300er bounty gesetzt, um meine Anerkennung zu zeigen, und schiebe dann noch 50er nach an Teillösungen. Evtl. postet Mico ja noch seinen LuaTeX-Weg als eine Antwort.

(11 Mär '14, 09:56) stefan ♦♦
2

+100 weil sehr gute Archiv-Frage! Jetzt probiere ich glatt mal Deinen Vorschlag l3fp, damit zu rechnen, scheint mir das natürlichste, wenn ich nicht grad mit pgf bzw. TikZ arbeite.

(11 Mär '14, 10:08) Student

LuaLaTeX

Hier ist eine Lösung die auf LuaLaTeX beruht. (Fürs Original dieser Antwort siehe diesen Beitrag in TeX.SE. Der code hat ein TeX-seitiges Makro names \myMathFunction und eine Lua-seitige Funktion names mymathmacro.

Die Eingabe braucht keine Konstante zu sein; sie könnte selber das Resultat einer Kalkulation. Umgekehrt kann das Resultat von \myMathFunction als Eingabe in eine andere Lua Funktion gebraucht werden (so etwa wenn gewisse Rundungsregeln eingehalten werden müssen).

alt text

Open in writeLaTeX
Code, hier editierbar zum Übersetzen:
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Latin Modern Roman}
\usepackage{luacode} % für 'luacode' Umgebung und '\luaexec' Makro
\usepackage{luatexbase} % für '\luatexluaescapestring' Makro
% Lua-seitig
\begin{luacode}
function mymathfunction( x )
return 5*x - x^2 -- die gewünschte Funktion hier spezifieren
end
\end{luacode}
% TeX-seitig
\newcommand\myMathFunction[1]{%
\directlua{ tex.sprint(
mymathfunction( "\luatexluaescapestring{#1}" ))}}
\begin{document}
Der Wert von \texttt{\textbackslash myMathFunction\{2\}} ist
\myMathFunction{ 2 }.
Der Wert von \texttt{\textbackslash myMathFunction\{exp(1)\}} ist
\myMathFunction{\directlua{ tex.sprint(math.exp(1)) }}.
Der Wert von \texttt{\textbackslash myMathFunction\{$\pi$\}}, gerundet auf 4 Stellen, ist
\luaexec{ tex.sprint(string.format( "\%.4f", \myMathFunction{\directlua{ tex.sprint(math.pi) }}))}.
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Permanenter link

beantwortet 11 Mär '14, 15:01

Mico's gravatar image

Mico
28513
Akzeptiert-Rate: 10%

bearbeitet 15 Mär '14, 17:38

Auf meinem System gibt es einen Alias auf lualatex --output-format=dvi namens dvilualatex. Das ist halt etwas kürzer zu tippen.

(14 Mär '14, 23:20) Henri
Deine Antwort
[Vorschau ausblenden]

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Frage-Themen:

×117
×22
×10
×9

gestellte Frage: 10 Mär '14, 23:54

Frage wurde gesehen: 13,258 Mal

zuletzt geändert: 15 Mär '14, 17:38

Willkommen, erstes Mal hier? Schau mal unter FAQ!

×