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

Variable im Zeitverlauf ändern

 

gdow86
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 20.07.12
Wohnort: ---
Version: 7.9.0 (R2009b)
     Beitrag Verfasst am: 25.07.2012, 11:40     Titel: Variable im Zeitverlauf ändern
  Antworten mit Zitat      
Guten Morgen liebe Community,

entweder ich bin zu doof oder es ist zu einfach Smile
Und zwar habe ich eine Variable die zu Beginn einen gewissen Wert hat und ab einer gewissen Zeit immer weiter um einen festen Wert reduziert werden soll.

Bisher habe ich das so gelöst:
Code:
if t<0.1
    a=10;
else
    a=0;
end


Jetzt möchte ich a nach diesen 0.1 kontinuierlich um x reduzieren. Hat jemand eine Idee?

Danke schon mal im voraus Smile
Private Nachricht senden Benutzer-Profile anzeigen


Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 25.07.2012, 11:44     Titel:
  Antworten mit Zitat      
Code:


meinste so etwas ?
Private Nachricht senden Benutzer-Profile anzeigen
 
gdow86
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 20.07.12
Wohnort: ---
Version: 7.9.0 (R2009b)
     Beitrag Verfasst am: 25.07.2012, 11:49     Titel:
  Antworten mit Zitat      
Genau.
Für die restliche Zeit soll a immer weiter reduziert werden, also bspw.:
Code:
a=10;
a_neu=a-x;
a=a_neu-x;


Irgendwie so...sprich a soll immer den neuen, reduzierten Wert erhalten und im nächsten Zeitschritt wieder reduziert werden und dann wieder den neuen Wert bekommen.

Hoffe das ist verständlich formuliert Question
Private Nachricht senden Benutzer-Profile anzeigen
 
Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 25.07.2012, 11:53     Titel:
  Antworten mit Zitat      
Ok jetzt solltest du dein Problem nochmals schildern. Die Lösung steht ja nun schon da oder nicht?
Private Nachricht senden Benutzer-Profile anzeigen
 
gdow86
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 20.07.12
Wohnort: ---
Version: 7.9.0 (R2009b)
     Beitrag Verfasst am: 25.07.2012, 11:56     Titel:
  Antworten mit Zitat      
Nein das ist leider nicht die Lösung, denn so bleibt das Programm in einer "Dauerschleife" hängen und kommt zu keinem Ergebnis.... ?

Oder ich hab die falsche Schleife gewählt, denn mit:
Code:
while t<10
a=10;
a_neu=a-x;
a=a_neu;
end

tritt oben genanntes Phänomen auf.
Private Nachricht senden Benutzer-Profile anzeigen
 
Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 25.07.2012, 12:01     Titel:
  Antworten mit Zitat      
ok jetzt verstehe ich dein Problem:

Endlosschleife ist klar. Deine Abbruchbedingung wird nie erreicht -> t > 10
du würdest hier eine Abbruchbedingung brauchen z.B.: a < 0

Code:

a= 10;
x= 0.1;
while a > 0
a=a-x;
end
 


Zwei Fehler hab ich hier gesehen bei dir:
Der Erste war das Abbruchkriterium und der zweite ist "a=10", somit rechnest du immer 10-x, du wirst also immer den gleichen Wert erhalten.
Private Nachricht senden Benutzer-Profile anzeigen
 
gdow86
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 20.07.12
Wohnort: ---
Version: 7.9.0 (R2009b)
     Beitrag Verfasst am: 25.07.2012, 12:09     Titel:
  Antworten mit Zitat      
Aber der soll ja aufhören, sobald der Wert für t=10 erreicht und nicht sobald a=0 ist.

Da ich das ganze für einen Löser brauche läuft die Zeit im Hauptfile ab.
main.m:
Code:
clc;

u=[0;5];
tspan=0:0.1:10;

[t,y]=ode45(@function,tspan,u);

subplot(3,1,1);
plot(t,y(:,1));

subplot(3,1,2);
plot(t,y(:,2));


function.m:
Code:
function du = function(t,u)

%Konstanten
m=1;
x=0.32;

%zeitliche Änderung von a
if t<0.1
    a=10;
else
    while t<=10
        a_neu=a-x;
        a=a_neu;
    end
end

%Berechnung der Ableitungen
du(1) = u(2);
du(2) = a/m;  
du=du';

end
 


EDIT::::
Das hier ist der "ursprüngliche" Code der function.m:
Code:
function du = function(t,u)

%Konstanten
m=1;

%zeitliche Änderung von a
if t<0.1
    a=10;
else
    a=0;
end

%Berechnung der Ableitungen
du(1) = u(2);
du(2) = a/m;  
du=du';

end
Private Nachricht senden Benutzer-Profile anzeigen
 
Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 25.07.2012, 12:50     Titel:
  Antworten mit Zitat      
