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

Nyquist 3D plots

 

Hmpfx
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 26.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2016, 17:23     Titel: Nyquist 3D plots
  Antworten mit Zitat      
Hallo zusammen,

Ich möchte mehrere Nyquist Plots graphisch übereinanderlegen um einen schnellen Blick auf die Stabilitätsgrenze zu werfen. Am liebst in 3D Smile

KurzInfo: Ich habe eine Übertragungsfunktion welche ich mit verschiedenen Parametern berechne. Die Stabilitätsergebnisse will ich mit nyquist bestimmen. Und dann in einem Bild darstellen.

Leider gibt mir der nyquist Befehl nicht die Messdaten aus welche ich später brauche um meinen Sammelplot zu erfassen. Bzw weiß ich nicht wie ich die Ergebnisse weiter verarbeite.

Code:
H = tf([2 5 1],[1 2 3]);
[re,im,w]=nyquist(H);


Was ich am liebsten hätte wären jetzt die variablen re und im in einem Format welches ich bearbeiten kann. Klappt bei mir nicht Sad

Ich habe ein Workaround aufgebaut, welches es mir ermöglicht ein Beispiel zu plotten. Das ist aber sehr umständlich und muss für jede Ü-Fkt. neu angepasst weil mein Weg über Figure-Speichern und wiederladen als *.mat unterschiedliche struct variablen ausgibt. Und es auch echt mühselig ist daraus die gewünschten Daten zu bekommen... Und weiter is es einfach ein kack Weg :/ Und dauert ewig, speziell wenn ich 1000 plots übereinanderlegen will
Kann mir jemand damit helfen bzw. mir eine Idee geben oder auch andere Idee wie ich ans Ziel komme (surf, imagesc, etc.) oder gar eine komplett andere Idee Übertragungsfunktionen miteinander zu vergleichen?

Anbei mein Workaround - Code mit der TF=1/s

Code:
%Workaround
close all
clear all
delete('test.fig')
clc

%Generate TF and nyquist data
for int=1:5
    num=int/3;
    Ts=10e6;
    delay=9;
    den=1;
    mtf=tf(num,den,Ts,'ioDelay',delay);
    F=figure;
    nyquist(mtf)
    saveas(F,'test','fig')
    close all
    clearvars -except int X Y
    load('test.fig','-mat')
    delete('test.fig')
    hilf=length(hgS_070000.children(1, 1).children);
    assignin ('base',['x_' num2str(int)],hgS_070000.children(1, 1).children(hilf, 1).children(1, 1).properties.XData)
    assignin ('base',['y_' num2str(int)],hgS_070000.children(1, 1).children(hilf, 1).children(1, 1).properties.YData)
    X{int,1}=eval(['x_' num2str(int)]);
    Y{int,1}=eval(['y_' num2str(int)]);
    clearvars -except X Y
end

%plot
color=jet(length(X));
for int=1:length(X)
    hold on
    hilf(1:length(X{int,1}))=int/3;
    plot3(X{int,1},Y{int,1},hilf,'Color',color(int,:),'LineWidth',2)
    hold off
end
view(3)
set(gca,'YDir','reverse');% set(gca,'XDir','reverse');
grid
hold on;
plot3([-1 -1],[0 0],[0 length(X)/3],'r','LineWidth',5)
hold off;
xlabel('Realteil');ylabel('Imaginärteil');zlabel('Verhältnis num/den')
 


Hier noch der Code für einen normalen nyquist plot

Code:
% Plot ohne 3D
Ts=10e6;
delay=9;
figure;hold on;
for int =1:5
    num=int/3;
    den=1;
    H = tf(num,den,Ts,'ioDelay',delay);
    nyquist(H)
end
plot(-1,0,'Marker','.','MarkerSize',20,'Color',[0 0 0]/255)
hold off


Vielen Dank
Gruß
Private Nachricht senden Benutzer-Profile anzeigen


Hmpfx
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 26.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2016, 18:02     Titel:
  Antworten mit Zitat      
Man sollte Sonntags seinen Rausch ausschlafen und ned arbeiten....

Wenns jemand interessiert, wie es geht einfach plot(re(Smile,im(Smile) benutzen.

Hier ist ein Beispiel:

Code:

clear all;close all;clc
Ts=10e6;
delay=1;
color=jet(15);
%     H = tf([2 4 1],[1 2 3]);
for int=1:15
    num=[2 8-int 1];
    den=[1 2 3];
    H=tf(num,den,Ts,'ioDelay',delay);
    [re,im,w]=nyquist(H);
    hilf(1:length(w))=int/3;
    hold on;
    plot3(re(:),im(:),hilf,'Color',color(int,:),'LineWidth',2)
    plot3(re(:),-im(:),hilf,'Color',color(int,:),'LineWidth',2)
    hold off;
    clear hilf
end
view(3)
set(gca,'YDir','reverse');% set(gca,'XDir','reverse');
grid
hold on;
plot3([-1 -1],[0 0],[0 int/3],'r','LineWidth',5)
hold off;
xlabel('Realteil');ylabel('Imaginärteil');zlabel('Verhältnis num/den')
 


Wenn jemand aber trotzdem eine schönere/bessere Lösung zum darstellen parametrisierbarer Übertragungsfunktionen hat, dann bitte melden Smile

Gruß
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.