Tikz Schnittpunkte zweier Funktionen auf X-Achse einzeichnen

Tabellen und Grafiken erstellen und anordnen


sf
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: Mi 23. Nov 2011, 02:12

Tikz Schnittpunkte zweier Funktionen auf X-Achse einzeichnen

Beitrag von sf »

Hallo,

ich versuche zur Zeit meine Mathematik-Mitschrift mit Latex zu realisieren, beschäftige mich allerdings noch nicht allzulange mit dem Thema.

Im speziellen versuche ich zur Zeit mit Hilfe von Tikz ein Koordinatensystem zu erstellen,
in welches ich zwei Funktionen, sowie deren Schnittpunkte mit einer gestrichelten Linie auf der X-Achse einzeichnen möchte.
Diese Punkte möchte ich dann noch mit xi* bezeichnen.

Alles bis auf die Bezeichnung habe ich auch schon mehr oder weniger hinbekommen, da allerdings die Position der Bezeichnung variieren müsste,
bin ich mir nich sicher, wie ich dies realisieren könnte.

Google habe ich natürlich auch schon brav befragt, dort hab ich aber leider nur eine Lösung gefunden um den Punkt sowohl auf X- als auch Y-Achse einzuzeichnen (d.h. zwei Striche).

Hier mein Code bisher:
\documentclass{scrartcl}

\usepackage[latin1]{inputenc}
\usepackage{ifthen}
\usepackage{tikz}
\usetikzlibrary{intersections}
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}[domain=-2:2,scale=2]

	\draw[ultra thin,color=lightgray][step=5mm] (-1.9,-1.3) grid (1.9,1.3);   % Grid
	\draw[semithick,<->] (-2.0, 0.0)--( 2.0, 0.0) node (xaxis) [right] {$x$}; % X-Achse
	\draw[semithick,<->] ( 0.0,-1.4)--( 0.0, 1.4) node (yaxis) [above] {$y$}; % Y-Achse

	% Farbdefinition
	\xdefinecolor{darkgreen}{RGB}{0, 127, 14}

	% Funktionen
	\draw[semithick,color=red, name path=F] plot[id=f]
	function{0.6*x-0.1} node[right] {$f(x)=0.6x-0.1$};
	\draw[semithick,color=darkgreen, name path=G] plot[id=g]
	function{sin(x)}    node[right] {$g(x)=\sin x$};

	\fill[name intersections={of=F and G,total=\t}][color=blue]
	\foreach \s in {1,...,\t}{(intersection-\s) circle (1pt)};

  \draw[name intersections={of=F and G,total=\t}][dashed,semithick,color=blue]
	\foreach \s in {1,...,\t}
	{
		let
    	\p1=(intersection-\s)
		in
			(\x1,0)-- (intersection-\s)
	};

\end{tikzpicture}
\end{document}
Ich einer früheren Version habe ich die Schnittpunkte von Hand bestimmt und eingezeichnet.
Falls es allerdings eine automatische Realisierung gibt, wäre es sicher für zukünftige Graphen nicht schlecht zu wissen, wie diese funktioniert.

Im Anhang habe ich ein Bild angefügt, wie die Bezeichnung aussehen soll.

Vielen Dank für jegliche Hilfe im Vorraus,
mit freundlichen Grüßen

