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

Eingabe im Appdesigner mit Matrix verknüpfen

 

Sheepdog47!
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 12.01.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.05.2021, 21:00     Titel: Eingabe im Appdesigner mit Matrix verknüpfen
  Antworten mit Zitat      
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

if t<2
    kz = 0.47, ky=0.19, kx=0.2;  % N-s^2/m^2, Widerstandswert, Schirm geschlossen
else
    kz = 70.0, ky= 30.0, kx= 40 ;% N-s^2/m^2, Widerstandswert, Schirm offen
end

% Bewegungen (z)
x = z(1);  % Querbewegung in x-Richtung in Meter (m)
y = z(2);  % Querbewegung in y-Richtung in Meter (m)
zr= z(3);  % Vertikale Bewegung in Meter(m)^
vx= z(4);
vx= vx;
%vx = z(4)+WindX; % m/s, horizontale Geschwindigkeit
vy = (z(5)); % m/s, vertikale Geschwindigkeit
vzr = (z(6));% m/s



% Formeln
v = sqrt(vx^2+vy^2+vzr^2); % m/s, Geschwindigkeit Betrag
Fx = -kx * (vx)^2
Fzr = -m*g + kz*(vzr)^2;
Fy = -ky * (vy)^2;

% Differentialgleichungen
dxdt = (vx);%yx'
dydt = (vy);%yy'
dzrdt = (vzr);
dvxdt = Fx / m;%ax;yx''
dvydt = Fy / m;%ay;yy''
dvzrdt = Fzr / m;
dzdt = [dxdt,dydt,dzrdt,dvxdt,dvydt,dvzrdt]';



end

Das ist die Datei Airborne.
Code:
% 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);

%Werte von z1 werden eingesetzt
ode_x = z1(:,1);
ode_y = z1(:,2);
ode_z = z1(:,3);
ode_vx = z1(:,3);
ode_vy = z1(:,4);
ode_vz = z1(:,6);
ode_v = sqrt(ode_vx.^2+ode_vy.^2);

flugzeug = [0,0,400]+t*[0,66.6,0];
springer1 = [-3,-151.8,400];
springer2 = [3,151.8,400];



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);

figure(4)
plot3([Ax1 Ax2],[Ay1 Ay2],[Az1 Az2],'r')
xlim([-5 5])
ylim([0 7000])
zlim([0 500])
grid
 

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 ?
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.487
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.05.2021, 21:52     Titel:
  Antworten mit Zitat      
Hallo,

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Sheepdog47!
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 12.01.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2021, 14:03     Titel:
  Antworten mit Zitat      
"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 ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);

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:
global WindX Wind Y WindZ

function dzdt = airborne(t,z)
% Konstanten
g = 9.81; % Fallbeschleunigung
m = 130;   % Masse in kg

if t<2
    kz = 0.47, ky=0.19, kx=0.2;  % N-s^2/m^2, Widerstandswert, Schirm geschlossen
else
    kz = 70.0, ky= 30.0, kx= 40 ;% N-s^2/m^2, Widerstandswert, Schirm offen
end

% Bewegungen (z)
x = z(1);  % Querbewegung in x-Richtung in Meter (m)
y = z(2);  % Querbewegung in y-Richtung in Meter (m)
zr= z(3);  % Vertikale Bewegung in Meter(m)^
vx= z(4);
vx= vx;
vx = z(4)+WindX; % m/s, horizontale Geschwindigkeit
vy = (z(5)); % m/s, vertikale Geschwindigkeit
vzr = (z(6));% m/s



% Formeln
v = sqrt(vx^2+vy^2+vzr^2); % m/s, Geschwindigkeit Betrag
Fx = -kx * (vx)^2
Fzr = -m*g + kz*(vzr)^2;
Fy = -ky * (vy)^2;

% Differentialgleichungen
dxdt = (vx);%yx'
dydt = (vy);%yy'
dzrdt = (vzr);
dvxdt = Fx / m;%ax;yx''
dvydt = Fy / m;%ay;yy''
dvzrdt = Fzr / m;
dzdt = [dxdt,dydt,dzrdt,dvxdt,dvydt,dvzrdt]';



end
 


Code:
classdef Fallschirm < matlab.apps.AppBase

    % Properties that correspond to app components
    properties (Access = public)
        UIFigure               matlab.ui.Figure
        SprungButton           matlab.ui.control.Button
        WindXmsEditFieldLabel  matlab.ui.control.Label
        WindXmsEditField       matlab.ui.control.NumericEditField
        WindYmsEditFieldLabel  matlab.ui.control.Label
        WindYmsEditField       matlab.ui.control.NumericEditField
        WindZmsEditFieldLabel  matlab.ui.control.Label
        WindZmsEditField       matlab.ui.control.NumericEditField
        Lamp                   matlab.ui.control.Lamp
        UIAxes                 matlab.ui.control.UIAxes
    end

   
 
   

    methods (Access = private)

        % 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

[t,z1] = ode45('airborne',t,z0);


%Werte von z1 werden eingesetzt
ode_x = z1(:,1);
ode_y = z1(:,2);
ode_zr = z1(:,3);
ode_vx = z1(:,4);
ode_vy = z1(:,5);
ode_vzr = z1(:,6);
ode_v = sqrt(ode_vx.^2+ode_vy.^2+ode_vzr.^2);

