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

Trapezregel in einer Schleife

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.01.2012, 19:34     Titel: Trapezregel in einer Schleife
  Antworten mit Zitat      
Moin,

bei dem Versuch Matlab die Trapezregel in einer Schleife beizubringen scheitere ich bzw. bekomme folgende Fehlermeldung:

??? Attempted to access up1(0); index must be a
positive integer or logical.

Klar ist, das Matlab auf den nullten, nicht existierenden Eintrag der Schleife zugreifen möchte, aber wie gebe ich up1(1) an und sage dem Programm das es bei einem "l=2" loslegen soll?

Der Ansatz über die Matlab Funktion trapz erzeugt nur Fehlermeldungen, deshalb der Versuch die Trapezregel selbst zusammenzubauen.

Im Folgenden der Code:


Code:


....

for l= 1:Deltat:4

% 2.1) Beschleunigung up bestimmen

up1(l+1) = (X + m * v * r + m * xG * r^2)/ (m - Xup); % delta_u = 0 => up = 0
up1(1) = 0;

% 3.1) Integrieren um Geschw. u zu bestimmen

%Trapezregel: A(f) = (x2-x1)*0,5*(y(1)+y(2)) = Schrittweite * 0,5 * (Fkt.wert Stützstelle 1 + Fkt.wert Stü.ste2)

%Schrittweite = Deltat


u1(l) = Deltat * 0.5 * (up1(l)+up1(l-1));

% 2.2) Beschleunigung up bestimmen

....
 


Viele Grüße
Jan


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 06.01.2012, 10:47     Titel:
  Antworten mit Zitat      
Der Fehler liegt hier...

Code:

for l= 1:Deltat:4
...
u1(l) = Deltat * 0.5 * (up1(l)+up1(l-1));
% hier wird nun auf up1(l-1) zugegriffen und das ist up1(0) im ersten Schleifendurchlauf
% entweder for l=2:...
% oder aber die Adressierung l-1 ändern in l und stattdessen bei den anderen Adr. mit l -> l+1 schreiben
 


Zitat:
Der Ansatz über die Matlab Funktion trapz erzeugt nur Fehlermeldungen


...um dir da helfen zu können, müsstest du den Aufruf und die Fehlermeldungen mal explizit angeben.
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.01.2012, 17:30     Titel:
  Antworten mit Zitat      
Hej,

im folgenden Code bekomme bekomme ich es nicht hin in die Vektoren aus der for- Schleife mit den jeweiligen Startwerten aus dem "Vorspann" zu versehen. Wenn ich die "if, else" Bedingung verwende bekomme ich einen "numel" Problem - Matlab nimmt an das r und v nur ein Element im Vektor aufweisen.
Wenn ich in der for Schleife das auskommentierte v(1) bzw. r(1) verwende komme ich ebenfalls zu einer Fehlermeldung das die Vektordimensionen in Bezug auf k nicht passen.

Kennt jemand einen Lösungsweg bzw. was mache ich falsch?

Code:


...


up = (X + m * v * r + m * xG * r^2)/ (m - Xup); % delta_u = 0 => up = 0

% 3.1) Integrieren um Geschw. u zu bestimmen

u1 = trapz(up,1)*Deltat;

% 2.2) Beschleunigung up bestimmen

%%Matrizen um vpunkt vp und rpunkt rp zu berechnen

F = [m-Yvp,m*xG-Yrp;m*xG-Nvp,Iz-Nrp];
G = [Y-m*u1*r;N-m*xG*u1*r];

%H = [rp; vp]  E = F^-1 *G
H=F\G;


vp = H' .* [0 1] * [0;1];
% delta_u = 0 => vp = 0.008899016064016

rp = H' .* [1 0] * [1;0];
% delta_u = 0 => rp = 7.666568116673989e-04


% 3.2) Integrieren um Geschw. v und r zu bestimmen

v = trapz(vp)*Deltat;
r = trapz(rp)*Deltat;


for k= 1:1:20

%v(1) = v1;    
%r(1) = r1;

v(k) = trapz(vp)*Deltat;  %Problem: Hier sind vp und rp Kostanten
r(k) = trapz(rp)*Deltat;
   
%    if k<=1
%        v(k) = trapz(vp,1)*Deltat;
%        r(k) = trapz(rp,1)*Deltat;
%    else
%        v(k) = trapz(vp1(k),1)*Deltat;
%        r(k) = trapz(rp1(k),1)*Deltat;
%    end
   
up1(k) = (X + m * v(k) * r(k) + m * xG * r(k)^2)/ (m - Xup); % delta_u = 0 => up = 0

u1(k) = trapz(up1(k))*Deltat;

F = [m-Yvp,m*xG-Yrp;m*xG-Nvp,Iz-Nrp];
G = [Y-m*u1(k)*r;N-m*xG*u1(k)*r];

E = inv(F);
H=E*G;


%H = [rp; vp]  E = F^-1 *G
vp1(k) = H(k)' .* [0 1] * [0;1]; % delta_u = 0 => vp = 0.008899016064016
rp1(k) = H(k)' .* [1 0] * [1;0]; % delta_u = 0 => rp = 7.666568116673989e-04

v1(k) = trapz(vp1(k),1)*Deltat;
r1(k) = trapz(rp1(k),1)*Deltat;


psi1(k) = trapz(r1(k))*Deltat;


deltaU=diff(u1);

end

 


Viele Grüße
Jan
 
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.