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

[Hilfe] Verwirrung bei der Matlab Programmierung

 

setasena
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 16.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2011, 15:50     Titel: [Hilfe] Verwirrung bei der Matlab Programmierung
  Antworten mit Zitat      
Hallo allerseits,
zuerst möchte ich entschuldigen, dass mein Deutsch nicht so ganz gut ist. hoffe ich trotzdem, dass ihr mich versteht..

anbei habe ich ein Matlab Programm. das Program ist von meinem Professor geschrieben.

Code:
clear all,
close all,

%------ Eingabedaten --------------------------------

m=100;     % Masse des Fahrrades mit Fahrer in kg
g=9.81;    % Erdbeschleunigung im m/s2
A=1.1;     % Anströmfläche des Fahrrades mit Fahrer in m2
cw=0.5;    % Luftwiderstandkoeffizient
rho=1.2;   % Dichte der Luft in kg/m3
cr=0.08;   % Rollwiderstandskoeffizient
tmax=60;   % maximale Berechnungszeit in s
dt=0.1;    % Zeitschrittweite zur Berechnung in s
s0=0;      % Anfangsposition in m
v0=30;     % Anfangsgeschwindigkeit in km/h

%------ Berechnung ----------------------------------

Kw=cw/2*rho*A;          % Luftwiderstand
Fr=cr*m*g;              % Rollwiderstandskraft in N
kmax=round(tmax/dt)+1;  % Anzahl der Berechnungsschritte

s(1)=s0;
v(1)=v0/3.6;
F(1)=-Kw*v(1)^2-Fr;
t(1)=0;

for k=2:kmax,
  t(k)=t(k-1)+dt;
  s1=s(k-1);
  v1=v(k-1);
  F(k)=-Kw*v1^2-Fr;        % bremsende Kraft in N
  if v1<=0, F(k)=0; end
  v2=v1+dt*(F(k)/m);       % neue Geschwindigkeit
  if v2<0, v2=0; end
  s2=s1+dt*(v2+v1)/2;      % neuer Weg
  s(k)=s2;
  v(k)=v2;
  if v2==0, break, end     % Abbruch bei v=0
end

kor=(v(k-1)-0)/(v(k-1)-v(k));   % Korrektur des letzten Zeitschrittes
v(k)=v(k-1)+kor*(v(k)-v(k-1));
s(k)=s(k-1)+kor*(s(k)-s(k-1));
t(k)=t(k-1)+kor*(t(k)-t(k-1));
F(k)=F(k-1)+kor*(F(k)-F(k-1));

%------ Ausgabe -------------------------------------

subplot(2,1,1),
plot(s,v*3.6,'r','linewidth',2),
grid on
title(['Ausrollen eines Fahrrades   t = ' num2str(max(t)) ' s']),
xlabel('s in m'),
ylabel('v in km/h'),

subplot(2,1,2)
plot(s,F,'b','linewidth',2),
grid on
xlabel('s in m'),
ylabel('F in N'),
 


Meine Aufgabe ist auf Basis dieser Programm den beim Ausrollen zurückgelegten Weg in
Abhängigkeit vom Rollwiderstand cr (±50% vom Ausgangswert)
ermitteln. Am Ende müssen wir dann grafisch darstellen.

Ich habe die Aufgabe nicht so ganz verstanden. wird es so gemeint, dass die Rollwiderstand (cr) mit der Zeit verändert wird? Kann irgendjemand mir helfen, ein paar tips zu geben, um die Aufgabe zu lösen?

Tausend tausend vielen Dank. ich entschuldige mich für meine dumme Frage Sad
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: 05.10.2011, 16:24     Titel:
  Antworten mit Zitat      
Der Rollwiderstand cr soll variiert werden.

Code:

cr_100 = 0.08 % Ausgangswert
cr_50 = 0.04 % - 50 %
cr_150 = 0.12 % +50 %

% z.B.: Vektor cr im Bereich 50...150% in 10% Schritten

cr = cr_50:cr_100/10:cr_150;
 


Jetzt musst du die Berechung etwas anpassen, so dass für jeden cr Wert, der Weg und die Geschwindigkeit berechnet werden. Für jeden cr Wert soll dann das Diagramm erstellt werden.
Private Nachricht senden Benutzer-Profile anzeigen
 
