• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

GNU Octave ezmesh (war: Einfaches Funktionsplotten mit freier Software?)

sia

gesperrt

Registriert
26 März 2015
Beiträge
5.931
Ort
FFM (NSFW)
Hi Leute,

Ich nutze gerne Wolfram Alpha, aber mittlerweile ist mir das selbst mit Hochschullizenz etwas zu teuer (darf dafür 4€/Monat abdrücken).

Gibt es eine ähnlich einfach zu bedienende Alternative, vorzugsweise FLOSS (also dass ich auch das "Hintendran" nachvollziehen kann)? Eine Ausgabe in JS oder EPS würde mir weiter helfen, damit ich das in anderen Programmen weiterverarbeiten kann.

EDIT: Wäre vielleicht sinnvoll, ein Beispiel zu nennen.

Ich habe eine Funktion, die so aussieht:
z=(x^2+y^2)*e^(−x)

Und die Schnittfläche (Tangentialebene) ungefähr so:
z=−x+2y−1
 
Zuletzt bearbeitet:

BurnerR

Bot #0384479

Registriert
20 Juli 2013
Beiträge
5.510
Re: Einfaches Funktionsplotten mit freier Software?

Octave als Open Source Variante zu Matlab vielleicht.
Eher für numerische Berechnungen, aber plotten kann es ;).

https://www.gnu.org/software/octave/doc/v4.0.1/Three_002dDimensional-Plots.html
http://octave.sourceforge.net/octave/function/plot3.html
http://octave.sourceforge.net/octave/function/surf.html

Ein kleiner spontantest mit Octave zu deinem Beispiel:
plottest.png

Erzeugt durch diesen code:
[src=matlab]
f = @(x,y) (x.^2+y.^2).*exp(-x);
range = [-2:0.1:2];
[x,y] = meshgrid(range, range);
z = f(x,y);
surf(x,y,z);
hold on;
t = @(x,y) (-x+2.*y-1);
zt = t(x,y);
surf(x,y,zt);
[/src]

Optik lässt sich generell sehr gut und umfangreich anpassen (jedenfalls bei Matlab, wird bei octave aber ähnlich sein).
 
Zuletzt bearbeitet:

sia

gesperrt

Registriert
26 März 2015
Beiträge
5.931
Ort
FFM (NSFW)
  • Thread Starter Thread Starter
  • #3
Re: Einfaches Funktionsplotten mit freier Software?

Okay, habe jetzt folgenden Code:

Code:
f = @(x,y) (x.^2+y.^2)*e.^(-x);
ezmesh (f, [-3, 3]);
g = @(x,y) (-x+2.*y-1);
ezmesh (g, [-3, 3]);

so weit, so einfach – aber das wird irgendwie nicht in demselben Koordinatensystem angezeigt, sondern getrennt.

Wie schaffe ich ersteres?

EDIT: Du Arsch, das war ein Ninja Edit!

Kann man das noch irgendwie so darstellen, dass man die Tangentialebene als solches erkennt? Also den Graphen von f(x,y) vielleicht bisschen transparent machen?
 

BurnerR

Bot #0384479

Registriert
20 Juli 2013
Beiträge
5.510
Der Befehl
[src=matlab]hold on;[/src]
lässt weitere plots ins selbe Koordinatensystem plotten.
mit subplot kann man dann noch alternativ ins selbe Bild mehrere Koordinatensysteme plotten.

--- [2016-05-05 10:09 CEST] Automatisch zusammengeführter Beitrag ---

hm, tja, eigentlich ergibt sich Transparenz mit
[src=matlab]
handle = surf(x,y,z);
set(handle,'facealpha',0.8);
[/src]
Allerdings heißt es hier:
facealpha: scalar | matrix, def. 1

Transparency is not yet implemented for surface objects. facealpha is unused.
Dementsprechend führt ein Wert ungleich 1 zu 100%iger Transparenz.

PS.: Aber siehe hier für einen möglichen Workaround:
aKwab.png
 
Zuletzt bearbeitet:

sia

gesperrt

Registriert
26 März 2015
Beiträge
5.931
Ort
FFM (NSFW)
  • Thread Starter Thread Starter
  • #5
Ich hatte [kw]hidden off[/kw] jetzt auch gefunden, allerdings sieht das irgendwie scheiße aus. Kann ich die Fläche einfärben, damit sie nicht höhenabhängig eingefärbt ist?

Also ich hätte gerne einmal die Grundfunktion als blaues Mesh, dann die Tangentialebene als dunkelrot eingefärbte Fläche und den Schnittpunkt (0;1;1) als roten Puinkt. Das Mesh sollte durchsichtig sein (also hidden off), die Fläche halbtransparent.

