matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Schulmathe
  Status Primarstufe
  Status Mathe Klassen 5-7
  Status Mathe Klassen 8-10
  Status Oberstufenmathe
    Status Schul-Analysis
    Status Lin. Algebra/Vektor
    Status Stochastik
    Status Abivorbereitung
  Status Mathe-Wettbewerbe
    Status Bundeswettb. Mathe
    Status Deutsche MO
    Status Internationale MO
    Status MO andere Länder
    Status Känguru
  Status Sonstiges

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenMatlab3D-Plot einer Funktion, MATLAB
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Geschichte • Erdkunde • Sozialwissenschaften • Politik/Wirtschaft
Forum "Matlab" - 3D-Plot einer Funktion, MATLAB
3D-Plot einer Funktion, MATLAB < Matlab < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

3D-Plot einer Funktion, MATLAB: Frage (reagiert)
Status: (Frage) reagiert/warte auf Reaktion Status 
Datum: 13:52 Do 21.05.2009
Autor: pelzig

Hallo,

Ich habe eine Matlab-Funktion f(x,y), die mir einfach reelle Zahlen ausspucht, und möchte die z.B. auf [mm] $[0,1]^2$ [/mm] plotten. Wie geht das?
Ich probier jetzt schon ne ganze Weile, in den Standartbeispielen steht immer ich soll das mit meshgrid, griddata, surf usw. machen. Ich mache [x,y]=meshgrid(0:0.1:1,0:0.1:1), das Problem ist, wie bekomme ich jetzt das zugehörige z, sodass surf(x,y,z) das gewünschte ergebnis liefert? Dafür gibt es doch sicher ne einfache Lösung.

Gruß, Robert

        
Bezug
3D-Plot einer Funktion, MATLAB: Antwort
Status: (Antwort) fertig Status 
Datum: 14:44 Do 21.05.2009
Autor: Frasier

Hallo Robert,

ja, das ist ganz einfach. Die Hilfe zu meshgrid enthält dazu auch ein Beispiel.
Für [mm] f(x)=\sqrt{xy} [/mm] geht es so:
1:
2: [x,y]=meshgrid(0:0.1:1);
3: z=sqrt(x.*y);
4: surf(x,y,z);

Der Punkt vor dem * sorgt für eine element-by-element Multiplikation. Ohne den . würdest du die Matrixmultiplikation durchführen.

lg
F.

Bezug
                
Bezug
3D-Plot einer Funktion, MATLAB: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 15:23 Do 21.05.2009
Autor: Frasier

Habe ich dich vielleicht falsch verstanden?
Wie genau sieht deine Funktion aus?

Bezug
                        
Bezug
3D-Plot einer Funktion, MATLAB: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 01:52 Fr 22.05.2009
Autor: pelzig


> Habe ich dich vielleicht falsch verstanden?
>  Wie genau sieht deine Funktion aus?

Ja genau das ist das Problem, die Funktion ist halt keine elementare Funktion, sondern einfach eine mehr oder weniger wirre Funktion [mm] $f:\IR^2\to\IR$ [/mm] - zu einem Punkt [mm] $(x,y)\in\IR$ [/mm] bekomme ich den Funktionswert durch f(x,y), d.h. ich habe eine Matlab-Funktion geschrieben:

1: function z = f(x,y)
2:     [mach irgendwas]
3:     z = ...
4: end

Und diese will ich halt auf gewissen Gebieten von [mm] $\IR^2$ [/mm] plotten.

Gruß, Robert

Bezug
                                
Bezug
3D-Plot einer Funktion, MATLAB: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 09:59 Fr 22.05.2009
Autor: Frasier

Hallo Robert,

was steht denn konkret in der Funktion f? Was passiert in [mach irgendwas]?
Hast du da ein kleines Beispiel?

lg
F.

Bezug
                                        
Bezug
3D-Plot einer Funktion, MATLAB: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 14:37 Fr 22.05.2009
Autor: pelzig

Tu doch einfach so, als sei über f sonst nichts weiter bekannt...

Bezug
                                                
Bezug
3D-Plot einer Funktion, MATLAB: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 14:48 Fr 22.05.2009
Autor: Frasier

So lange deine Funktion für jeden Punkt (x/y) ein z berechnet sehe ich das Problem nicht (dank meshgrid).
Die Darstellung einer bereichsweise definierten Funktion erhälst du z.B. so.
1: function pelzig
2: [x,y]=meshgrid(-1:0.05:1);
3: z=fun(x,y);
4: mesh(x,y,z);
5:
6: function z=fun(x,y)
7: z=(x.^2+y.^2).*(x<0&y<0);
8: z=z+sqrt(x.*y).*(x>0&y>0);
9: z=z+(y.*cos(x)).*(x>0&y<0);
10: z(x<0&y>0)=nan;


lg
F.