setasena
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 16.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.10.2011, 17:54     Titel:
  Antworten mit Zitat      
Tausend vielen Dank DSP für die Antwort.

Ich hoffe dass Sie (oder vielleicht die andere) mir weiterhelfen können.
Jetzt ist meine Aufgabe (vielen Dank nochmal dsp) die Zusammenhang zwischen der Weg und cr (cr wurde von 0,04 bis 0,12 jetzt variieret) in Diagram zu erstellen.

Wie dort in der Program geschrieben ist, ist der gesamte F von der Fr abhängig. Ist jedoch die Fr selbst von cr abhängig. Um diese Problem zu lösen, denke ich, dass eine For-Schleife in der Haupt for-schleife addieren muss. Die Erste For-Schleife ist mit der Variant der Zeit abhängig, die andere for-Schleife ist mit der Variant der cr abhängig.

Soweit habe ich solche Program geschrieben,

Code:


%------ Berechnung ----------------------------------

Kw=cw/2*rho*A;          % Luftwiderstand
% Fr=cr*m*g;              % Rollwiderstandskraft in N
kmax=round(tmax/dt);  % Anzahl der Berechnungsschritte der Zeit

s(1)=s0;
v(1)=v0/3.6;
cr(1)=0.04;
F([1,1])=-Kw*v(1)^2-cr(1)*m*g;
t(1)=0;


for k=2:kmax,
    for n=cr_50:cr_100/600:cr_150,
  s1=s(k-1);
  F([k,n])=-Kw*v(k-1)^2-cr(n-1)*m*g;       % bremsende Kraft in N
  t(k)=t(k-1)+dt;
  if v1<=0, F(k)=0; end
  v2=v1+dt*(F([k,n])/m);       % neue Geschwindigkeit
  if v2<0, v2=0; end
  s2=s1+dt*(v2+v1)/2;      % neuer Weg
  s(k)=s2;
  v(k)=v2;
  if v2==0, break, end     % Abbruch bei v=0
    end
end

 


zwar war alles nur einfach katastroph.. Können Sie mir vielleicht helfen, um die Berechnung weiter zu lösen? wo liegt meine Fehler? Sad

ich bedanke mich vielmals!!!
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: 07.10.2011, 19:21     Titel:
  Antworten mit Zitat      
Ehrlich gesagt verstehe ich deinen Code/Gedankengang nicht. Du kannst doch die Berechnung, so lassen und cr in einer äußeren Schleife variieren. Am Ende musst du nur die Ergebnisse von s,v und F abspeichern, bevor sie für einen neuen cr-Wert berechnet werden.

Code:

%------ Eingabedaten --------------------------------

m=100;     % Masse des Fahrrades mit Fahrer in kg
g=9.81;    % Erdbeschleunigung im m/s2
A=1.1;     % Anströmfläche des Fahrrades mit Fahrer in m2
cw=0.5;    % Luftwiderstandkoeffizient
rho=1.2;   % Dichte der Luft in kg/m3
tmax=60;   % maximale Berechnungszeit in s
dt=0.1;    % Zeitschrittweite zur Berechnung in s
s0=0;      % Anfangsposition in m
v0=30;     % Anfangsgeschwindigkeit in km/h

cr_100 = 0.08 % Rollwiderstandskoeffizient - Ausgangswert
cr_50 = 0.04  % - 50 %
cr_150 = 0.12 % +50 %

% Vektor cr im Bereich 50...150% in 10% Schritten
cr = cr_50:cr_100/10:cr_150;

%------ Berechnung ----------------------------------

