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

Index exceeds matrix dime

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2012, 00:02     Titel: Index exceeds matrix dime
  Antworten mit Zitat      
Matlab macht mich wieder mal wahnsinnig. Ich bekomm jetzt schon seit Tagen eine Fehlermeldung und ich komm einfach nicht drauf.

Mein Problem ist folgendes: Ich beginne mit einem Anfangswerte (X_0), dann lasse ich die Schleife durchlaufen und bekomme einen weiteren Wert, für X_0. Diesen neuen Wert soll Matlab dann für den nächsten Schleifendurchlauf als neuen Anfangswert nehmen und wieder die Schleife durchlaufen. Danach wieder den neuen Wert als Anfangswert usw.

Das ganze habe ich jetzt in einer Doppelschleife, nur springt Matlab nicht mehr zurück:

Code:

X_0 = [15;7;2];

for k = 1:leng %45
 
X_neu(:,k) = X_0(:,k); %’neue’ AB

for i = 1:dt-1
F(:,i) = [-s,s,0;r,-1,-X_neu(1,i);X_neu(2,i),0,-b]*X_neu(:,i);
        X_s(:,i+1) = X_neu(:,i) + F(:,i)*h;
        F_s(:,i+1) = [-s,s,0;r,-1,-X_s(1,i+1); X_s(2,i+1),0,-b]*X_s(:,i+1);
        X_neu(:,i+1) = 0.5*X_neu(:,i) + 0.5*(X_neu(:,i+1) + h*F_s(:,i+1));
end

X_F(:,k) = X_neu(:,end);

P_F = P*M+Q;

X_0(:,k) = X_F(:,k) + P_F*(P_F + R)^(-1)); %neuer AB, Matlab sollte wieder nach oben springen und den nächsten Schleifendurchlauf berechnen

end

 


Jetzt bekomm ich aber immer diese Fehlermeldung:

??? Index exceeds matrix dimensions.

Error in ==>
X_neu(:,k) = X_0(:,k);


Das komische ist nur, wenn ich die Schleife so beginne:

Code:

for k = 2:leng
X_neu(:,k) = X_0(:,k-1)
…
 



funktioniert das Programm. Nur sollte meine Schleife bei eins beginne, weil sonst bei den weiteren Berechnungen die ich mache, nicht mehr das richtige rauskommt.

Hoffentlich kann mir von euch einer weiterhelfen, irgendwie blick ich nicht mehr durch.
Danke!!

Penny


Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2012, 00:29     Titel:
  Antworten mit Zitat      
Hallo Penny,

Als letzten Befehl Deiner äußeren Schleife schreibst Du in X_0(:,k).
Sollte das nicht k+1heißen?

Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2012, 00:44     Titel:
  Antworten mit Zitat      
hallo Sirius,

wenn ich X_0(:,k+1) schreibe, kommen bei X_F(:,k) = X_neu(:,end); immer die gleichen Werte raus, das sollte auch nicht sein.

ciao, penny
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2012, 11:34     Titel:
  Antworten mit Zitat      
Hallo Penny,

ich hab noch ein paar Fragen:

X_neu(:,k) = X_0(:,k); % ’neue’ AB
soll nicht X_neu(:,1) sein?
Weil in der inneren Schleife überschreibst Du ja X_neu wieder.

X_neu(:,i+1) = 0.5*X_neu(:,i) + 0.5*(X_neu(:,i+1) + h*F_s(:,i+1));
hier benutzt Du X_neu(:,i+1) schon vor dem setzen.

Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2012, 12:07     Titel:
  Antworten mit Zitat      
Hallo Sirius,

sorry, hab mich vertippt. In meinen Code lautet die
X_neu(:,1) = X_0(:,k); % ’neue’ AB

Ich glaube ich habe schon alle kombinationen durchprobiert, die mir einfallen, und trotzdem funktioniert es nicht Sad

lG, Penny
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2012, 12:10     Titel:
  Antworten mit Zitat      
und die Zeile

X_neu(:,i+1) = 0.5*X_neu(:,i) + 0.5*(X_neu(:,i+1) + h*F_s(:,i+1));
sollte eigentlich

X_neu(:,i+1) = 0.5*X_neu(:,i) + 0.5*(X_s(:,i+1) + h*F_s(:,i+1)); heißen.

das nächste mal, kopier ich den code einfach aus matlab raus, da kann so was nicht passieren.
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2012, 13:06     Titel:
  Antworten mit Zitat      
Hallo Penny,

programmieren ist kein Würfelspiel. Wenn eine Funktion zu kompliziert ist,
und man nicht weiß, ob das Ergebnis richtig ist, spaltet man sie in eine
einfacheren Teil auf, dessen Ergebnis man dann von hand auf Korrektheit
prüfen kann. Korrekte Teilprogramme baut man dann wieder zu komplexeren
Gebilden zusammen, deren Korrektheit man dann nur noch in der obersten
Ebene prüfen muß.

Code:

P_F = P*M+Q;
some_constant = P_F*(P_F + R)^(-1);

X_0 = [15;7;2];

for k = 1:leng % 45
  X_neu = X_0(:,k); % ’neue’ AB

  for i = 1:dt-1
    F = [-s,s,0;r,-1,-X_neu(1);X_neu(2),0,-b]*X_neu;
    X_s = X_neu + h*F;
    F_s = [-s,s,0;r,-1,-X_s(1); X_s(2),0,-b]*X_s;
    X_neu = 0.5*X_neu + 0.5*(X_s + h*F_s);
  end

  X_0(:,k+1) = X_neu + some_constant;
end


Ich hab mal in Deinem Code alle unnötigen Indizes entfernt.
Wenn Du jetzt Schritt für Schritt das Programm laufen läßt,
an welcher Stelle entspricht das Ergebnis nicht dem, das Du
Dir wünschst?

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