Sorry, bin etwas noobig unterwegs, wir hatten nur eine zweistündige Einführung in MATLAB und nur maximal 2D-Funktionen geplottet :D

EDIT: und die Achsen sollten mit x,y,z beschriftet sein :D

Geht das überhaupt so, wie ich das vorhabe? RTFM sagt nein :/

EDIT2: Na ja, sieht zwar nicht 100% perfekt aus, aber ich hab jetzt keine Lust mehr:

[src=matlab]clf;
f = @(x,y) (x.^2+y.^2).*exp(-x);
ezmesh (f, [-0.5, 1.5]);
hidden off;
hold on;
g = @(x,y) (-x+2.*y-1);
z = g(x,y);
tangential = surf(x,y,z);
set(tangential,'FaceColor',[0.5 0.7 0.9],'EdgeColor','none');
point = plot3(0,1,1,'.');
set(point,'MarkerSize',10,'Color','black');[/src]

3Ie6Of1.png


EDIT3: wie mache ich das, dass das nur von z = -4 gezeichnet wird?
 
Zuletzt bearbeitet:

BurnerR

Bot #0384479

Registriert
20 Juli 2013
Beiträge
5.510
So sieht der Versuch bei mir aus :D

octavetest.png
Ich bin gerade etwas enttäuscht, denn dieser rote Bereich um den Schnittpunkt herum ist im plot selber nicht so, nur jetzt im Bild. Octave scheint in dem Bereich eine Lücken und Schwächen zu haben.

[src=matlab]
range = [-2:0.1:2];
[x,y] = meshgrid(range, range);
f = @(x,y) (x.^2+y.^2).*exp(-x);
t = @(x,y) (-x+2.*y-1);
z = f(x,y);
zt = t(x,y);

h = surf(x,y,z);
hold on;
ht = surf(x,y,zt);
hs = scatter3(0,1,1);

set(h, 'facecolor', 'none')
set(h, 'edgecolor', [0 0 1]);
set(ht,'edgecolor','none');
set(ht,'facecolor',[0.7 0.1 0.1]);
set(hs, 'linewidth', 15);
set(hs,'markerfacecolor',[1 0 0]);
[/src]

Achsenlimit sowie Bezeichnungen kannst du über axis einstellen. Ich muss gestehen, dass ich solcherlei bei matlab oft mit dem hervorragenden Editor einstelle und daher nur begrenzt auswendig kenne :D.


Ich denke die wesentlicher Frage ist, welche ästhetischen Anforderungen du an die Plots hast. Ich denke zur reinen Visualisierung wird man alles was man braucht Präsentationsgerecht hinkriegen. Deins finde ich so schon ganz hübsch, wenn man da noch bisschen was an den achsen werkelt und evtl noch die Perspektive entsprechend wählt.
Bin aber grad ganz froh, bisher immer noch mit matlab arbeiten zu können :D.
 

Anhänge

  • octavetest.png
    octavetest.png
    368,6 KB · Aufrufe: 204
Zuletzt bearbeitet:

sia

gesperrt

Registriert
26 März 2015
Beiträge
5.931
Ort
FFM (NSFW)
  • Thread Starter Thread Starter
  • #7
Aaha! [kw]axis([-0.5 1.5 -0.5 1.5 -4 4]);[/kw], sieht so aus:

5j7XM7i.png


Jetzt habe ich den nächsten Spaß:
z = 3⋅sqrt(x²/y²) + 2⋅cos(π(x+2y))

Das ist mein Code:

[src=matlab]clf;
f = @(x,y) 3.*sqrt(x.^2/y.^2) + 2.*cos(pi*(x+2.*y));
ezmesh (f);[/src]

Und der Kack kommt raus:

0pZLDm4.png


Kann das sein? :D

EDIT: AAARRGH MATHE! :'(
 
Zuletzt bearbeitet:

BurnerR

Bot #0384479

Registriert
20 Juli 2013
Beiträge
5.510
Du hast einen Fehler in der Formel. Der slash "/" ist der Operator zum Lösen eines linearen Gleichungssystem, für die elementweise Division muss "./" verwendet werden.
Beachte auch, dass die Funktion für y=0 nicht definiert ist.

Ich hab hier das raus:
1to6.png
[src=matlab]
f = @(x,y) 3.*sqrt(x.^2 ./ y.^2) + 2.* cos(pi.*(x+2.*y));
range = [1:0.1:6];
[x,y] = meshgrid(range, range);
z = f(x,y);
surf(x,y,z);
[/src]

