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

if-Bedingung funktioniert nicht richtig

 

Refurbished
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 16.07.13
Wohnort: Bonn
Version: ---
     Beitrag Verfasst am: 09.08.2013, 14:49     Titel: if-Bedingung funktioniert nicht richtig
  Antworten mit Zitat      
Hallo zusammen, ich habe ein kleines Programm geschrieben, das die Fahrt eines Slingshot/Reverse Bungee Fahrgeschäftes darstellen soll. Zunächst einmal bin ich zur Vereinfach davon ausgegangen, dass ich nur ein Seil habe und es nur eine Auslenkung in Y-Richtung gibt. Die Simulation dessen hat soweit wunderbar geklappt.




Code:
function slingshot1                           % Aufruf des Hauptprogramms slingshot 1
clear all
global m d c g;                               % globale Variablendeklaration

g=9.81;                                       % Erdbeschleunigung in [m/s^2]
d=80;                                         % Dämpfungskonstante in [N/m]
c=500;                                        % Federkonstante in [N/m]
m=250;                                        % Masse Passagiere + Kugel in [Kg]

x0=[-70 0];                                   % Startwerte: Z1=Ort Z2=Geschwindigkeit
pause on                                      % ermöglicht das pausieren
tspan = (0:0.1:20);                           % Zeitspanne und Schritte in Sekunden

options = odeset('RelTol',1.0e-4,'AbsTol', 1.0e-4)%,'OutputFcn',@odeplot);   % Toleranzen Solver
[t,y]=ode45(@dgl,tspan,x0, options);          % DGL lösen

plot(t,y(:,1));                               % Werte auftragen (Es soll nur die Auslenkung über die Zeit geplottet werden)
xlabel('Zeit [s]');                           % Benennung x-Achse
ylabel('Auslenkung [m]')                      % Benennung y-Achse
title('Simulation eines Slingshots')          % Überschrift hinzufügen


%DGL beschreiben
function dy=dgl(t,y)
global m d c g

%DGLSystem 1. Ordnung
Test=size(y)                                        % Zur Kontrolle der Dimensionen der Matrix
dy(1,1)=y(2);
dy(2,1)=-c/m*y(1)-d/m*y(2)-g;
   
 



Nun möchte ich nach einbauen, dass die Kräfte des Seils nur nur wirken, wenn die Auslenkung größer ist als die Seillänge (30m angesetzt, aber noch variablen). Zu dem Zweck möchte ich vorgeben, das c und d gleich 0 sind, wenn die Auslenkung (y) >=20 oder <=-20 ist.

Ich habe versucht das ganze mit einer if-Bedingung zu lösen:

Code:

if y>=20
    c=500;
    d=80;
elseif y<=-20
    c=500;
    d=80;
else
    c=0;
    d=0;
end


Dabei scheinen c und d aber bei 0 zu bleiben, sodass die Kurve immer weiter fällt. Hat jemand eine Idee, wie ich das Problem beheben kann? Evtl. gibt es ja auch eine bessere Lösung hierfür als eine If Bedingung...


Tausend Dank für eure Unterstützung!

Chris
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.08.2013, 15:40     Titel:
  Antworten mit Zitat      
Hallo,

mit
Code:
werden bei einem Vektor alle Komponenten auf diese Bedingung getestet. Ich vermute aber, du willst
Code:

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Refurbished
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 16.07.13
Wohnort: Bonn
Version: ---
     Beitrag Verfasst am: 09.08.2013, 16:28     Titel:
  Antworten mit Zitat      
Genial, jetzt funktioniert alles!

Meistens sind es echt die kleinen Sachen...


Vielen Dank Harald!
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 10.08.2013, 02:55     Titel: Re: if-Bedingung funktioniert nicht richtig
  Antworten mit Zitat      
Hallo Refurbished,

Noch ein Kommentar: "clear all" löscht alle lokalen Variablen, aber am Anfang einer Funktion gibt es noch gar keine. Darüber hinaus werden alle Funktionen aus dem Speicher gelöscht und das erneute Einlesen von der Festplatte verschwendet viel Zeit. Und weiterhin werden alle Debugger-Breakpoints gelöscht. Und alles, was das Debuggen erschwert, ist ein Feind des Programmierers.

Gruß, Jan

PS. Ja, ich schreibe mal ein Tutorium, anstatt mich immer wieder zu wiederholen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 10.08.2013, 10:33     Titel: Re: if-Bedingung funktioniert nicht richtig
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:

PS. Ja, ich schreibe mal ein Tutorium, anstatt mich immer wieder zu wiederholen.
das wäre sehr schön dann kann ich das endlich in meinen anhang packen Smile
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Refurbished
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 16.07.13
Wohnort: Bonn
Version: ---
     Beitrag Verfasst am: 12.08.2013, 13:23     Titel: Re: if-Bedingung funktioniert nicht richtig
  Antworten mit Zitat      
Hallo Jan,

vielen Dank für die Information! Ich habe es direkt mal bei meinem Programm rausgenommen. Finde es immer wieder gut etwas dazuzulernen!

Das mit den Tutorien wäre natürlich für Anfänger wie mich eine super Sache, vielen Dank an dieser Stelle für euer unglaubliches Engagement. Weiter so!


Grüße,

Refurbished




Jan S hat Folgendes geschrieben:
Hallo Refurbished,

Noch ein Kommentar: "clear all" löscht alle lokalen Variablen, aber am Anfang einer Funktion gibt es noch gar keine. Darüber hinaus werden alle Funktionen aus dem Speicher gelöscht und das erneute Einlesen von der Festplatte verschwendet viel Zeit. Und weiterhin werden alle Debugger-Breakpoints gelöscht. Und alles, was das Debuggen erschwert, ist ein Feind des Programmierers.

Gruß, Jan

PS. Ja, ich schreibe mal ein Tutorium, anstatt mich immer wieder zu wiederholen.
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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 - 2025 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.