PS: Falls man das Beispiel vereinfachen kann, z.B. die foreach Schleifen oder ähnliches zusammenfassen, bitte ich dies zu verzeihen, ich habe es nicht anders hinbekommen :(

sf
Dateianhänge
koordinatensystem.jpg
koordinatensystem.jpg (22.83 KiB) 3211 mal betrachtet

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag von bloodworks »

Like this... Ich denke mal das isses.
\documentclass{scrartcl} 

\usepackage[latin1]{inputenc} 
\usepackage{ifthen} 
\usepackage{tikz} 
\usetikzlibrary{intersections} 
\usetikzlibrary{calc} 


\begin{document} 
\begin{tikzpicture}[domain=-2:2,scale=2] 

    \draw[ultra thin,color=lightgray][step=5mm] (-1.9,-1.3) grid (1.9,1.3);   % Grid 
    \draw[semithick,<->] (-2.0, 0.0)--( 2.0, 0.0) node (xaxis) [right] {$x$}; % X-Achse 
    \draw[semithick,<->] ( 0.0,-1.4)--( 0.0, 1.4) node (yaxis) [above] {$y$}; % Y-Achse 

    % Farbdefinition 
    \xdefinecolor{darkgreen}{RGB}{0, 127, 14} 

    % Funktionen 
    \draw[semithick,color=red, name path=F] plot[id=f] 
    function{0.6*x-0.1} node[right] {$f(x)=0.6x-0.1$}; 
    \draw[semithick,color=darkgreen, name path=G] plot[id=g] 
    function{sin(x)}    node[right] {$g(x)=\sin x$}; 
    \fill[name intersections={of=F and G,total=\t}][color=blue] 
    \foreach \s in {1,...,\t}{(intersection-\s) circle (1pt)};

   \draw[ name intersections={of=F and G,total=\t}][dashed,semithick,color=blue] 
    \foreach \s in {1,...,\t} 
    { 
       let 
        \p1=(intersection-\s) 
       in 
         (intersection-\s) -- (\x1,0)
         \ifdim \x1 >0pt
   node[below] {$x_\s^*$} \else node[above] {$x_\s^*$} \fi } ; 

\end{tikzpicture} 
\end{document}
Ich hoffe jetzt mal einfach, dass der Nullpunkt auf wirklich bei 0pt liegt, sonst ist diese Lösung nicht allgemein. Und bitte frag mich nicht, was er macht, wenn man die scale oder die domain ändert. Es sieht für mich so aus, als würde sich da \total verändern. Warum und wieso ist mit aber völlig unklar. Wenn man das verhindern will muss man ggf. eine weitere Schleife einbauen, die die subscripte bei den x Bezeichnern durchgeht.
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


sf
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: Mi 23. Nov 2011, 02:12

Beitrag von sf »

bloodworks hat geschrieben:Und bitte frag mich nicht, was er macht, wenn man die scale oder die domain ändert. Es sieht für mich so aus, als würde sich da \total verändern. Warum und wieso ist mit aber völlig unklar.
Das ist echt seltsam. Das Problem tritt seltsamerweise bei unterschiedlichen Scale Werten auch unterschiedlich auf. Mal sind es 6 Schnittpunkte, mal 4. Die Domain scheint aber, solange der Scale Wert stimmt egal zu sein.

Ich werd später ein wenig recherchieren ob ich dazu eine Lösung finde. Danke dir auf jeden Fall schonmal für deine schnelle Hilfe. :)

sf
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: Mi 23. Nov 2011, 02:12

Beitrag von sf »

Hallo,

ich denke ich habe meinen Fehler gefunden. Es gibt eine Option "smooth" die dafür sorgt, dass eine Funktion als Kurve anstatt zusammengesetzter Linien geplottet wird.
The smooth option joins these points with a curve, in contrast to line segments.
Quelle: http://www.tug.org/TUGboat/tb28-1/tb88mertz.pdf

Wenn ich also...
(...)
    \draw[smooth,semithick,color=red, name path=F] plot[id=fx] function{0.6*x-0.1} node[right] {$f(x)=0.6x-0.1$};
(...)
schreibe, entstehen auch bei anderen Scale Werten nur 3 Punkte.

PS: Nochmal danke für deine Lösung mit der if Bedingung!

Mfg

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag von bloodworks »

Ah ja das hört sich vernünftig an. Allerdings frage ich mich, warum es dann mehr als zwei Nummern gibt. Ich würde ja erwarten, dass dort nur zwei Segmente sind.
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


sf
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: Mi 23. Nov 2011, 02:12

Beitrag von sf »

Gute Frage, versteh ich auch nicht so ganz. Aber wie gesagt, ich habe verschiedene Scale Werte durchprobiert und festgestellt, dass die Anzahl der Punkte immer variiert hat. Deswegen hatte ich dann die Vermutung, dass es sich um irgendeine Art von Ungenauigkeit handeln müsste.

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag von bloodworks »

Ja in der Tat. Also Ungenau ist TeX in der Tat. Das kann man aber auch mit dem Einsatz von Gnuplot und einer hohen samples Rate verbessen. zB http://www.disk0s1.de/posts/latex/ein-p ... -pgfplots/