bzw. so:
-6to6.png
[src=matlab]
f = @(x,y) 3.*sqrt(x.^2 ./ y.^2) + 2.* cos(pi.*(x+2.*y));
range = [-6:0.1:6];
[x,y] = meshgrid(range, range);
z = f(x,y);
surf(x,y,z);
[/src]
 

sia

gesperrt

Registriert
26 März 2015
Beiträge
5.931
Ort
FFM (NSFW)
  • Thread Starter Thread Starter
  • #9
Jetzt wollte ich heute noch die Tangentialebene auf dieselbe Art und Weise wie in meiner ersten Grafik einfügen, aber irgendwie funktioniert das nach dem neu laden nicht mehr..

Mein erster Code:

[src=matlab]
clf;
f = @(x,y) (x.^2+y.^2).*exp(-x);
ezmesh (f, [-0.5, 1.5]);
hidden off;
hold on;
g = @(x,y) (-x+2.*y-1);
z = g(x,y);
tangential = surf(x,y,z);
set(tangential,'FaceColor',[0.5 0.7 0.9],'EdgeColor','none');
point = plot3(0,1,1,'.');
set(point,'MarkerSize',10,'Color','black');
axis([-0.5 1.5 -0.5 1.5 -4 4.2]);
[/src]

und der zweite:

[src=matlab]
clf;
f = @(x,y) 3.*sqrt(x.^2./y.^2) + 2.*cos(pi*(x+2.*y));
ezmesh (f);
hidden off;
hold on;
g = @(x,y) (3*x-3*y+5);
z = g(x,y);
tangential = surf(x,y,z);
[/src]

Und jetzt werden nur die "ezmesh"es angezeigt, nicht die "surf"s... Hatte ich da im interaktiven Modus irgendwo etwas gesetzt, was die angezeigt hat?

Ich komme mir echt vor, wie der letzte Idiot. Na ja, wenigstens bringe ich mir mit deiner Hilfe das selbst etwas bei :D
Habe auch gestern mein erstes lineares Gleichungssystem gelöst :p
 

BurnerR

Bot #0384479

Registriert
20 Juli 2013
Beiträge
5.510
TL;DR: Du musst noch x und y passend initialisieren ;).


Er zeigt mir an:
>> z = g(x,y);
error: 'x' undefined near line 1 column 7
Das war sicherlich nicht didaktisch astrein von mir.. :D, schauen wir mal:
Wenn du
[src=matlab]f = @(x,y) [...] [/src]
schreibst heißt das sowas wie: "x und y bitte als Symbole verstehen, es sind keine (initialisierten) Variablen"
Matlab/Octave sind ja primär Tools für wissenschaftliches Rechnen und dadurch nur "auch" geeignet Funktionen so zu verwenden wie man das intuitiv machen will, also mit x und y als symbolische Variablen statt Variablen im Programmiersinne.
Wenn du dann schreibst:
[src=matlab]z = g(x,y);[/src]
heißt das: "Evaluiere die Funktion g mit den Werten aus den Variablen bzw. Matrizen und weise das Ergebnis (Array) der Variable z zu.
Die x und y an der Stelle haben aber nichts mit dem "@(x,y)" zu tun, sondern müssen eben passende Variablen, sein.
D.h. du brauchst sowas wie
[src=matlab]range = [-1:0.1:1];
[x, y] = meshgrid(range,range)[/src]
Vorher, damit du passend initialisierte Arrays hat.
Die Funktion meshgrid produziert dir quasi die Variablen genau so, wie du sie haben willst. Du willst ja paarweise die Funktion an 'allen möglichen' (bzw. vielen, z.B. in 0.1er Schritten in jede Richtung) Kombinationen innerhalb deiner Range auswerten, vereinfacht also z.B. g(0,0), g(1,0), g(2,0), g(3,0),... g(0,1), g(1,1),.. und so weiter und das baut meshgrid dir.
ezmesh ist da einfach eine Abkürzung und mich würde es nicht wundern, wenn es intern einfach auch auf meshgrid und surf zurückgreift.



LGS ist ja eine klassische Aufgabe für Matlab/Octave. Zumindest Matlab ist dahingehend vielleicht angenehm für den Anwender, als das es immerhin ein wenig die Art des LGS analysiert und entsprechend einen Algorithmus auswählt. Sicherlich spannend, ob Octave das ähnlich/gleich macht und die selben Algorithmen implementiert sind bzw. ausgewáhlt werden.
 

sia

gesperrt

Registriert
26 März 2015
Beiträge
5.931
Ort
FFM (NSFW)
  • Thread Starter Thread Starter
  • #11
Danke, Mann. Ich hab's jetzt endlich kapiert ;)

EDIT: Die Docs von Matlab/Octave sind scheiße, wenn man keine Einführung von jemandem bekommt, der das kann. Just saying.
 
Oben