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: 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
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). Ich habe Wenn gnuplot im Pfad ist, sollte sich das MWE unten mit % 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' beantwortet 21 Jun '19, 17:41 cis |
Eine Funktion mit sinus und cosinus ergibt keine Parabel.
@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.
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!
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).
@UlrikeFischer Ist doch klar, was er meint - spätestens, wenn man mal oder sowas anschaut. ;) (€dit: Wolfram|Alpha)
Nicht reproduzierbar mit
compat=newest
und LuaTeX: Quelltext, Bildschirmfoto.@cis Danke für die Hilfe, ich hab ein bisschen experimentiert, mit samples = 9 funktioniert es sogar noch besser.
@Henri: Mit LuaTeX und natürlich
compat=newest
odercompat=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?