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

Glockendynamik / Glockenschwingung

 

Kath_glocke

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2010, 17:31     Titel: Glockendynamik / Glockenschwingung
  Antworten mit Zitat      
hallo zusammen,

ich bin Matlab-Neuling und suche Hilfe. ich Muss ein programm schreiben, welches mir die Schwingung einer Glocke simuliert, genauer gesagt, es soll mir den Anschlagzeitpunkt betimmen.
Ich habe im Internet mehrere Ansätze für das darstellen eines Doppelpendels gefunden... Habe versucht mit Hilfe der Event/ereignis Funktion mir den Anschlagpunkt ausgeben zu lassen, leider klappt es nicht vielleicht kann mir einer von euch helfen???

Der letzte teil : function h = h_glockenwand(t,h,phi1,phi2,psi) funktioniert irgendwie nicht, ich weiß aber nicht wo der Fehler ist...

Danke!

Code:

function DoppelPendelAnimation_Anschlag(phi1Anf , phi2Anf) % Die Funktion "DoppelPendelAnimation" kann aufgerufen werden mit Angabe der Anfangsauslenkungen % der beiden Massen oder ohne Parameter.
% Im letztgenannten Fall werden Default-Werte (das sind die Werte der Aufgabenstellung) verwendet.
 
if nargin == 2                          % Start mit vorgegebenen Anfangswerten?
   x0 = [phi1Anf ; phi2Anf ; 0 ; 0] ;   % Anfangswerte  [phi1 ; phi2 ; omega1 ; omega2]
else
   x0 = [pi/9 ; pi/6 ; 0 ; 0] ;            % Default-Anfangswerte
end
 
% Parameter (global definiert, damit Wertaenderung nur an einer Stelle erforderlich):
global mdm  J1  J2  s1  s2  gdl psi

mdm = 270/160 ; J1 = 1./12 ; J2 = 1./12 ; s1 = .5 ; s2  = .5 ; l1 = 1 ; l2 = 1 ; gdl = 9.81/l1 ; psi=pi/2
 
tspan = [0  10] ;                       % Zeitintervall
 
% Integration des Anfangswertproblems:
% Mit der Option "Mass" wird angekündigt, dass eine Massenmatrix zu % berücksichtigen ist, der folgende Parameter gibt den Namen der dafür bereitgestellten Funktion an.
% Die Option "MaxStep" ist zwingend, um über ein Zeitintervall von 10 Sekunden ausreichend genaue Ergebnisse zu erzielen % Mit den beiden Keywords "OutputFcn" und "OutputSel" wird veranlasst, dass % schon während der Berechnung die Funktion ?2(t) in das Graphik-Fenster gezeichnet wird

Clf
options = odeset('Mass' , @Massenmatrix , 'MaxStep' , 0.001 , ...
                 'OutputFcn' , @odeplot , 'OutputSel' , [1 2]) ;
             
% ... zeichnet die Funktion phi2(t) waehrend der ode45-Berechnung in das Graphik-Fenster            
[t x]   = ode45 (@RechteSeite , tspan , x0 , options) ;
       
 
% Animation der Bewegung, zunaechst "Sortieren der Ergebnisse":
phi1i = x(:,1) ;    % x ist die Matrix der Ergebnisse,
phi2i = x(:,2) ;;   % phi1i und phi2i sind Vektoren
 
clf
tt = tspan(1) ;
xx = [0  l1*sin(phi1i(1))  l1*sin(phi1i(1))+l2*sin(phi2i(1))] ; yy = [0 -l1*cos(phi1i(1)) -l1*cos(phi1i(1))-l2*cos(phi2i(1))] ; plot ([0 l1/8 -l1/8 0],[0 l1/6 l1/6 0] , 'r-') ; hold on p=plot (xx,yy,'o-','EraseMode','xor') ; axis (1.1*[-(l1+l2) (l1+l2) -(l1+l2) (l1+l2)]) ; zeit = title (sprintf('t = %8.2f s' , tt)) ; set (gca , 'userdata' , zeit)
 
deltatt  = 1/25     ;    % 25 Bilder pro Sekunde
zeitlupe = 1        ;    % Verzögerungsfaktor
cstart   = cputime  ;
Zeitschritte = length (t)
 
for ii=1:Zeitschritte    % Schleife über alle berechneten Zeitschritte
   if (t(ii) >= tt)      % Ausgabe jeweils nur nach deltatt
       xx = [0  l1*sin(phi1i(ii))  l1*sin(phi1i(ii))+l2*sin(phi2i(ii))] ;
       yy = [0 -l1*cos(phi1i(ii)) -l1*cos(phi1i(ii))-l2*cos(phi2i(ii))] ;
       set(p , 'XData' , xx , 'YData' , yy)
       while (cputime-cstart < tt*zeitlupe)  % warteschleife
       end
       zeit = get (gca , 'userdata');
       set(zeit , 'string' , sprintf('t = %8.2f s' , tt))
       drawnow
       tt = tt + deltatt ;
   end
end
 
% ============================================================
% Funktion, die die "Massenmatrix" des Dgl.-Systems definiert:
function M = Massenmatrix (t , xv)
 
global mdm  J1  J2  s1  s2  gdl
 