Bezug
                                                        
Bezug
3D-Plot einer Funktion, MATLAB: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 15:02 Fr 22.05.2009
Autor: pelzig


> So lange deine Funktion für jeden Punkt (x/y) ein z
> berechnet sehe ich das Problem nicht (dank meshgrid).

1: function pelzig
2: [x,y]=meshgrid(-1:0.05:1);
3: z=fun(x,y);
An dieser Stelle gibt es einfach einen Fehler, denn x,y sind Matrizen, die Funktion fun kann aber nur mit Zahlen umgehen.
Es wäre ziemlich aufwändig meine Funktion(en) so anzupassen, dass sie auch diese Matrizen als Eingabedaten nehmen.

Gruß, Robert

Bezug
                                                                
Bezug
3D-Plot einer Funktion, MATLAB: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 15:39 Fr 22.05.2009
Autor: Frasier

Hallo,

dann kannst du Schleifen nehmen, um die Matrix z schrittweise zusammenzubauen.
1: function pelzig
2: x=-1:0.2:2;
3: y=-1:0.05:1;
4: z=zeros(numel(y),numel(x));
5: for yy=1:numel(y)
6:     for xx=1:numel(x)
7:         z(yy,xx)=fun(x(xx),y(yy));
8:     end
9: end
10: mesh(x,y,z);
11:
12: function z=fun(x,y)
13: z=x^2+y^2;


Hilft dir das?

lg
F.

Bezug
                                                                        
Bezug
3D-Plot einer Funktion, MATLAB: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 18:47 Fr 22.05.2009
Autor: pelzig

Ja so hatte ich es jetzt auch gemacht. Nur irgendwie finde ich das ziemlich hässlich. Ich dachte es gibt dafür vielleicht schon irgend eine funktion, die alles macht, wo ich nur noch mein f als function handle reinstecken muss  oder so.

Gruß, Robert

Bezug
                                                                                
Bezug
3D-Plot einer Funktion, MATLAB: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 20:36 Fr 22.05.2009
Autor: Frasier

Hallo,

am effizientesten wäre es wohl, wenn du die Funktion so umschreibst, dass sie mit den von meshgrid erzeugten Matrizen umgehen kann.
Eventuell gibt es auch die Möglichkeit, wenigstens eine der Schleifen zu eliminieren oder bsxfun zu benutzen. Dazu müsste man aber die Funktion kennen.

lg
F.

Bezug
                                                                                        
Bezug
3D-Plot einer Funktion, MATLAB: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 21:10 Fr 22.05.2009
Autor: pelzig

Das mit bsxfun klingt irgendwie vielversprechend, aber leider versteh ich noch nicht so ganz was die Funktion macht... :-)

Okay hier ist eine der Funktionen, um die es geht:
1: function y = P2_Base(T,k,xt,yt)
2: % Berechnet den Wert der k-ten nodalen P_2-Funktion bezueglich des Dreiecks T
3: % an der Stelle (x,y).
4:      if(isInTriangle(T,xt,yt))
5:         r=T2TRef(T,[xt;yt]);
6:         x=r(1); y=r(2);
7:         switch k
8:             case 1
9:                 y=1+x*(2*x+4*y-3)+y*(2*y-3);
10:             case 2
11:                 y=x*(2*x-1);
12:             case 3
13:                 y=y*(2*y-1);
14:         end
15:     else
16:         y=0;
17:     end
18: end

Zur Erklärung. Wir machen gerade FEM, und diese Funktion implementiert zu einem gegebenen Dreieck [mm] $T\subset\IR^2$ [/mm] mit den Eckpunkten [mm] x_1, x_2, x_3 [/mm] das eindeutig bestimmte Polynom [mm] p_k [/mm] mit Totalgrad kleinergleich 2 mit der Eigenschaft [mm] p_k(x_i)=\delta_{ik} [/mm] für $i=1,...,6$, wobei [mm] $x_4,x_5,x_6$ [/mm] die Mittelpunkte der Seiten von T sind. In dem Programm ist T die Matrix mit den Eckpunkten des Dreiecks als Spaltenvektoren, und (xt,yt) ist die Stelle an der wir [mm] p_k [/mm] auswerten wollen. In Zeile 7-14 ist [mm] p_k(xt,yt) [/mm] für das "Referenzdreieck" TRef  [mm] \{(0,0),(1,0),(0,1)\} [/mm] implementiert, und ich führe den allgemeinen Fall durch eine affine Transformation von T auf TRef zurück (Zeile 5).

Gruß, Robert

Bezug
                                                                                                
Bezug
3D-Plot einer Funktion, MATLAB: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 17:15 Mo 25.05.2009
Autor: Frasier

Hm, da sehe ich auf die Schnelle jetzt leider keine Vereinfachungsmöglichkeit.

lg
F.

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.schulmatheforum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]