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

Bildung Zustandsraumdarstellung in Funktion pressen

 

Fosekosz
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 16.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2017, 13:26     Titel: Bildung Zustandsraumdarstellung in Funktion pressen
  Antworten mit Zitat      
Hallo liebes Forum,

erstmal ein herzliches "Hallo!" von mir, da das mein erster Beitrag hier ist. Ich hoffe ich treffe das richtige Unterforum.

Für einen Dreimassenschwinger habe ich in Matlab ein Schwingungsmodell aus Massen-, Steifigkeits- und Dämpfungsmatrix zusammengebastelt und in den Zustandsraum überführt. Abschließend soll der Amplitudenfrequenzgang einer Übertragungsfunktion des Systems geplottet werden, um die Eigenfrequenzen darzustellen (bspw. Bode). Bis dahin alles dufte. Da ich aber auch das Verhalten der Frequenzen bei Veränderung einzelner Parameter (Steifigkeit 1, Massenträgheit 1, etc.) sehen möchte, habe ich mir eine while-Schleife gebastelt, welche die verschiedenen Formen der Übertragungsfunktion "G33" bei Veränderung eines Parameters in einen Bodeplot malt. Auch das klappt gut, mit folgendem Code (am Beispiel cw = 500 ... 10000):

Code:

close all
clear variables

% Definition und Parametrierung der Variablen sei hier nur beispielhaft aufgeführt
cw = 500;
Jl = ...

% Abbildung der Uebertragungsfunktion in Abhaengigkeit der
% Torsionssteifigkeit der Welle
while cw <= 10000
   
% Matrizen des dynamischen Systems
v = [Jl Js Jp];                                             % Diagonale der Massenmatrix
M = diag(v);                                                % Massenmatrix
D = [dl+dw -dw 0;                                           % Daempfungsmatrix
    -dw dw+dt -dt;
    0 -dt dt+da];        
K = [cw -cw 0;                                              % Steifigkeitsmatrix
    -cw cw+ct -ct;
    0 -ct ct];            
F = [1 0 0;                                                 % Eingangsmatrix
    0 -1 0;
    0 1 -1];                

% Zustandsraum
A = [zeros(3,3) eye(3,3);                                   % Systemmatrix
    -M\K -M\D];            
B = [zeros(3,3);                                            % Eingangsmatrix
    M\F];
C = [ct -ct 0 dt -dt 0;                                     % Ausgangsmatrix
    0 0 0 1 0 0;
    0 cw -cw 0 dw -dw;
    0 0 0 0 0 1];
d = [0 -1 0;                                                % Durchgangsmatrix
    0 0 0;
    0 0 0;
    0 0 0];                                            

sys = ss(A,B,C,d);                                          % Zustandsraumdarstellung
G = tf(sys);                                                % Uebertragungsfunktion

    bode(G(3,3));
    cw = cw+500;
    hold on
end
hold off

size(ss(A,B,C,d));                                          % Kontrolle
 


Da ich aber viele verschiedene Parameter verändern möchte, wollte ich nicht jedesmal die gesamte Herleitung des Zustandsraumes in meinen Code kopieren, weshalb ich versucht habe, diese in eine Funktion zu pressen. Daran bin ich kläglich gescheitert. Ich habe versucht, die Bildung des Zustandsraumes und der Übertragungsfunktion ganz einfach in ein

Code:

function G = transfunc(v,M,D,K,F,A,...)
...
end
 


zu klammern, was natürlich viel zu einfach gedacht war. Dann habe ich versucht, jede Matrix (M,D,K...) als einzelne Funktion zu deklarieren und eine übergeordnete Funktion zu erzeugen:

Code:

function [M,D,K...] = transfunc(v,Jl,Js,Jp,cw,...)
function M = mass(v,Jl,Js,Jp)
...
end
function D = damp(dl,dw,dt,...)
...
end
end
 


Dann aber sagt mir Matlab, ich habe zu wenig Inputs.

Ich befürchte mir fehlt es an Verständnis für die richtige Beschreibung einer Funktion, vielleicht ist es aber auch bei Matrizen/ Zustandsraum/ wasauchimmer etwas anders?

Um es nochmal auf den Punkt zu bringen: mein Ziel ist es, eine kurze while-Schleife mit Abruf der Bildung der Übertragungsfunktion schreiben zu können:

Code:

while cw <= 10000
    transfunc;                                 % Abruf der Funktion
    bode(G(3,3),w);
    cw = cw+500;
    hold on
end
hold off
 


Vielleicht ist dafür auch keine Funktion nötig und ich denke viel zu kompliziert..

Vieelen Dank im Voraus und beste Grüße,
Arne

Modell_B.m
 Beschreibung:

Download
 Dateiname:  Modell_B.m
 Dateigröße:  2.14 KB
 Heruntergeladen:  265 mal
Private Nachricht senden Benutzer-Profile anzeigen


Fosekosz
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 16.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2017, 12:11     Titel:
  Antworten mit Zitat      
Habe eine Lösung gefunden. Um nachfolgenden Forschern die Arbeit zu erleichtern, will ich hier mal noch das Ergebnis präsentieren. Wen es also interessiert, für mich funktioniert es jetzt so:

Code:
function [G,sys,A,B] = transfunc(Jl,Js,Jp,dl,dw,dt,da,cw,ct)

% Matrizen des dynamischen Systems
v = [Jl Js Jp];                                             % Diagonale der Massenmatrix
M = diag(v);                                                % Massenmatrix
D = [dl+dw -dw 0;                                           % Daempfungsmatrix
    -dw dw+dt -dt;
    0 -dt dt+da];        
K = [cw -cw 0;                                              % Steifigkeitsmatrix
    -cw cw+ct -ct;
    0 -ct ct];            
F = [1 0 0;                                                 % Eingangsmatrix
    0 -1 0;
    0 1 -1];  

% Zustandsraum
A = [zeros(3,3) eye(3,3);                                   % Systemmatrix
    -M\K -M\D];            
B = [zeros(3,3);                                            % Eingangsmatrix
    M\F];
C = [ct -ct 0 dt -dt 0;                                     % Ausgangsmatrix
    0 0 0 1 0 0;
    0 cw -cw 0 dw -dw;
    0 0 0 0 0 1];
d = [0 -1 0;                                                % Durchgangsmatrix
    0 0 0;
    0 0 0;
    0 0 0];                                            
   
sys = ss(A,B,C,d);                                          % Zustandsraumdarstellung
G = tf(ss(A,B,C,d));                                                % Uebertragungsfunktion
end


Jetzt kann ich mit "transfunc" jederzeit die Zustandsraumdarstellung und Übertragungsfunktion abrufen. Wie es aussieht, müssen A und B als Output deklariert werden, da sie sich aus weiteren in der Funktion erstellten Matrizen (M,K,D) zusammensetzen.

Beste Grüße,
Arne
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.