WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Funktion f(x,y) plotten

 

gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2009, 15:59     Titel: Funktion f(x,y) plotten
  Antworten mit Zitat      
Ich habe ine FUnktion z=f(x,y) und möchte diese in einem bestimmten bereich als surface plotten. Die Funktion ist nur definiert für x>=y. Wenn man sich das ganze in einer Matrix vorstellt (mit x alst zeile und y als spalte), dann steht das Ergebnis in dem Matrix Element (x,y). Da x>=y ist, sind nur die Elemente der MAtrix gefüllt, welche unterhalb der Diagonalen liegen.
Hier mal ein Codefragment:
Code:

z=zeros(201,201);
for i=1:201
    for j=i:201
        alpha=-100+(j-1);
        betha=-100+(i-1);
        z(j,i)=polyvaln(p,[alpha betha]);
    end
end
surf(-100:1:100,-100:1:100,z,'LineStyle','none');
 

"polyvaln(p,[alpha betha])" berechnet dabei lediglich den Funktionswert.
Das Ergebnis hänge ich als png an. Sieht erst einmal wie ein "Kuchenstück" aus.
Da ich die Matrix mit zeros initialisiere, stehen überhalb der Diagonalen überall Nullen. Das sieht im plot natürlich unschön aus.
Nun zur Frage:
Kann ich irgenswie angeben, dass nur dieses "Dreieck" geplottet wird?
Also eigentlich ein Schnitt durch die eigentliche Fläche (evtl. ein meshgrid was dieses "Dreieck" abdeckt?)

plot.png
 Beschreibung:
surface plot von z=f(x,y)

Download
 Dateiname:  plot.png
 Dateigröße:  20.64 KB
 Heruntergeladen:  892 mal


Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 08.04.2009, 16:13     Titel:
  Antworten mit Zitat      
Hallo gast,

wenn Du statt mit Nullen mit NaNs initialisierst, werden die Werte beim Zeicnen ausgelassen.

Code:
z=NaN*ones(20);
z(4:10,11:15)=rand(7,5);

surf(z)


Auch nachträglich könnte man die Nullen in NaNs umwandeln:

Code:


Herzliche Grüße
Bijick
_________________

>> why

Zuletzt bearbeitet von Bijick am 08.04.2009, 16:15, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.04.2009, 16:14     Titel:
  Antworten mit Zitat      
Hallo,

Probier doch mal, die Matrix mit NaN statt 0 vorzubelegen.
Code:
z=nan(201,201);


Hintergrund: NaN wird beim Plotten ignoriert. So können ungewollte Verbindungen zwischen Punkten vermieden werden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2009, 17:08     Titel:
  Antworten mit Zitat      
Danke, hat funktioniert mit dem "nan"
Ihr habt mir sehr geholfen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.