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

Surface Grafik aus Matrix erstellen

 

BUUBLE
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 20.01.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2022, 14:59     Titel: Surface Grafik aus Matrix erstellen
  Antworten mit Zitat      
Hallo zusammen,

ich entwickle momentan eine Regelung. Zuerst habe ich ein analytisches Modell aufgebaut, um den Stabilitätsbereich zweier Verstärkungsfaktoren zu bestimmen. Als Ergebnis habe ich eine Matrix (500x3) in der die ersten zwei Spalten die beiden Verstärkungsfaktoren sind und in der letzten der Betrag der Polstelle.

Das ganze möchte ich nun in einer dreidimensionalen Grafik darstellen. Auf der x- Achse Verstärkungsfaktor KE (Spalte1),auf der y-Achse Verstärkungsfaktor KP und auf der z-Achse den Betrag der Polstelle. Der stabile Bereich soll blau eingefärbt sein und der instabile Bereich rot.

Code:

figure();
s=surf(finalmatrix(:,1),finalmatrix(:,2), finalmatrix(:,3);
 


Das ganze sollte ja über den Befehl surf() zu bewerkstelligen sein...bei mir kommt immer die Fehlermeldung

Bei mir kommt immer die Fehlermeldung: "Error using surf (line 71) Data dimensions must agree." Habe daraufhin meine Polstellen transponiert, aber das lief auch nicht.

Ein Hinweis noch: In 5 Zeilen untereinander steht jeweils dieselbe Kombination aus Verstärkungsfaktoren und da hinter die jeweilige Polstelle, da mein System immer 5 Polstellen hat.

Ich stehe gerade voll auf´n Schlauch, wie ich es machen soll. Ich wäre um jede Hilfe sehr dankbar Smile
Private Nachricht senden Benutzer-Profile anzeigen


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 14.07.2022, 20:15     Titel:
  Antworten mit Zitat      
Hallo,

außer dass eine schließende Klammer bei dem Surf-Aufruf fehlt, fällt mir nichts auf und ohne Minimalbeispiel wird es dann schwierig zu helfen.

Code:
figure();
s=surf(finalmatrix(:,1),finalmatrix(:,2), finalmatrix(:,3));


Viele Grüße
Steve
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
BUUBLE
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 20.01.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.07.2022, 08:55     Titel: Surface Grafik aus Matrix erstellen
  Antworten mit Zitat      
Hallo Steve,

vielen Dank für deine Antwort. Ohne Beispiel wird es schwer. Da hast du Recht. Im Anhang befindet sich jetzt Matrix als Beispiel.

Beste Grüße,

David

Finalmatrix_Bsp.xls
 Beschreibung:
Hier die Beispielmatrix

Download
 Dateiname:  Finalmatrix_Bsp.xls
 Dateigröße:  28.5 KB
 Heruntergeladen:  130 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

surf benötigt als drittes Argument eine Matrix.
Man kann z.B. per Interpolation mit griddata aus den Vektordaten eine Matrix erstellen. Schau dir mal das Beispiel "Interpolate Scattered Data Over Uniform Grid" aus der Doku von griddata an.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
BUUBLE
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 20.01.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.07.2022, 14:43     Titel:
  Antworten mit Zitat      
@Harald: Vielen Dank für den Tipp. Ich werde es damit auch ausprobieren.

Habe es jetzt auf anderen Weg lösen können:

Code:

%%Vorbereitungen
KP=transpose(finalmatrix(:,1)); %x-Achse
KE=transpose(finalmatrix(:,2)); %y-Achse
PS=transpose(finalmatrix(:,3)); %z-Achse
S=size(PS);
s=S(1,2);
Z=zeros(s,s);

for n=1:s
    Z(n,:)=PS;
end
[X,Y] = meshgrid(KP,KE); %KP x-Achse, KE y-Achse

%%Plot
figure();
surf(X,Y,Z);
 


Um die surf Funktion auf eine 3 mal x große Matrixe anwenden zu können, muss man die Spalten für die y- bzw. x-Achse transponieren und dann über die meshgrid Funktion ein 2-D-Gitternetzkoordinate ermitteln. Die Variable "Z" muss eine Matrix sein mit der Anzahl der Spalten von x transponiert und der Anzahl der Spalten aus y transponiert. Gefüllt wird diese Matrix dann Zellenweise mit den Ergebnissen aus der 3. Spalte der Matrix. Ich hoffe das war einigermaßen verständlich. Wenn nicht, gerne nachfragen.
Private Nachricht senden Benutzer-Profile anzeigen
 
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.