Wie zeichnet man die Grafik zum Mittelwertsatz mit TikZ?

Wie zeichnet man die Grafik zum Mittelwertsatz mit TikZ?

(Bearbeitet 23.03.2014) Kann mir jemand eine TikZ-Lösung für meine Frage geben?

Ich möchte eine Illustration des Mittelwertsatzes (Lagrange) wie folgt hinzufügen: Bildbeschreibung hier eingeben

\begin{center}
{\Huge \shadowbox{\textbf{Teorema del Valor Medio (Lagrange)}}}
\end{center}

\[\frac{{f(b) - f(a)}}{{b - a}} = f'(c)\]

Im Wesentlichen benötige ich die Achsen mit den x- und y-Beschriftungen, die Funktion, die Sekante, die Tangente und noch etwas, was im Bild fehlt: f(a), f(b) und f(c).

Ich habe das Bild, das ich erstellen möchte, mit TikZ mit GeoGebra erstellt: Bildbeschreibung hier eingeben

Antwort1

Mein Versuch mit MetaPost, hauptsächlich zum Spaß, da es oben bereits sehr gute Lösungen gibt. Das Hauptmakro, das find_all_direction_pointsauf dem directiontimeMetaPost-Makro basiert, gibt theoretisch jeden Punkt zurück, dessen Tangenten dieselbe Richtung haben, und die Anzahl dieser Punkte.

Der folgende LaTeX-Code verwendet das gmpPaket als Schnittstelle für Metapost und ist mit aktivierter Shell-Escape-Option zu setzen.

\documentclass[12pt]{scrartcl}
\usepackage[latex, shellescape]{gmp}
  \gmpoptions{everymp={input latexmp; 
    setupLaTeXMP(options="12pt", textextlabel=enable, mode=rerun);}}
\begin{document}
\begin{mpost*}[mpmem=metafun]
  % Macro that finds all points of p where the tangents share the same direction v
  vardef find_all_direction_points(expr p, v)(suffix C, n) =
    save s, q; path q; q = p;
    n:= 0; 
    s = directiontime v of p; 
    forever:
      exitunless s<>-1; 
      n := n+1;
      C[n] := point s of q;
      q := subpath(s+epsilon, infinity) of q;
      s := directiontime v of q;
    endfor;
  enddef;
  % Axes, graph, tangents and secant definitions
  u := 2cm; xmin := -0.5; xmax := 6; ymin := -0.5; ymax := 4.5;
  pair A, B, C; A = (1, 3); B = (5, 1); 
  pair C[], v; 
  v = unitvector(B-A);
  path p, secant; p = A{dir 70} ..  B{dir 60}; secant = A--B;
  find_all_direction_points(p, B-A)(C,n);
  % Function graph, and secant
  draw p scaled u ;
  draw secant scaled u withcolor red;
  % Tangent drawing
  for k= 1 upto n:
    draw (C[k]-v -- C[k] + v) scaled u withcolor green;
    draw C[k] scaled u withpen pencircle scaled 3bp;
  endfor;
  % axes and locations
  drawarrow (xmin*u, 0) -- (xmax*u, 0) ;
  drawarrow (0, ymin*u) -- (0, ymax*u) ;
  for M = A, B, C1:
    draw (u*xpart M, 0) -- u*M -- (0, u*ypart M) dashed evenly;
  endfor;
  % Labels
  label.bot("$a$", (u*xpart A, 0)); label.bot("$b$", (u*xpart B, 0)); 
  label.bot("$c$", (u*xpart C1, 0)); label.bot("$x$", (xmax*u, 0));
  label.lft("$f(a)$", (0, u*ypart A)); label.lft("$f(b)$", (0, u*ypart B)); 
  label.lft("$f(c)$", (0, u*ypart C1)); label.lft("$y$", (0, ymax*u));
  label.top("Tangent at $c$", C1*u) rotatedaround (C1*u, angle(B-A));
  label.bot("Secant", u*0.4[A,B]) rotatedaround (u*0.4[A,B], angle(B-A));
  label.bot("Another tangent", C2*u) rotatedaround (C2*u, angle(B-A));
  tN := 0.45; pair N; N = point tN along p;
  label.top("$y=f(x)$", u*N) rotatedaround(u*N, angle(direction tN of p));
\end{mpost*}
\end{document}

Bildbeschreibung hier eingeben

Antwort2

Mit einer neuen Methode, bei der die Abszisse cautomatisch bestimmt wird, ohne dass die Ableitung von Hand ausgewertet werden muss f(x). Ist das schön?

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-eucl,pstricks-add}