for i=1:length(cr)
    Kw=cw/2*rho*A;          % Luftwiderstand
    % cr Wert variieren
    Fr = cr(i)*m*g;           % Rollwiderstandskraft in N
    kmax=round(tmax/dt)+1;  % Anzahl der Berechnungsschritte

    s(1)=s0;
    v(1)=v0/3.6;
    F(1)=-Kw*v(1)^2-Fr;
    t(1)=0;

    for k=2:kmax,
      t(k)=t(k-1)+dt;
      s1=s(k-1);
      v1=v(k-1);
      F(k)=-Kw*v1^2-Fr;        % bremsende Kraft in N
      if v1<=0, F(k)=0; end
      v2=v1+dt*(F(k)/m);       % neue Geschwindigkeit
      if v2<0, v2=0; end
      s2=s1+dt*(v2+v1)/2;      % neuer Weg
      s(k)=s2;
      v(k)=v2;
      if v2==0, break, end     % Abbruch bei v=0
    end

    kor=(v(k-1)-0)/(v(k-1)-v(k));   % Korrektur des letzten Zeitschrittes
    v(k)=v(k-1)+kor*(v(k)-v(k-1));
    s(k)=s(k-1)+kor*(s(k)-s(k-1));
    t(k)=t(k-1)+kor*(t(k)-t(k-1));
    F(k)=F(k-1)+kor*(F(k)-F(k-1));
   
    % Ergebnisse für den i. cr-Wert speichern
    % Verwendung einer Struktur
    Data(i).Name   = ['Rollwiderstand =', num2str(cr(i))];
    Data(i).Zeit    = t;
    Data(i).Weg    = s;
    Data(i).Geschw = v;
    Data(i).Kraft  = F;
end
 


Jetzt musst du nur noch die Ausgabe anpassen, so dass alle Datensätze dargestellt werden. Man kann die Berechnung aber auch ohne eine zusätzliche for-Schleife lösen, in dem man eine elementweise Multiplikation mit .* vornimmt. Da es ja hier wohl auch um das Erlernen der "Matlabsprache" geht, empfehle ich dir, diese Lösung ebenfalls zu erarbeiten.

Zuletzt bearbeitet von DSP am 07.10.2011, 19:25, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
setasena
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 16.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.10.2011, 19:24     Titel:
  Antworten mit Zitat      
ist das auch möglich?? aber wie kann ich das in mein Hauptprogram integrieren??

Code:
cr(1) = 0.04;
s(1) = ??

for i = 2:9
   cr(2) = cr(1) + 0.01;
   s(2)  = ?
end

plot(cr, s)
 
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: 07.10.2011, 20:32     Titel:
  Antworten mit Zitat      
Verstehe ich nicht...cr soll doch gar nicht geplottet werden.

Es wird der Weg, Kraft und Geschwindigkeit für verschiedene cr berechnet und soll anschließend dargestellt werden. Je nach dem wie groß der Rollwiderstand ist, ergeben sich unterschiedliche Kräfte und Strecken, die zurückgelegt werden.
Private Nachricht senden Benutzer-Profile anzeigen
 
setasena
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 16.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.10.2011, 02:05     Titel:
  Antworten mit Zitat      
Hallo DSP,
was muss ermitelln, ist eine Zusammenhang zwischen cr und der weg.

Also,: cr für die x achse, und weg als der Y-Achse..

Bild1.png
 Beschreibung:

Download
 Dateiname:  Bild1.png
 Dateigröße:  140.54 KB
 Heruntergeladen:  378 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
setasena
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 16.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.10.2011, 08:14     Titel:
  Antworten mit Zitat      
Soweit ich verstehe, sieht Ihre Gedankegang so aus:

1. Schritt: cr wurde von 0,04 bis 0,12 variiert mit einem Schritte von 0,008. Also 0,04; 0,048; 0,056;……..bis 0,12.
Prinzipiel sieht am Ende so aus: cr(1) = 0,04; cr(2) = 0,048, cr(3) = 0,056, usw.

2. Schritt: In der erste For schleife, wurde i aufgerufen. i=1. Also cr(1) = 0,04.

3. Schritt: Kw wird berechnet

4. Schritt: Fr wird mit cr(1) berechnet

5. Schritt: Kmax wird auch berechnet

6. Schritt: S(1), v(1), sowie t(1) wird auch bestimmen.

7. Schritt: F(1) wird mit cr(1) berechnet. (Fr=cr*m*g)

8. Schritt: In der zweite For Schleife, wurde k aufgerufen. k=2.

9. Schrit: F(2) wird mit cr (1) berechnet.

10. Schritt: V2 wird mit F(2) berechnet.

11. Schritt: S2 wird mit v2 berechnet

12. Schritt: 8. Schritt bis 11, Schritt werden wiederholt bis k=kmax erreicht.

13. Schritt: Nach k=kmax, geht die Vorgang zurück zu 2. Schritt, ist aber diesmal mit i=2.

14. Schritt: die gesamte Vorgänge werden wieder wiederholt.

