1 Variable wird nicht in der Formel benötigt aber hat irgendwie relevanz
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
Ich habe eine Übungsaufgabe von meinem Prof. bekommen. Anbei haben wir eine Lösung bekommen in der eine Funktion beschrieben wird die im Hauptcode aufgerufen wird.
Diese Funktion Ue_6_1_f(t,x) hat 2 Variablen die ihr übergeben werden. Jedoch wird im Code die Variable "t" nicht verwendet, das Ergebnis verändert sich über die Zeit jedoch. Das sollen zwei Differenzialgleichungen sein, die in der Funktion bearbeitet werden. Vielleicht könnt ihr mir ja helfen.
%Übung 6 A1 DGL. DynamischeProbleme
clear all, close all, clc;
global a1 s1 a2 s2 m1 m2 TS1 TS2 g
a1=3;
s1=1.5;
a2=1.8;
s2=0.9;
m1=10;
m2=80;
TS1=7.5;
TS2=20;
g=9.81;
tend=1.59; %Zeitpunkt, an dem der Clown den Boden berührt(ausprobieren)
%Anfangswerte
a0=10; % anfänglicher Leiterwinkel
b0=11.03; % anfänglicher Clownwinkel
x0=[a0*pi/180; b0*pi/180; 0; 0]; %Angaben im Bogenmaß[rad]
%Runge/Kutta 4./5. Ordnung
[t,x]=ode45('Ue_6_1_f',[0 tend],x0);
alpha=x(:,1)*180/pi; % berechneter Leiterwinkel ueber der Zeit
beta=x(:,2)*180/pi; % berechneter Clownwinkel ueber der Zeit
plot(t,alpha,t,beta,'linewidth',2);
figure(2)
for i=1:length(t)
x1=a1*sin(x(i,1)); % Polarkoordinaten für Leiterwinkel
y1=a1*cos(x(i,1));
x2=x1+s2*sin(x(i,2)); %Polarkoordinaten für Clownwinkel
y2=y1+s2*cos(x(i,2));
%zeichne Leiter von 0;0 nach x1;y1, rote Linie, Bubble an Punkten...
plot([0 x1],[0 y1],'r-o',[x1 x2],[y1 y2],'b-o',...
'linewidth',2);
%Umskalieren zwischen den einzelnen Plots verhindern
xlim([-a1-s2 a1+s2]);
ylim([-a1-s2 a1+s2]);
axis off;
pause(0.05);
end
function xp = Ue_6_1_f(t,x)
%Aufgabe 6.1: Clown auf Leiter - Funktion
global a1 s1 a2 s2 m1 m2 TS1 TS2 g
a=x(1);
b=x(2);
ap=x(3);
bp=x(4);
%Kochrezept:
%DGLs in die Form bringen:
%y_1pp(Faktor_1) + y2pp(Faktor_2) + ...+ ynpp(Faktor_n) = restliche Terme
%Massenmatrix:
%M = [ app-Faktor-erste-DGL bpp-Faktor-erste-DGL
% app-Faktor-zweite-DGL bpp-Faktor-zweite-DGL]
M=[TS1+m1*s1^2+m2*a1^2 m2*a1*s2*cos(a-b)
m2*a1*s2*cos(a-b) TS2+m2*s2^2];
%Rechte Seite:
%h = [restliche_Terme_erste_DGL
% restliche_Terme_zweite_DGL]
h=[-m2*a1*s2*bp*sin(a-b)+(m1*s1+m2*a1)*g*sin(a);
m2*a1*s2*ap^2*sin(a-b)+m2*s2*g*sin(b)];
ypp=M\h;
xp=[ap; bp; ypp(1); ypp(2)];
end
0 Commenti
Risposta accettata
Harald
il 11 Lug 2023
Hallo,
dass die Variable nicht verwendet wird, bezieht sich wohl auf die Funktion Ue_6_1_f. Das ist bei Differenzialgleichungen nicht ungewöhnlich: man gibt hier ja an, wie sich die Zustände ändern. Bei physikalischen Systemen ohne Anregung ist diese Änderung aber unabhängig von der (Uhr-) Zeit. Die Ausnahme wäre eben eine zeitabhängige Anregung.
Mir fällt im übrigen auf, dass hier unnötigerweise globale Variablen verwendet werden und eine veraltete, nicht mehr dokumentierte Syntax beim Aufruf von ode45. Man kann sich hier nach dem Beispiel "Pass Extra Parameters to ODE Function" aus der Doku von ode45 richten.
Viele Grüße,
Harald
0 Commenti
Più risposte (0)
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!