nicht eindeutige funktion < Mathematica < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 17:58 So 02.02.2014 | Autor: | MichaFCC |
Hi an alle =)
ich möchte folgende 3d-Daten (aus excel eingelesen, Datei heißt "daten2") plotten lassen:
0,0000 0,7500 1,5000
0,9922 1,1250 1,1250 1,1250
0,9849 1,1000 1,1000 1,1000
0,9820 1,0750 1,0750 1,0750
0,9836 1,0500 1,0500 1,0500
0,9896 1,0250 1,0250 1,0250
1. Spalte: x-Achse
1. Zeile: y-Achse
Die x-Achse ist nicht der Größe nach geordnet. Zudem gibt es für einige x-Werte 2 y-Werte. Es ist also keine Funktion! Zeichnen lassen tue ich ich die Daten in Mathematica wie folgt:
data = Import[NotebookDirectory[] <> "daten2.xlsx"][ [1] ];
dims = Dimensions[data];
axisx = Transpose[data][ [1] ][ [2 ;; dims[ [1] ] ] ];
axisy = data[ [1] ][ [2 ;; dims[ [2] ] ] ];
plotdata = Take[data, -dims[ [1] ] + 1, -dims[ [2] ] + 1];
ListPlot3D[Transpose[plotdata], InterpolationOrder -> 3, DataRange -> {{First[axisx], Last[axisx]}, {First[axisy], Last[axisy]}, Automatic}]
Mein Problem ist, dass Mathematica bei Zeichnen ignoriert, dass die x-Werte nicht in aufsteigender Form auftreten und zudem teilweise 2-fach vorkommen, sodass ich eine "monoton ansteigende Ebene" habe, anstatt dass die Ebene eine Kurve nimmt und in die andere Richtung läuft.
Meine Frage: Wie kann ich die Punkte so zeichnen lassen, dass die Grafik korrekt ist (es also für einige x-Werte zwei Punkte gibt, bzw. ein um 90 Grad nach rechts gedrehtes "u" gezeichnet wird)?
Vielen Dank im Voraus für Eure Antworten!
Liebe Grüße
Michafcc
p.s. Ich habe diese Frage auf keiner anderen Internetseite / in keinem anderen Forum gestellt.
|
|
|
|
Von MATLAB kenne ich meshgrid und die dazugehörige plot-Funktion. Für Mathematica gibt es dafür auch eine Implementation:
http://mathematica.stackexchange.com/a/30706
Hilft das?
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 12:14 Mo 03.02.2014 | Autor: | MichaFCC |
Hi,
vielen Dank für den Tipp. Es hilft etwas, schafft aber wieder neue Probleme. Ich zeichne die Grafik aktuell wie folgt:
meshgrid[xx_List, yy_List] := {ConstantArray[xx, Length[xx]], Transpose@ConstantArray[yy, Length[yy]]}
{xx, yy} = meshgrid[{0.9922, 0.9849, 0.9820, 0.9836, 0.9896}, {0, 0.75, 1.5}];
c = {{1.125, 1.125, 1.125}, {1.1, 1.1, 1.1}, {1.075, 1.075, 1.075}, {1.05, 1.05, 1.05}, {1.025, 1.025, 1.025}};
pts = {c, xx, yy};
ListPlot3D[pts, PlotRange -> All, InterpolationOrder -> 2, Boxed -> False]
das Problem ist nun, dass mir xx immer als z-Achse angezeigt wird, egal wie ich die Reihenfolge bei pts ändere. zudem stimmen, außer bei xx, die Achsenbeschriftungen nicht (gehen sonst jeweils von 0 bis 5)...
Hat jemand eine Idee woran dies liegt?
Tausend Dank im Voraus!
|
|
|
|
|
Hallo Micha,
nein, keine Ahnung, woran das liegt.
Ich würde Dir dringend empfehlen, zwei (oder wenn nötig mehr) Funktionen zeichnen zu lassen. Nur damit wirst Du die auftretenden Probleme umgehen können.
Dabei ergibt sich natürlich die Schwierigkeit, die Werte zuzuordnen. Offensichtlich weißt Du aber schon, wie das geht, oder?
Wenn nicht, wird es ausnehmend schwierig.
Grüße
reverend
|
|
|
|