flugzeug = [0,0,400]+t*[0,66.6,0];
springer1 = [-3,151.8,400];
springer2 = [3,151.8,400];



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([0 100])
%ylim([0 400])
%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)

%figure(2)
%plot3(ode_x,ode_y,ode_zr,'r-','LineWidth',2)
%xlabel('Position (x)')
%ylabel('Position (y)')
%zlabel('Position (z)')
%zlim([0 400])
%grid

%figure(3)
%plot(ode_y,'b')
%ylim([0 400])
%xlim([0 100])
%xlabel('t')
%ylabel('h')


plot3(app.UIAxes,[Ax1 Ax2],[Ay1 Ay2],[Az1 Az2],'r')



% 91s braucht der Springer bis er am Boden ist
%in diesen Sekunden hat der Wind einfluss auf ihn
%v_wind * t_Flugzeit= vektor für auftreffpunkt




        end

        % 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}));
           
     
        end

        % Value changed function: WindZmsEditField
        function WindZmsEditFieldValueChanged(app, event)
         
            %value = app.WindZmsEditField.Value;
            %app.WindZmsEditField.Value = num2str(1,1);
           
        end
    end

    % App initialization and construction
    methods (Access = private)

        % Create UIFigure and components
        function createComponents(app)

            % Create UIFigure
            app.UIFigure = uifigure;
            app.UIFigure.Position = [100 100 640 480];
            app.UIFigure.Name = 'UI Figure';

            % Create SprungButton
            app.SprungButton = uibutton(app.UIFigure, 'push');
            app.SprungButton.ButtonPushedFcn = createCallbackFcn(app, @SprungButtonPushed, true);
            app.SprungButton.Position = [53 260 121 34];
            app.SprungButton.Text = 'Sprung';

            % Create WindXmsEditFieldLabel
            app.WindXmsEditFieldLabel = uilabel(app.UIFigure);
            app.WindXmsEditFieldLabel.HorizontalAlignment = 'right';
            app.WindXmsEditFieldLabel.Position = [3 428 74 22];
            app.WindXmsEditFieldLabel.Text = 'Wind X (m/s)';

            % Create WindXmsEditField
            app.WindXmsEditField = uieditfield(app.UIFigure, 'numeric');
            app.WindXmsEditField.ValueChangedFcn = createCallbackFcn(app, @WindXmsEditFieldValueChanged, true);
            app.WindXmsEditField.Position = [95 428 58 22];

            % Create WindYmsEditFieldLabel
            app.WindYmsEditFieldLabel = uilabel(app.UIFigure);
            app.WindYmsEditFieldLabel.HorizontalAlignment = 'right';
            app.WindYmsEditFieldLabel.Position = [6 376 74 22];
            app.WindYmsEditFieldLabel.Text = 'Wind Y (m/s)';

            % Create WindYmsEditField
            app.WindYmsEditField = uieditfield(app.UIFigure, 'numeric');
            app.WindYmsEditField.ValueChangedFcn = createCallbackFcn(app, @WindYmsEditFieldValueChanged, true);
            app.WindYmsEditField.Position = [95 376 58 22];

            % Create WindZmsEditFieldLabel
            app.WindZmsEditFieldLabel = uilabel(app.UIFigure);
            app.WindZmsEditFieldLabel.HorizontalAlignment = 'right';
            app.WindZmsEditFieldLabel.Position = [6 321 74 22];
            app.WindZmsEditFieldLabel.Text = 'Wind Z (m/s)';

            % Create WindZmsEditField
            app.WindZmsEditField = uieditfield(app.UIFigure, 'numeric');
            app.WindZmsEditField.ValueChangedFcn = createCallbackFcn(app, @WindZmsEditFieldValueChanged, true);
            app.WindZmsEditField.Position = [95 321 58 22];

            % Create Lamp
            app.Lamp = uilamp(app.UIFigure);
            app.Lamp.Position = [12 267 20 20];

            % Create UIAxes
            app.UIAxes = uiaxes(app.UIFigure);
            title(app.UIAxes, 'Auftreffpunkte')
            xlabel(app.UIAxes, 'X')
            ylabel(app.UIAxes, 'Y')
            app.UIAxes.PlotBoxAspectRatio = [1 0.596401028277635 0.596401028277635];
            app.UIAxes.XGrid = 'on';
            app.UIAxes.YGrid = 'on';
            app.UIAxes.ZGrid = 'on';
            app.UIAxes.Position = [185 164 438 288];
        end
    end

    methods (Access = public)

        % Construct app
        function app = Fallschirm

            % Create and configure components
            createComponents(app)

            % Register the app with App Designer
            registerApp(app, app.UIFigure)

            % Execute the startup function
            runStartupFcn(app, @Uebergabe_WindX)

            if nargout == 0
                clear app
            end
        end

        % Code that executes before app deletion
        function delete(app)

            % Delete UIFigure when app is deleted
            delete(app.UIFigure)
        end
    end
end


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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.487
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.05.2021, 14:58     Titel:
  Antworten mit Zitat      
Hallo,

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
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.