\def\f(#1){((#1)*(#1-5)*(#1-6)/4+1.5*(#1)-5)}
\def\m(#1,#2){(\f(#2)-\f(#1))/(#2-#1)}
\def\fp(#1){Derive(1,\f(#1))}% f'(x) 

\def\L#1{\uput[-90](#1|0,0){$#1\mathstrut$}\uput[180](0,0|#1){$f(#1)$}\psCoordinates[linestyle=dashed,linecolor=gray](#1)}

\begin{document}

\begin{pspicture}[algebraic,saveNodeCoors,PointSymbol=none,PointName=none](-1,-1)(8,8)
    \psaxes[labels=none,ticks=none]{->}(0,0)(-.5,-.5)(7.5,7.5)[$x$,0][$y$,90]
    \pstGeonode(*1 {\f(x)}){a}(*6.5 {\f(x)}){b}
    \makeatletter\pst@Verb{/ax N-a.x def /bx N-b.x def}\makeatother
    \psplot[linecolor=blue]{ax}{bx}{\f(x)}
    \pstInterFF{\m(ax,bx)}{\fp(x)}{4}{temp}
    \pstGeonode(*N-temp.x {\f(x)}){c}
    \pcline[nodesep=-1,linecolor=green](a)(b)
    \psxline[linecolor=red](c){.1(a)-.1(b)}{.1(b)-.1(a)}
    \psset{linecolor=gray,linestyle=dashed}
    \foreach \i in {a,b,c}{\L{\i}}
\end{pspicture}

\end{document}

Bildbeschreibung hier eingeben

Antwort3

Eine PSTricks-Lösung:

\documentclass{article}

\usepackage{pstricks-add}
\usepackage{xfp}

\newcommand*\Function[1]{\fpeval{(-3*(#1)^3+45*(#1)^2-189*(#1))/65+7}}
\newcommand*\ParallelPoint{\fpeval{5+sqrt(7)}}                         % need to calculate yourself
\newcommand*\ParallelTangent[1]{\fpeval{(-27*(#1)+395+42*sqrt(7))/65}} % need to calculate yourself
\begin{document}

\begin{pspicture}(-0.8,-0.4)(10.9,5.9)
{\psset{linestyle = dashed}
  \psline[linecolor = blue](1,\Function{1})(0,\Function{1})
  \psline[linecolor = blue](10,\Function{10})(0,\Function{10})
  \psline[linecolor = orange](1,0)(1,\Function{1})
  \psline[linecolor = orange](10,\Function{10})(10,0)
  \psline[linecolor = green!60](10,\ParallelTangent{10})(10,\Function{10})
  \psline[linecolor = green!60](\ParallelPoint,0)(\ParallelPoint,\Function{\ParallelPoint})(0,\Function{\ParallelPoint})}
  \psline[linecolor = orange]{->}(1,\Function{1})(10,\Function{10})
  \pcline[linestyle = none, offset = -9pt](1,\Function{1})(10,\Function{10})
  \ncput[nrot = :U]{Secant}
  \psline[linecolor = green!60]{->}(5,\ParallelTangent{5})(10,\ParallelTangent{10})
  \psaxes[labels = none, ticks = none]{->}(0,0)(-0.2,-0.2)(10.5,5.5)[$x$,0][$y$,90]
  \psplot[algebraic, linecolor = blue]{1}{10}{(-3*x^3+45*x^2-189*x)/65+7}
  \psdots(1,\Function{1})(10,\Function{10})
  \uput[270](3,\Function{3}){$y = f(x)$}
  \uput[180](5,\ParallelTangent{5}){Tangent at $c$}
  \uput[270](1,0){$a$}
  \uput[150](0,\Function{1}){$f(a)$}
  \uput[270](\ParallelPoint,0){$c$}
  \uput[210](0,\Function{\ParallelPoint}){$f(c)$}
  \uput[270](10,0){$b$}
  \uput[180](0,\Function{10}){$f(b)$}
\end{pspicture}

\end{document}

Ausgabe

Antwort4

Ist das ein Hack? Es fühlt sich an wie ein Hack ...

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}[thick]
  \path ( 1,4)        node[coordinate] (a1) {}
        (10,5)        node[coordinate] (b1) {}
        (a1) ++(0,-2) node[coordinate] (a2) {}
        (b1) ++(0,-2) node[coordinate] (b2) {};

  \path[draw,green] (a1) -- (b1);

  \path[draw,red] (a2) --
    node[coordinate,pos=0.05] (c1) {}
    node[coordinate,pos=0.2 ] (c2) {}
    node[coordinate,pos=0.4 ] (c3) {}
    (b2);

  \draw[densely dashed] (a1)
    .. controls +(0,0) and  (c1)   .. (c2)
    .. controls  (c3)  and +(-2,2) .. (b1);

  \foreach \point/\text in {a1/a , b1/b , c2/c}
    \draw[dotted]
        let \p1 = (\point)
      in
           (0  ,\y1) node[anchor=east ] {$f(\text)$}
        -- (\p1)
        -- (\x1,0  ) node[anchor=north] {$\text$};

  \draw[->] (-1.5, 0  ) -- (11,0  ) node[anchor=south east] {\textsf{x}};
  \draw[->] (   0,-1.5) -- ( 0,6.5) node[anchor=north west] {\textsf{y}};

\end{tikzpicture}
\end{document}

Es funktioniert, indem Kontrollpunkte verwendet werden. Aus dem Handbuch:

Ein oder zwei „Kontrollpunkte“ sind erforderlich. Die Mathematik dahinter ist nicht ganz trivial, aber hier ist die Grundidee: Angenommen, Sie befinden sich am Punkt x und der erste Kontrollpunkt ist y. Dann beginnt die Kurve „in Richtung y bei x zu verlaufen“, das heißt:die Tangente der Kurve bei x zeigt in Richtung y(Abschnitt 2.4, Hervorhebung hinzugefügt)

Ausgabe:

Bildbeschreibung hier eingeben

verwandte Informationen