ubuntuusers.de

3D Tabellenkalkulation möglich?

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

PhotonX

Avatar von PhotonX

Anmeldungsdatum:
3. Juni 2007

Beiträge: 4471

Wohnort: München

Hallo Community,

ich suche nach einer Software, die eine dreidimensionale Tabelle darstellen kann. Sowas wie OOo Calc, nur in 3D. Das heißt, es gibt drei Achsen x, y und z, in denen irgendwelche Werte eingetragen sind und an den Schnittpunkten der drei Koordinaten sind dann Zellen, die nach einer bestimmten Funktion aus den drei Koordinaten einen Wert ausgeben. Es geht darum, das hier: http://home.att.net/~numericana/data/polycount.htm für 4D zu erstellen, wobei nicht die Zahlen in den Zellen interessant sind, sondern ob einer Zelle eine Zahl zugeordnet werden kann, oder ob sie leer ist. Für 3D hab ich das mit Calc in eine zweidimensionale Tabelle packen können, die mir in den Zellen, in denen Zahlen sind, X'e hinmacht und die anderen leer lässt. Und jetzt suche ich nach einer Lösung, wie man sowas mit einer Dimension mehr realisieren könnte...

MfG PhotonX

Fredo Team-Icon

Avatar von Fredo

Anmeldungsdatum:
27. Juni 2005

Beiträge: 5244

Wohnort: Bochum

Hi!

Könnte man das in Calc nicht über mehrere Datenblätter lösen? Damit hätte man ja quasi eine Z-Achse.

Ansonsten kann z.B. R mit mehrdimensionalen Arrays umgehen. Aber R erfordert natürlich etwas mehr Einarbeitung. Möglich wäre aber sowas:

1
2
3
4
# Leerer Array mit drei Dimensionen mit jeweils 10 Ausprägungen
a <- array(dim=c(10,10,10))
# Setze einen Wert (512) für Zeile 1, Spalte 2, Z 3
a[1,2,3] <- 512

Liebe Grüße
Fredo

PhotonX

(Themenstarter)
Avatar von PhotonX

Anmeldungsdatum:
3. Juni 2007

Beiträge: 4471

Wohnort: München

Naja, ich will ja sozusagen die "Form" der Tabelle sehen, und wenn man die Tabelle in Schichten aufspaltet, sieht man sie nicht. Und wie sieht die Ausgabe von R aus? Und kann man da Funktionen einsetzen und Bedingungen? Meine Calc-Lösung für 3D sieht so aus (siehe Anhang):

WENN(UND(C27>=3;C27<=6;C50>=3;C50<=6);C27;"")

Kann man sowas in R realisieren?

enumeration.ods (18.9 KiB)
Download enumeration.ods

Fredo Team-Icon

Avatar von Fredo

Anmeldungsdatum:
27. Juni 2005

Beiträge: 5244

Wohnort: Bochum

Ah, ok, eine dreidimensionale Darstellung der Datenblätter geht mit R natürlich auch nicht. Und ich kenne auch keine solche Tabellenkalkulation. Das Müsste ja ein dreidimensionaler Würfel sein, in dem man Zellen bearbeiten kann.

Bedingungen, Berechnungen etc. sind in R kein Problem.

Liebe Grüße
Fredo

ChriKle

Anmeldungsdatum:
7. Mai 2006

Beiträge: 341

Also wenn es dir darum geht 3d dimensional Daten zu plotten oder mit 3d Datensätzen zu arbeiten, dann würde ich eher auf wissenschaftliche Tools zurückgreifen. OpenOffice ist genauso wie Excel nur für einfache Probleme verwendbar.

Zum darstellen, fitten und so weiter empfehle ich dir gnuplot (braucht gewisse Einarbeitungszeit, kann aber dafür sehr viel mehr als Openoffice).

Noch ein paar weitere Programme: Matlap (kostet was) Octave (ist umsonst und matlap sehr ähnlich hat aber keine schöne Graphische oberfläche und Hilfe) Scilap

ChriKle

Anmeldungsdatum:
7. Mai 2006

Beiträge: 341

Noch etwas:
Es ist normalerweise nicht üblich Datensätze, als 3d Matrix anzugeben (außer bei ganz wenigen Sachen). Das Problem ist einfach der große Speicherbedarf. Deswegen versucht man nach Möglichkeit das Problem aud 2d runter zu kochen oder man projiziert es aufs 2 Dimensionale.
Eine weitere Möglichkeit besteht darin, die Daten als Tuppel (x,y,z) anzugeben (geht aber nur bei kleinen Datensätzen).

PhotonX

(Themenstarter)
Avatar von PhotonX