Aber im großen und ganzen holt pgf schon das Maximale aus (La)TeX raus.

Grüße
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


guy.brush™
Forum-Century
Forum-Century
Beiträge: 185
Registriert: So 8. Aug 2010, 19:43
Wohnort: Earth

Beitrag von guy.brush™ »

Ich kann gerade den Code nicht ausprobieren, aber mir fiel noch ein Befehl ein, vielleicht erleichtert der das Gewünschte etwas?
(2,3) |- (4,2)
[Im Handbuch bei "perpendicular" zu finden.]

Letztendlich bezeichnet obiger Ausdruck, so wie ich das verstanden habe, den Schnittpunkt einer vertikalen Linie durch den Punkt (2,3) und einer horizontalen Linie durch den Punkt (4,2).
Arch Linux - KDE - TeXLive - Kile - \me = Advanced Newbie

Interessensschwerpunkte: Mathematik- und Formelsatz sowie mathematische (Mikro-)Typographie
Offenes Problem: negierte \xarrow-Pfeile beliebiger Länge

Benutzeravatar
cgnieder
Forum-Meister
Forum-Meister
Beiträge: 730
Registriert: Fr 22. Okt 2010, 18:37
Wohnort: Herrenberg
Kontaktdaten:

Beitrag von cgnieder »

An guy.brush(TM)s Vorschlag musste ich auch spontan denken. Geht damit auch, ob es einfacher ist, wage ich allerdings zu bezweifeln...
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{ifthen,tikz}
\usetikzlibrary{intersections,calc}

\begin{document}
\begin{tikzpicture}[domain=-2:2,scale=2]
  \draw[ultra thin,color=lightgray][step=5mm] (-1.9,-1.3) grid (1.9,1.3);  % Grid
  \draw[semithick,->] (-2.0, 0.0)--( 2.0, 0.0) node (x-axis) [right] {$x$}; % X-Achse
  \draw[semithick,->] ( 0.0,-1.4)--( 0.0, 1.4) node (y-axis) [above] {$y$}; % Y-Achse
  \draw[semithick] (1,.05) -- (1,-.05) node [below] {\small$1$};
  \draw[semithick] (.05,1) -- (-.05,1) node [left] {\small$1$};

  % Farbdefinition
  \xdefinecolor{darkgreen}{RGB}{0, 127, 14}

  % Funktionen
  \draw[smooth,semithick,color=red, name path=F] plot[id=f]
    function{0.6*x-0.1} node[right] {$f(x)=0.6x-0.1$};
  \draw[smooth,semithick,color=darkgreen, name path=G] plot[id=g]
    function{sin(x)}    node[right] {$g(x)=\sin x$};
  \fill[name intersections={of=F and G,total=\t}][color=blue]
    \foreach \s in {1,...,\t}{(intersection-\s) circle (1pt)};

  \draw[ name intersections={of=F and G,total=\t}][dashed,semithick,color=blue]
    \foreach \s in {1,...,\t}
      {
        (intersection-\s) -- (intersection-\s |- x-axis)
        ($(intersection-\s |- x-axis)!1.1mm!180:(intersection-\s)$) node {$x_\s^*$}
      };
\end{tikzpicture}
\end{document}
Gruß
Clemens
Paketauthor

sf
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: Mi 23. Nov 2011, 02:12

Beitrag von sf »

Oh, interessant. Damit war auch das von mir erwähnte Beispiel[1] gelöst, bei dem jeweils eine Linie zu jeder Achse gezeichnet wurde. Genau genommen stammen daher überhaupt erst die Namen für die Achsen in meinem Code. Die hatte ich ursprünglich nämlich nicht benannt.

Leider habe ich es nicht geschafft genanntes Beispiel für meine Bedürfnisse umzusetzen. Muss ich mir aber in einer ruhigen Minuten auf jeden Fall auch noch einmal genauer anschauen, damit ich dahinter steige.

Danke auf jeden Fall auch dir für deine Lösung.

MfG
sf

[1] http://www.texample.net/tikz/examples/i ... ing-lines/

Antworten