Hallo miteinander,

Ich habe für mein Anfängerpraktikum im Physik-Studium den Brechungsindex einer Plexiglasscheibe bestimmen sollen und würde mein Ergebnis gerne in Latex graphisch mit pgfplots präsentieren. Mein Code sieht folgendermaßen aus:

`\begin{figure}
    \centering
        \begin{tikzpicture}
            \begin{axis}[
            height = 1.2*\plotheight,
            width = 1.2*\plotwidth,
            xtick = {},
            ytick = {}, 
            xlabel = $\alpha$ $\si{[rad]}$,
            ylabel = $\Delta s$ $ \si{[\micro m]}$, 
            xmin = -0.07, 
            xmax = 0.07, 
            ymin = 0, 
            ymax = 14.500,
            grid = major,
            smooth,
            scaled ticks=false,
            tick label style={/pgf/number format/fixed}
               ]

                \addplot[blue,domain = {-0.07:0.07}]{2*11000*(1 - 1.40576 - cos(deg(x)) + sqrt(1.40576^2 - sin(deg(x))^2))};                    
        \end{axis}
      \end{tikzpicture} 
    \caption{generic caption}
    \label{abb;brechungsindex}
  \end{figure}`

Und so sieht der Plot aus:

alt text

Bitte beachtet, dass ich den Befehl "smooth" schon verwendet habe. Eigentlich sollte der Plot parabelförmig sein, das bestätigen auch Desmos und Geogebra im gleichen Bildausschnitt.

Danke schon mal für die Mühen,

Adrian

gefragt 19 Jun '19, 18:10

adrian_bl's gravatar image

adrian_bl
1112
Akzeptiert-Rate: 0%

bearbeitet 19 Jun '19, 18:12

Eine Funktion mit sinus und cosinus ergibt keine Parabel.

(19 Jun '19, 18:35) Ulrike Fischer
1

@adrian_bl Ich vermute, dass LaTeX Rundungsfehler begeht, da große Zahlen 10e4 mit kleinen Zahlen 10e0 zusammenspielen. Noch schlimmer wird es, wenn man samples=500 einstellt.
Mit
\addplot[blue,domain = {-0.07:0.07}, trig format plots=rad, samples=10]{2*11000*(1 - 1.40576 - cos(x) + sqrt(1.40576^2 - sin(x)^2))};
ergibt es zumindest die gewünschte Parabelform.

Für haargenaue Werte könnte sowas wie SageTeX nötig sein.

(19 Jun '19, 18:49) cis

PS: Bitte achte darauf, dass Dein Minimalbeispiel vollständig und lauffähig ist. Da ist einiges dabei, für das es nicht einfach reicht, einen Dokumentrahmen und pgfplots zu ergänzen!

(19 Jun '19, 18:49) cis

Für kleine Werte in Bereich -0.07 bis 0.07 schon. Das hätte ich noch klarstellen sollen. Im Bereich den ich brauche, ist der Verlauf annähernd parabelförmig, habe ich bereits überprüft mit anderen Funktionsplottern (Desmos, Geogebra).

(19 Jun '19, 18:50) adrian_bl

@UlrikeFischer Ist doch klar, was er meint - spätestens, wenn man mal Wolfram|Alpha oder sowas anschaut. ;) (€dit: Wolfram|Alpha)

(19 Jun '19, 19:09) cis
1

Nicht reproduzierbar mit compat=newest und LuaTeX: Quelltext, Bildschirmfoto.

(20 Jun '19, 08:43) Henri

@cis Danke für die Hilfe, ich hab ein bisschen experimentiert, mit samples = 9 funktioniert es sogar noch besser.

(20 Jun '19, 15:04) adrian_bl
1

@Henri: Mit LuaTeX und natürlich compat=newest oder compat=1.16 lässt sich das nicht repoduzieren, mit pdflatex aber schon. Weißt Du bzw. kannst Du erklären, warum das so ist? Falls ja, kannst Du dann eventuell eine Antwort auf die Frage schreiben?

(20 Jun '19, 23:22) esdd
Ergebnis 5 von 8 show 3 more comments

Ursächlich dürfte die geringe Rechengenauigkeit von LaTeX sein bei Zahlen mit vielen relevanten Nachkommastellen.

Du könntest aber GNUPLOT verwenden (siehe auch hier).
Hier muss man allerdings erstmal gnuplot installiert haben (scheints hat TeXLive keine Minimalversion davon o.ä.) und wissen wie man die TeX-Datei damit übersetzt.

Ich habe gnuplot01.tex (siehe unten) mit
\addplot[blue,domain = {-0.07:0.07}] plot gnuplot[samples=500,id=curve]{2*11000*(1 - 1.40576 - cos(x) + sqrt(1.40576^2 - sin(x)^2))};
(Korrekte Kurvenform mit Wolfram|Alpha)

Wenn gnuplot im Pfad ist, sollte sich das MWE unten mit
% arara: pdflatex: {shell: yes}           (Was ist arara?)
oder klassisch in der Kommandozeile mit
pdflatex --shell-escape gnuplot01.tex
übersetzen lassen
(siehe auch ganz unten).

alt text

% arara: pdflatex: {shell: yes}
\documentclass[margin=5mm, tikz]{standalone}
\usepackage{siunitx}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}[]
\newcommand\Curve[1]{2*11000*(1 - 1.40576 - cos(#1) + sqrt(1.40576^2 - sin(#1)^2))}
\begin{axis}[
xlabel = $\alpha$ $\si{[rad]}$,
ylabel = $\Delta s$ $ \si{[\micro m]}$, 
xmin = -0.07, 
xmax = 0.07, 
ymin = 0, 
ymax = 14.500,
grid = major,
%smooth,
scaled ticks=false,
tick label style={/pgf/number format/fixed}
]
\addplot[blue,domain = {-0.07:0.07}] plot gnuplot[samples=500,id=curve]{\Curve{x}} node[pos=0.9,anchor=east]{gnuplot: gut};

\addplot[red,domain = {-0.07:0.07}, trig format plots=rad]{\Curve{x}} node[pos=0.7,anchor=east]{pgfplots: schlecht};
\end{axis}
\end{tikzpicture}
\end{document}

Falls das so nicht tut, in der Kommandozeile:

pdflatex -interaction=nonstopmode -shell-escape gnuplot01.tex 
--->  Ich erhalte 'gnuplot01.curve.gnuplot'

c:\"Program Files (x86)"\gnuplot\bin\gnuplot.exe gnuplot01.curve.gnuplot
--->  Ich erhalte 'gnuplot01.curve.table'
(wenn die Kommandozeile den Befehl 'gnuplot' kennt, geht es natürlich einfacher)

pdflatex gnuplot01.tex
--->  Ich erhalte 'gnuplot01.pdf'
Permanenter link

beantwortet 21 Jun '19, 17:41

cis's gravatar image

cis
9.5k94459491
Akzeptiert-Rate: 29%

bearbeitet 29 Jun '19, 14:08

Deine Antwort
Vorschau umschalten

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

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×298
×30

gestellte Frage: 19 Jun '19, 18:10

Frage wurde gesehen: 6,157 Mal

zuletzt geändert: 29 Jun '19, 14:08