Vorweg, eine Funktion die "function"heißt ist glaub ich eher schlecht gewählt, da "function" hier als Schlüsselwort verwendet wird und nicht als Name selber verwendet werden sollte. Zu deinem Code:
Du bekommst in die Funktion nicht ein t sondern einen Vektor t rein mit mehreren Werten. Hier solltest du dann eventuell über die Werte (Index verwenden) laufen lassen.

Vergiss nicht "a" zuvor noch zu deklarieren, könnte sonst zu einem Problem führen falls der else Zweig zuerst ausgeführt werden sollte.

Code:
function du = function(t,u)

%Konstanten
m=1;
x=0.32;

%Variablendeklaration von a fehlt hier

%zeitliche Änderung von a
for idx = 1:length(t)
 if t(idx)<0.1
    a=10;
 else
    a=a-x;
 end
end

%Berechnung der Ableitungen
du(1) = u(2);
du(2) = a/m;  
du=du';

end
Private Nachricht senden Benutzer-Profile anzeigen
 
gdow86
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 20.07.12
Wohnort: ---
Version: 7.9.0 (R2009b)
     Beitrag Verfasst am: 25.07.2012, 13:08     Titel:
  Antworten mit Zitat      
Hmmm, wenn ich das so ausführe bekomme ich die folgende Fehlermeldung:
Code:
??? Undefined function or variable "a".


Also müsste a doch vorher, bei m und x, definiert werden oder? Allerdings wäre doch dann der erste Teil der if-Schleife für die Katz?
Private Nachricht senden Benutzer-Profile anzeigen
 
Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 25.07.2012, 13:13     Titel:
  Antworten mit Zitat      
Wie willst du dann a=a-x; rechnen wenn du keinen vordefinierten Wert hast? x von irgendetwas abziehen ist wiederum irgendetwas oder doch nicht? ^^ Ist dann eher philosophisch zu beantworten.

Ne jetzt aber wieder zum Thema. Wenn bei dir zum ersten mal a=a-x berechnet werden soll, welchen Wert hat hier a vor der Subtraktion? Wenn dieser 10 ist, dann kannst du ja vor die for Schleife a=10; reinschreiben und fertig.
Private Nachricht senden Benutzer-Profile anzeigen
 
gdow86
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 20.07.12
Wohnort: ---
Version: 7.9.0 (R2009b)
     Beitrag Verfasst am: 25.07.2012, 13:25     Titel:
  Antworten mit Zitat      
Ok, das war dann jetzt zu offensichtlich.
Klar muss ich vorher einen Wert vorgeben von dem man anschließend etwas abziehen kann Smile

Jetzt wundert mich aber gerade noch etwas. Müsste der untere Graph nicht in die andere Richtung verlaufen, da ich den Wert ja reduziere.

Im Prinzip ist es ja nichts anderes als eine Geschwindigkeitsfunktion, in der ich die Beschleunigung reduziere. Somit müsste die Steigung doch eigentlich negativ sein oO.

EDIT::::
Ich habe mir gerade mal die Zeile a=a-x ausgeben lassen....a bleibt immer konstant auf einem Wert :-/

plot_01.jpg
 Beschreibung:

Download
 Dateiname:  plot_01.jpg
 Dateigröße:  19.9 KB
 Heruntergeladen:  366 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 25.07.2012, 13:34     Titel:
  Antworten mit Zitat      
kommt er denn überhaupt in den else Zweig rein? sollte sich normal verändern. Welchen Wert hat er denn?
Private Nachricht senden Benutzer-Profile anzeigen
 
gdow86
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 20.07.12
Wohnort: ---
Version: 7.9.0 (R2009b)
     Beitrag Verfasst am: 25.07.2012, 13:37     Titel:
  Antworten mit Zitat      
Ich denke schon das er in den else-Zweig rein kommt.
Denn der Wert ist konstant a=a-x, also immer 10-0.32=9.68.

Eigentlich müsste er danach ja 9.68-0.32 usw. rechnen, was aber offensichtlich nicht funktioniert?
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 25.07.2012, 13:41     Titel:
  Antworten mit Zitat      
Denken ist nicht wissen Wink

Setze einen Breakpoint an die Stelle und lass das Programm laufen. Ob er die Anweisung ausführt zeigt sich dann, ob er an dem Breakpoint anhält.
Private Nachricht senden Benutzer-Profile anzeigen
 
Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 25.07.2012, 13:41     Titel:
  Antworten mit Zitat      
deklarierst du "a" beim ersten mal vor der for Schleife oder? Deine Werte in t sind aufsteigend sortiert oder? Also er geht nicht einmal in den if Zweig und dann wieder in den else Zweig?

Was anderes noch, willst du hier eigentlich für jedes t einen Wert in a stehen haben oder ein einziges a berechnen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.