Verfasst am: 24.05.2021, 21:00
Titel: Eingabe im Appdesigner mit Matrix verknüpfen
Guten Abend liebes Matlab-Forum,
ich hoffe ihr könnt mir helfen. Ich möchte die Windgeschwindigkeiten, welche ich mit meinem Appdesigner eingebe mit meiner Matrix verrechnen. Die matrix hat insgesamt 6 Komponenten.[x-Richtung,y-Richtung,z-Richtung,vx,vy,vz]. Ich beobachte das Verhalten meines Springers über 100 Sekunden. Wie Kann ich meine Eingaben mit den Geschwindigkeiten verknüpfen?Ich bekomme laufend Fehlermeldungen das die Vektorgröße nicht passt.
Code:
function dzdt = airborne(t,z) % Konstanten
g = 9.81; % Fallbeschleunigung
m = 130; % Masse in kg
% Anfangsbedingungen
z0 = [0,0,400,66.6,0,0];%ab hier läuft dann die Matrix z1 durch
% Zeit
t = 0:1:100;
% löst Funktion airborne [t,z1] = ode45('airborne',t,z0);
for t = 1
auftreffpunkt1 = flugzeug-springer1
auftreffpunkt2 = flugzeug-springer2
end
%Werte aus den Vektoren des Springers
Ax1=auftreffpunkt1(:,1);
Ay1=auftreffpunkt1(:,2);
Az1=auftreffpunkt1(:,3);
Ax2=auftreffpunkt2(:,1);
Ay2=auftreffpunkt2(:,2);
Az2=auftreffpunkt2(:,3);
Diese Dateien sind im gleichen Ordner gespeichert. Die Werte die ich in der App eingebe werden auch im debuggingmodus als Werte im Workspace gespeichert, aber nicht für die Rechnungen übernommen. Wo liegt der Fehler ?
meine Empfehlung wäre, das Skript auch in eine Funktion umzuwandeln und diese Funktion dann aus der App heraus aufzurufen. Dabei kannst du dann die Eingaben der App übergeben.
Bitte Fehlermeldungen zitieren und nicht übersetzen/interpretieren und vor allem: bitte angeben, in welcher Zeile die Fehlermeldung erzeugt wird.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
"Error using odearguments (line 95)
AIRBORNE returns a vector of length 4, but the length of initial conditions vector
is 6. The vector returned by AIRBORNE and the initial conditions vector must have
the same number of elements.
Error in Fallschirm/SprungButtonPushed (line 44)
[t,z1] = ode45('airborne',t,z0);
Error using matlab.ui.control.internal.controller.ComponentController/executeUserCallback (line 335)
Error while evaluating Button PrivateButtonPushedFcn."
Das sind meine Fehlermeldungen, wenn ich WindX mit den Werten aus z(4)verrechnen Will.
% Code that executes after component creation function Uebergabe_WindX(app)
WindX= app.WindXmsEditField.Value;
end
% Button pushed function: SprungButton function SprungButtonPushed(app, event) % Der Variablen WindX wird der Datentyp des Eingabepanals zugewiesen, % mit .Value nimmt es den Wert im Panel an
WindX= app.WindXmsEditField.Value;
WindY= app.WindYmsEditField.Value;
WindZ= app.WindZmsEditField.Value;
Wind=[WindX,WindY,WindZ];
% Anfangsbedingungen
z0 = [0,0,400,0.08,66.6,0];%ab hier läuft dann die Matrix z1 durch
% Zeit
t = 0:1:100;
% löst Funktion airborne
for t = 0:1:100
auftreffpunkt1 = flugzeug-springer1
auftreffpunkt2 = flugzeug-springer2
end
%Werte aus den Vektoren des Springers
Ax1=auftreffpunkt1(:,1);
Ay1=auftreffpunkt1(:,2);
Az1=auftreffpunkt1(:,3);
Ax2=auftreffpunkt2(:,1);
Ay2=auftreffpunkt2(:,2);
Az2=auftreffpunkt2(:,3);
%Zufalls t
% Plot
%figure(1)
%subplot(2,1,1)
%plot(ode_zr,'g')
%xlim([0100])
%ylim([0400])
%xlabel('Sekunden bis Springer am Boden[s]')
%ylabel('Höhe Springer[m]')
%subplot(2,1,2)
%plot(ode_vx,'r-','LineWidth',2)
%hold on
%plot(ode_vy,'b-','LineWidth',2)
%hold on
%plot(ode_vzr,'g-','LineWidth',2)
% Value changed function: WindXmsEditField function WindXmsEditFieldValueChanged(app, event)
%Diese Zeilen eignen sich gut um zum Beispiel Umrechnungen in Einheiten direkt hier zu definiernen.
%Da meine eingegebenen Werte schon in der richtigen Einheit sind, brauche ich keine Umrechnungen
end
% Value changed function: WindYmsEditField function WindYmsEditFieldValueChanged(app, event)
%value = app.WindYmsEditField.Value;
%app.WindYmsEditField.Value = num2str(1,1);
%vec = str2double(strsplit(app.WindYmsEditField.Value{1}));
App im Appdesigner. Ich möchte die Eingaben für den Wind in X,Y,Z Richtung eingeben. Dadurch soll sich natürlich auch der Auftreffpunkt für einen Springer verändern. mein Gedanke war die Windgeschwindigkeiten mit den Werte aus der Matrix z1 zu verrechnen. Wo habe ich den Fehler?
globale Variablen oberhalb eines function-Statements zu deklarieren ist wenig sinnvoll. Vor allem sollten globale Variablen generell vermieden werden.
Wie du bei ode45 Parameter an eine Funktion übergeben kannst, siehst du z.B. im Beispiel "Pass Extra Parameters to ODE Function" in der Doku.
Ich weiß auch nicht, wie man heute noch auf die Idee kommt, die Funktion als Zeichenkette statt als Function Handle zu übergeben. Diese Syntax ist seit über 10 Jahren veraltet.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.