Anmeldungsdatum:
3. Juni 2007

Beiträge: 4471

Wohnort: München

Mh, Einarbeitungszeit ist gerade ganz schlecht, in zwei Wochen ist Abgabetermin für meine Facharbeit und eigentlich wollte ich diese Sache noch mit reinnehmen. 😀

Die Darstellung in 3D ist das Wichtigste, ich will ja sehen, ob da was Symmetrisches rauskommt (ist es symmetrisch, sind die verwendeten Bedingungen mit großer Wahrscheinlichkeit hinreichend, ist es das nicht, dann fehlt noch was). Viele Daten kommen da gar nicht rein: Drei Achsen mit natürlichen Zahlen (von 5 bis 15 reicht vollkommen) und dann Kreuzchen oder eben keine Kreuzchen, je nachdem ob für ein Tripel eine bestimmte Bedingung erfüllt wird (also zum Beispiel: wenn x+y+z<10, mache nichts; wenn x+y+z>=10, mache ein Kreuzchen in die Zelle). Also im Endeffekt nichts Ressourcenhungriges, denk ich. Aber ob das eine Software zusammenkriegt? 😕 Kann Gnuplot sowas?

Fredo Team-Icon

Avatar von Fredo

Anmeldungsdatum:
27. Juni 2005

Beiträge: 5244

Wohnort: Bochum

Vielleicht doch R...

Ein Array von 1..5, dessen "Ecken" auf 1 gesetzt werden:

a <- array(dim=c(5, 5, 5))
a[1,1,1] <- 1
a[1, 1, 5] <- 1
a[1, 5, 1] <- 1
a[1, 5, 5] <- 1
a[5, 1, 1] <- 1
a[5, 1, 5] <- 1
a[5, 5, 1] <- 1
a[5, 5, 5] <- 1

Jetzt kann man ein hübsches 3D-Plot draus machen, das man auch drehen und zoomen kann:

library(misc3d)
image3d(a, col='red')

Wenn man jetzt die Werte von a über Bedingungen setzen will, geht dass z.B. so:

a <- array(dim=c(5, 5, 5))
for(x in 1:dim(a)[1]){
 for(y in 1:dim(a)[2]){
  for(z in 1:dim(a)[3]){
   if(x+y+z >= 10){
    a[x,y,z]<-1
   }
  }
 }
}

(Das ergibt übrigens eine hübsche Pyramide... 😉)

Vielleicht hilft das ja weiter?

Liebe Grüße
Fredo

Bilder

ChriKle

Anmeldungsdatum:
7. Mai 2006

Beiträge: 341

Wenn ich das richtig verstanden habe, willst du wissen wie die Gleichung x+y+z>=10 graphisch aussieht.

Am besten man stellt die Gleichung etwas um:
Dann steht da:
z>=10-x-y
Die Gleichung z=10-x-y ist eine Ebenengleichung, dh. sie beschreibt eine Ebene im 3 Dimensionalen:
Unter Gnuplot erhält man eine Darstellung davon mit dem Befehl:
splot 10-x-y
Ich hab dir das Bild mal raufgeladen. Man kann das natürlich noch viel schöner ausgeben, wenn man paar Sachen verstellt, aber im Prinzip sieht man schon worauf es hinausläuft.
Die Gleichung z>=10-x-y beschreibt also den gesamten Bereich, der oberhalb dieser gezeigten Ebene verläuft.

Bilder

ChriKle

Anmeldungsdatum:
7. Mai 2006

Beiträge: 341

Erkläre mal was du genau machen möchtest: Willst du eine Funktion zeichnen lassen oder suchst du Schnittpunkte zwischen mehreren Funktionen oder Konstanten.

Gnuplot kann fast alles (es hat ne Makrosprache dabei), was man zur Darstellung von irgendwelchen mathematischen Mengen, Funktionen und Daten in der höheren Mathematik braucht.

PhotonX

(Themenstarter)
Avatar von PhotonX

Anmeldungsdatum:
3. Juni 2007

Beiträge: 4471

Wohnort: München

Auweia, danke, dass ihr euch so ins Zeug legt, es mir zu erklären. ☺

Naja, die Ungleichung war nur mal ein Beispiel. 😉 Eigentlich sieht es so aus: Ich habe 4 Werte, eine Gleichung (also kann ich das auf 3 Werte runterberechnen) und als Bedingungen 4 einfache und 1 doppelte Ungleichung. Die vollständigen Bedingungen müssten eigentlich 6 doppelte Ungleichungen sein, aber da würden sich (denke ich) einige Bedingungen überlappen, ich vermute also, dass die Hälfte von den 6 doppelten überflüssig wäre und keine neuen Informationen mehr bringen würden. Konkret sieht es so aus: Die Werte sind e, k, f und r. Eine Gleichung gibt es: e-k+f-r=0 Und jetzt die Bedingungen:

