Verfasst am: 07.08.2016, 16:23
Titel: Nyquist 3D plots
Hallo zusammen,
Ich möchte mehrere Nyquist Plots graphisch übereinanderlegen um einen schnellen Blick auf die Stabilitätsgrenze zu werfen. Am liebst in 3D
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.
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
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?
%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') closeall 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],[00],[0length(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',[000]/255) hold off
Wenn jemand aber trotzdem eine schönere/bessere Lösung zum darstellen parametrisierbarer Übertragungsfunktionen hat, dann bitte melden
Gruß
Einstellungen und Berechtigungen
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
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.