Tikz Schnittpunkte zweier Funktionen auf X-Achse einzeichnen

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Tikz Schnittpunkte zweier Funktionen auf X-Achse einzeichnen

von sf » Do 24. Nov 2011, 00:47

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/

von cgnieder » Mi 23. Nov 2011, 23:06

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ß

von guy.brush™ » Mi 23. Nov 2011, 22:05

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).

von bloodworks » Mi 23. Nov 2011, 16:44

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

von sf » Mi 23. Nov 2011, 16:36

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.

von bloodworks » Mi 23. Nov 2011, 16:34

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.

von sf » Mi 23. Nov 2011, 16:25

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

von sf » Mi 23. Nov 2011, 14:46

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. :)

von bloodworks » Mi 23. Nov 2011, 11:03

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.

Tikz Schnittpunkte zweier Funktionen auf X-Achse einzeichnen

von sf » Mi 23. Nov 2011, 02:41

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) 3306 mal betrachtet

Nach oben