2<=k/e; 2<=f/r; e<f; r<k und 0,5<k/f<2

Wenn man jetzt die passenden 3 Größen nimmt (und dabei mithilfe der Gleichung die vierte durch sie ausdrückt), dann müsste so ein symmetrischer Keil rauskommen (analog zum Keil in der verlinkten Tabelle), wenn die Ungleichungen schon ausreichend sind. Oder eben irgendwas, was von einer Seite aus dem Keil rausragt, weil eine Beschränkung/Bedingung fehlt. Das Problem bei den Ebenen ist, dass da alle Zahlen von IR zugelassen sind, ich brauche aber nur natürliche Zahlen. Aber als Näherung wäre es schon super. ☺ Aber wie macht man sowas in der Praxis? So wie ich das sehe, ist R einerseits besser, weil da diskrete "Zellen" rauskommen und keine Ebenen, aber andererseits schlechter, weil man die Tabellen quasi manuell ausfüllen muss, bei GNU-Plot umgekehrt. ☺ GNU-Plot schau ich mir gerade an. Wie kann man da mehrere Funktionen auf einmal plotten lassen? Bei mir wird bei jedem weiteren "splot"-Befehl der vorhergehende Plot überschrieben. 😕

ChriKle

Anmeldungsdatum:
7. Mai 2006

Beiträge: 341

gnulplot kann auch einzelne Werte ausgeben. Mehrere Funktionen trennt man mit kommas und wertebereiche werden in eckigen Klammern angegeben.

Wahrscheinlich ist in deinem Fall Octave die beste Wahl. Ich empfehle folgende Pakete: octave, doc paket und ploting paket. Außerdem ist qtoctave als gui sehr zu empfehlen. Octave benutzt gnuplot, hat aber eine Programmiersprache dabei.
Schau dir mal z.B. http://www.tu-harburg.de/rzt/tuinfo/software/numsoft/Einf_Octave.html an.
Ich denke dein Problem ist nicht so ganz einfach, da es eine Gleichung mit 4 Freiheitsgraden ist. Eine einfache Lösung gibt es da eher nicht.

PhotonX

(Themenstarter)
Avatar von PhotonX

Anmeldungsdatum:
3. Juni 2007

Beiträge: 4471

Wohnort: München

Danke, ich hab die Sache mit den Kommas gerade ergoogelt. ☺ Hab jetzt aber folgendes Problem: Ich gebe jetzt mehrere Funktionen f(x,y), g(x,y) usw. ein. Aber ich brauche auch eine "Funktion" wo kein z vorkommt, sondern nur x und y. Also das ist vergleichbar damit, wie wenn ich in 2D die Funktion x=3 eingeben wollte, das Programm aber etwas in der Form y=f(x) erwartet. Kann man das auch irgendwie plotten lassen? Und dann noch eine Sache: Kann man die Befehle irgendwie in einer Datei speichern (im Moment sitz ich im interaktiven Konsolenmodus von gnuplot), sodass sie wieder geladen und sofort alle Funktionen geplottet werden können?

edit: Jetzt hab ich gerade QtOctave da, wie definiert man denn da eine Funktion? Und wie lässt man sie plotten?

edit2: So, ich hab jetzt eine Funktion geplottet bekommen. Aber nicht mehrere. "surf(w,z)" liefert nur eine Funktion (die erste), "surf(w&z)" liefert ganz was Komisches...

ChriKle

Anmeldungsdatum:
7. Mai 2006

Beiträge: 341

z.B.:
[x,y]=meshgrid(-3:1/8:3); legt zwei Vektoren an und füllt dieses mit Werten zwischen -3 und 3 (ein schrittweite ist 1/8)
z=sin(x).*cos(y); setzt jede kombination von dem einträgen vom Vektor x und Vektor y in die Funktion ein und erzeugt eine Matrix z
surf(z); gibt dann diese Matrix aus

am besten du liest dir entsprechende einführungen im internet durch. Schau mal in google.
du kannst in gnuplot die befehle in einer textdatei speichern und mit dem befehl load "Dateiname" ausführen oder direkt mit gnuplot "Dateiname"

ChriKle

Anmeldungsdatum:
7. Mai 2006

Beiträge: 341

links in ocatave ist so ein fenster mit deinen variablen, wenn du da auf die die variablen klickst, kannst du dir die matrizen und vektoren in einer art Excel Tabelle abschauen und auch bearbeiten.

Antworten |