|
|
Suche dringend Hilfe / Nachhilfe Raum Köln |
|
kathi_00 |
Forum-Newbie
|
|
Beiträge: 1
|
|
|
|
Anmeldedatum: 20.09.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.09.2010, 17:48
Titel: Suche dringend Hilfe / Nachhilfe Raum Köln
|
|
|
|
|
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...
Viellciht bietet ja einer Nachhilfe, so dass er mir bei meinem Programm helfen kann... Ich suche jemnaden im Raum Köln Universität
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);
|
|
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|