Als Ausgabe, haben wir dann unterschiedliche cr, mit unterschiedliche weg, geschwindigkeit, usw.

Ist das richtig was Sie gemeint haben?

Mit der plot diagram, habe ich auch nicht so ganz verstanden, was der Professor gemeint hat.
In der Aufgabe hat er gesagt, dass es die Zusammenhang zwischen der cr (als x-Achse) und weg (als y-Achse) dargestellt werden muss. Das bedeutet vielleicht, es wird fast 600 Linien in der Diagram gezeigt. Jede Linie entspricht der Zeit. Also Linie für 0.1 Sekunden, Linie für 0.2 Sekunden, usw, bis Linie für 60 Sekunden.

Andere Möglichkeit (denke ich, es wird einfacher), dass es die Zusammenhang zwischen der Zeit (x-Achse) und weg (y-achse) dargestellt werden muss. Jede Linie entspricht dann unterschiedliche cr. Also Linie für 0.04, Linie für 0.048, Linie für 0,056, usw. bis Linie für 0,12.
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: 08.10.2011, 10:48     Titel:
  Antworten mit Zitat      
Sorry...da hatte ich die Aufgabe etwas missverstanden. Das sollte dann so gehen:

Code:

%------ Eingabedaten --------------------------------

m=100;     % Masse des Fahrrades mit Fahrer in kg
g=9.81;    % Erdbeschleunigung im m/s2
A=1.1;     % Anströmfläche des Fahrrades mit Fahrer in m2
cw=0.5;    % Luftwiderstandkoeffizient
rho=1.2;   % Dichte der Luft in kg/m3
tmax=60;   % maximale Berechnungszeit in s
dt=0.1;    % Zeitschrittweite zur Berechnung in s
s0=0;      % Anfangsposition in m
v0=30;     % Anfangsgeschwindigkeit in km/h

cr_100 = 0.08 % Rollwiderstandskoeffizient - Ausgangswert
cr_50 = 0.04  % - 50 %
cr_150 = 0.12 % +50 %

% Vektor cr im Bereich 50...150% in 10% Schritten
cr = cr_50:cr_100/10:cr_150;

%------ Berechnung ----------------------------------

for i=1:length(cr)
    Kw=cw/2*rho*A;          % Luftwiderstand
    % cr Wert variieren
    Fr = cr(i)*m*g;           % Rollwiderstandskraft in N
    kmax=round(tmax/dt)+1;  % Anzahl der Berechnungsschritte

    s(1)=s0;
    v(1)=v0/3.6;
    F(1)=-Kw*v(1)^2-Fr;
    t(1)=0;

    for k=2:kmax,
      t(k)=t(k-1)+dt;
      s1=s(k-1);
      v1=v(k-1);
      F(k)=-Kw*v1^2-Fr;        % bremsende Kraft in N
      if v1<=0, F(k)=0; end
      v2=v1+dt*(F(k)/m);       % neue Geschwindigkeit
      if v2<0, v2=0; end
      s2=s1+dt*(v2+v1)/2;      % neuer Weg
      s(k)=s2;
      v(k)=v2;
      if v2==0, break, end     % Abbruch bei v=0
    end

    kor=(v(k-1)-0)/(v(k-1)-v(k));   % Korrektur des letzten Zeitschrittes
    v(k)=v(k-1)+kor*(v(k)-v(k-1));
    s(k)=s(k-1)+kor*(s(k)-s(k-1));
    t(k)=t(k-1)+kor*(t(k)-t(k-1));
    F(k)=F(k-1)+kor*(F(k)-F(k-1));
   
    % Maximum des zurückgelegten Weges für den i. cr-Wert speichern    
    s_limits(i)=s(end);
    % Ergebnisse vor nächster Berechnung löschen
    clear s;
    clear F;
    clear v;
    clear t;
end

plot(cr,s_limits);
grid on;
 


Jetzt musst du nur noch den Graph richtig beschriften. Ansonsten war auch der von dir geschriebene Programmablauf richtig dargestellt.
Private Nachricht senden Benutzer-Profile anzeigen
 
setasena
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 16.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.10.2011, 08:37     Titel:
  Antworten mit Zitat      
tausend vielen Dank für die ausführliche Antwort, DSP... ich werde versuchen das Program allein zu machen, damit ich auch verstehe...
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 - 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.