phi1   = xv(1) ;
phi2   = xv(2) ;
omega1 = xv(3) ;
omega2 = xv(4) ;
 
c = cos(phi1-phi2);
M = [ 1  0      0             0      ;
      0  1      0             0      ;
      0  0  s1^2+J1+mdm    mdm*s2*c  ;
      0  0    mdm*s2*c   mdm*s2^2+J2 ] ;
 
 
 
% ============================================================
% Funktion, die die "rechte Seite" des Dgl.-Systems definiert:
function xvp = RechteSeite (t , xv)
 
global mdm  J1  J2  s1  s2  gdl
 
phi1   = xv(1) ;
phi2   = xv(2) ;
omega1 = xv(3) ;
omega2 = xv(4) ;
 
s = sin(phi1-phi2);
 
phi1p   = omega1 ;
phi2p   = omega2 ;
omega1p = -mdm*s2*omega2^2*s - (s1+mdm)*gdl*sin(phi1) ;
omega2p =  mdm*s2*omega1^2*s -   mdm*s2*gdl*sin(phi2) ;
 
xvp = [phi1p ; phi2p ; omega1p ; omega2p]   ;
 
function h = h_glockenwand(t,h,phi1,phi2,psi)
       
global psi  
 
h= [h(2); psi/2-(phi1-phi2)];
   
global psi    
 
function [value, isterminal, direction]=ereignis(t,h,phi1,phi2,psi)
value=h(1);
isterminal= 1
direction= -1
 
phi=pi/9, phi= pi/6, psi=pi/2;
 
h0=[1;-1];
tend=20;
tspan=[0 tend];
options=odeset('Events', @ereignis);
t[];
h[];
 
while 1
[tout hout];
n=length(tout);
t=[t;hout];
h0=[0; -hout(n,2)];
tstart=tout(n);
tspan=[tstart tend];
if tstart>=tend
    break
end
end
 
phi=(h:1);
phipunkt=h(:,2);
subplot(211);
plot(t,phi,t,phipunkt);


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 20.09.2010, 21:40     Titel: Re: Glockendynamik / Glockenschwingung
  Antworten mit Zitat      
Hallo Kath_glocke,

Zitat:
Der letzte teil : function h = h_glockenwand(t,h,phi1,phi2,psi) funktioniert irgendwie nicht, ich weiß aber nicht wo der Fehler ist...

Es ist notwendig, dass Du "den Fehler" beschreibst. Wir können kaum eine Lösung dafür finden, dass es "irgendwie ncht funktioniert". Bitte beschreibe doch mal, ob es eine Fehlermeldung gibt, wenn ja, welche? Oder stimmen die Ergebnisse nicht mit Deinen Erwartungen überein - wenn ja, welche?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
kath_glocke

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2010, 07:06     Titel:
  Antworten mit Zitat      
Hallo Jan S,

Wenn ich das programm starte, zeichnet es mir die Funktion phi2(t) waehrend der ode45-Berechnung...Dann wird die Schwingung des Doppelpendels in der Animation angezeit.
Es gibt aber keine Augabe zu dem Anschlagpunkt... also dem Punkt wo h0=o ist! Das sollte mir doch die Event funktion liefern oder?!
Die einzige warnung die mir das Programm liefert ist: "Line 142: An MlLint problem analyzing this file caused your previous Matlab session to terminate unexpectedly".
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 21.09.2010, 19:21     Titel:
  Antworten mit Zitat      
Hallo kath_glocke!

Zitat:
Die einzige warnung die mir das Programm liefert ist: "Line 142: An MlLint problem analyzing this file caused your previous Matlab session to terminate unexpectedly".

Waaaas? Die Zeile hat MLint so in Rage gebracht, dass Matlab sich terminierte?! Das ist ja köstlich. Welches ist die Zeile 142? Die muss ich unbedingt haben.

Du hast "global psi" doppelt. Wozu?

Was machen denn diese Zeilen: "t[]; h[];" ??

Dies ist für mich rätselhaft:
Code:
while 1
[tout hout];    % ??? Wozu
n=length(tout);  % ??? tout ändert seine Länge nicht
t=[t;hout];
h0=[0; -hout(n,2)];
tstart=tout(n);    % ??? Ist immer das gleiche Element
tspan=[tstart tend];  % ??? Ändert sich auch nicht
if tstart>=tend  % ??? tstart immer gleich
    break
end
end

Ich kann den ganzen Block nicht nachvollziehen.

Bist Du sicher, dass Du "phi=(h:1);" meinst? Vielleicht "phi=h(:, 1);"?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Kath_Glocke

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2010, 22:19     Titel:
  Antworten mit Zitat      
Zeile 142 ist : plot(t,phipunkt);

Was heißt das genau, "Matlab muss sich terminieren"?
Werde versuchen es zu überarbeiten...
Danke für die Ansätze![/quote]
 
Kath_Glocke

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2010, 22:24     Titel:
  Antworten mit Zitat      
http://books.google.de/books?id=Unj.....onepage&q&f=false

Das ist ein Auschnitt aus einem Buch, in dem beschrieben wird, wie ich die Eventfunktion einbinde...vielleicht hilft es weiter?
 
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.