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.
% 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
% ... 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/80],[0 l1/6 l1/60] , '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)
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)
c = cos(phi1-phi2);
M = [1000 ;
0100 ;
00 s1^2+J1+mdm mdm*s2*c ;
00 mdm*s2*c mdm*s2^2+J2 ] ;
% ============================================================ % Funktion, die die "rechte Seite" des Dgl.-Systems definiert: function xvp = RechteSeite (t , xv)
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
kath_glocke
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 21.09.2010, 07:06
Titel:
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".
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:
while1 [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
Das ist ein Auschnitt aus einem Buch, in dem beschrieben wird, wie ich die Eventfunktion einbinde...vielleicht hilft es weiter?
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.