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 dimensions

 

agent_fux
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 12.01.17
Wohnort: ---
Version: MATLAB R2016b student use
     Beitrag Verfasst am: 28.02.2017, 16:32     Titel: Index exceeds matrix dimensions
  Antworten mit Zitat      
Hallo,

ich habe eine Matrix newLand, die nach Zeilen mit bestimmten Werten durchsucht wird. Wenn die entsprechenden Zeilen gefunden wurden, sollen diese in eine neue Matrix StadtLandZyklus geschrieben werden und aus newLand gelöscht werden. Vom Prinzip werden hier Elemente gezogen, ohne dass diese zurückgelegt werden.

Ich erhalte die Fehlermeldung "Index exceeds matrix dimensions" und kann mir nicht erklären, warum?

In einem ähnlichen Code, wo das gleiche Prinzip durchgeführt wird, bekomme ich die Fehlermeldung nicht. Auch wenn ich den unten stehenden Code mit Zurücklegen habe, erscheint der Fehler nicht.

Hier ist mein Code:

Code:

% Konstruktion des Stadt-Land-Zyklus mit hohem Partikelausstoss
% Version, die beim hypothetischen Stadt-Land-Zyklus untersucht, ob die
% Verteilung im Intervall der Leistungsklassen liegt und die Micro-Segmente
% werden nicht zurückgelegt.



% Der StadtZyklus wird eingelesen
StadtLandZyklus= StadtZyklus;


% Vector mit Leistungsklassen, die generell vorkommen.
LeiKla= [2;3;4;5;6;7;8;9];

% Relativer minimaler und maximaler Anteil jeder Leistungsklasse in der
% Stadt
SLuLimLK2= 0.15;
SLoLimLK2= 0.6;
SLuLimLK3= 0.35;
SLoLimLK3= 0.5;
SLuLimLK4= 0.07;
SLoLimLK4= 0.25;
SLuLimLK5= 0.01;
SLoLimLK5= 0.1;
SLuLimLK6= 0.0009; % 5/5400
SLoLimLK6= 0.025;
SLuLimLK7= 0;
SLoLimLK7= 0.01;
SLuLimLK8= 0;
SLoLimLK8= 0.005;
SLuLimLK9= 0;
SLoLimLK9= 0.0025;


% Ermittelt die Leistungsklassen des bisherigen Zyklus
LKnewMicroSeg = unique(StadtLandZyklus(:,29));

%Abfrage der Toleranz für die Geschwindigkeit zwischen den Micro-Segmenten
%+/- 1 km/h ist ein guter Anfang.
speedTol = input ('Bitte Toleranz für die Geschwindigkeit zwischen zwei Micro-Segmenten eingeben: ');

s=16;

%Abfrage der Streckenlänge [km] für den Landzyklus
distance = s+input ('Bitte Streckenlänge [km] für Landzyklus eingeben: ');

% Schleife, welche die Micro-Segmente aneinanderreiht.

while s <= distance
   
    % Berechnet die gesamte Häufigkeiten aller Leistungsklassen.
    b= size(StadtLandZyklus,1);
   
    % Berechnet die Häufigkeit jeder Leistungsklasse aus dem bisher erstellten
    % Zyklus. k= Häufigkeiten, klasse= Leistungsklasse
    [k, klasse] = hist(StadtLandZyklus(:,29), LeiKla);
   
    % Matrix kl mit Übersicht der Anzahl von Klassen.
    kl= [klasse, k', zeros(size(klasse,1),1)];
   
    % Berechnung des relativen Anteils jeder Leistungsklasse in dem bisher
    % erstellen Zyklus.
    for i= 1:size(kl,1)
       
        kl(i,3)= kl(i,2)/b;
       
    end
    % Der gegenwärtig relative Anteil jeder Leistungsklasse wird einer
    % Variablen zugeordnet.
    LK2ist= kl(kl(:,1)==2,3);
    LK3ist= kl(kl(:,1)==3,3);
    LK4ist= kl(kl(:,1)==4,3);
    LK5ist= kl(kl(:,1)==5,3);
    LK6ist= kl(kl(:,1)==6,3);
    LK7ist= kl(kl(:,1)==7,3);
    LK8ist= kl(kl(:,1)==8,3);
    LK9ist= kl(kl(:,1)==9,3);
   
    % Ermittlung des Status jeder Leistungsklasse: 0= Anteil der
    % Leistungsklasse zu gering, 1= Anforderung der Leistungsklasse
    % erfüllt, 2= Anteil der Leistungsklasse überschritten.
   
    %Status Leistungsklasse 2
    if LK2ist >= SLuLimLK2 && LK2ist <= SLoLimLK2
        LK2soll=1;
    end
    if LK2ist > SLoLimLK2
        LK2soll=2;
    end
    if LK2ist < SLuLimLK2
        LK2soll=0;
    end
    %Status Leistungsklasse 3
    if LK3ist >= SLuLimLK3 && LK3ist <= SLoLimLK3
        LK3soll=1;
    end
    if LK3ist > SLoLimLK3
        LK3soll=2;
    end
    if LK3ist < SLuLimLK3
        LK3soll=0;
    end
    %Status Leistungsklasse 4
    if LK4ist >= SLuLimLK4 && LK4ist <= SLoLimLK4
        LK4soll=1;
    end
    if LK4ist > SLoLimLK4
        LK4soll=2;
    end
    if LK4ist < SLuLimLK4
        LK4soll=0;
    end
   
    %Status Leistungsklasse 5
    if LK5ist >= SLuLimLK5 && LK5ist <= SLoLimLK5
        LK5soll=1;
    end
    if LK5ist > SLoLimLK5
        LK5soll=2;
    end
    if LK5ist < SLuLimLK5
        LK5soll=0;
    end
   
    %Status Leistungsklasse 6
    if LK6ist >= SLuLimLK6 && LK6ist <= SLoLimLK6
        LK6soll=1;
    end
    if LK6ist > SLoLimLK6
        LK6soll=2;
    end
    if LK6ist < SLuLimLK6
        LK6soll=0;
    end
   
    %Status Leistungsklasse 7
    if LK7ist >= SLuLimLK7 && LK7ist <= SLoLimLK7
        LK7soll=1;
    end
    if LK7ist > SLoLimLK7
        LK7soll=2;
    end
    if LK7ist < SLuLimLK7
        LK7soll=0;
    end
   
    %Status Leistungsklasse 8
    if LK8ist >= SLuLimLK8 && LK8ist <= SLoLimLK8
        LK8soll=1;
    end
    if LK8ist > SLoLimLK8
        LK8soll=2;
    end
    if LK8ist < SLuLimLK8
        LK8soll=0;
    end
   
    %Status Leistungsklasse 9
    if LK9ist >= SLuLimLK9 && LK9ist <= SLoLimLK9
        LK9soll=1;
    end
    if LK9ist > SLoLimLK9
        LK9soll=2;
    end
    if LK9ist < SLuLimLK9
        LK9soll=0;
    end
   
   
   
    %Liest die Geschwindigkeit am Ende des vorangegangenen Micro-Segments
    %ein.
   
    speed = StadtLandZyklus(end,10);
   
    %Sucht ein neues Micro-Segment mit Startgeschwindigkeit +/- Toleranz
    %zur Endgeschwindigkeit des vorangegangenen Micro-Segments. Sobald
    %dieser gefunden ist, stoppt die Suche. Dadurch wird immer das nächst
    %mögliche Micro-Segment mit hohem Emissionsaustoß gefunden. Denn in
    %Matirx newStadt sind die Micro-Segmente absteigend nach Emissionen
    %sortiert.
   
    for i2 = 1:size(newLand,1)
        %Prüft die Startgeschwindigkeit jedes Micro-Segments mit
        %der Toleranz +/- 0.1 km/h. Identifiziert wird der Start
        %des Segments durch eine Null in Spalte 6.
        if newLand(i2,10) <= (speed+speedTol) && newLand(i2,10) >= (speed-speedTol)&& newLand(i2,6) == 0 && newLand(i2+1,6) == 1 && newLand(i2,4) == newLand(i2+1,4)
            % Erste Zeile des neuen Micro-Segments wird erstellt.
            newMicroSeg= newLand(i2,:);
            %Liest die zugehörigen Zeilen des Micro-Segments aus,
            %dazu wird die Nr. des Micro-Segments ausgelesen.
            addMicroSeg= newLand(:,4) == newMicroSeg(1,4);
            % Auslesen des gesamten Micro-Segments
            addMicroSeg= newLand(addMicroSeg,:);
           
            % Konstruktion des hypothetischen Zyklus zur Berechnung der Leistungsklassenverteilung. Hypothetischer
            % Zyklus = Bisheriger Zyklus + aktuelles Micro-Segment.
            hypoStadtLandZyklus = [StadtLandZyklus;addMicroSeg];
           
            % Berechnung der Leistungsklassen aus dem hypothetischen Zyklus
            % Berechnet die gesamte Häufigkeiten aller Leistungsklassen.
            b= size(hypoStadtLandZyklus,1);
           
            % Berechnet die Häufigkeit jeder Leistungsklasse aus dem bisher erstellten
            % Zyklus. k= Häufigkeiten, klasse= Leistungsklasse
            [k, klasse] = hist(hypoStadtLandZyklus(:,29), LeiKla);
           
            % Matrix kl mit Übersicht der Anzahl von Klassen.
            kl= [klasse, k', zeros(size(klasse,1),1)];
           
            % Berechnung des relativen Anteils jeder Leistungsklasse in dem bisher
            % erstellen Zyklus.
            for h= 1:size(kl,1)
               
                kl(h,3)= kl(h,2)/b;
               
            end
            % Der gegenwärtig relative Anteil jeder Leistungsklasse wird einer
            % Variablen zugeordnet.
            LK2ist= kl(kl(:,1)==2,3);
            LK3ist= kl(kl(:,1)==3,3);
            LK4ist= kl(kl(:,1)==4,3);
            LK5ist= kl(kl(:,1)==5,3);
            LK6ist= kl(kl(:,1)==6,3);
            LK7ist= kl(kl(:,1)==7,3);
            LK8ist= kl(kl(:,1)==8,3);
            LK9ist= kl(kl(:,1)==9,3);
           
            % Ermittlung des Status jeder Leistungsklasse: 0= Anteil der
            % Leistungsklasse zu gering, 1= Anforderung der Leistungsklasse
            % erfüllt, 2= Anteil der Leistungsklasse überschritten.
           
            %Status Leistungsklasse 2
            if LK2ist >= SLuLimLK2 && LK2ist <= SLoLimLK2
                LK2soll=1;
            end
            if LK2ist > SLoLimLK2
                LK2soll=2;
            end
            if LK2ist < SLuLimLK2
                LK2soll=0;
            end
            %Status Leistungsklasse 3
            if LK3ist >= SLuLimLK3 && LK3ist <= SLoLimLK3
                LK3soll=1;
            end
            if LK3ist > SLoLimLK3
                LK3soll=2;
            end
            if LK3ist < SLuLimLK3
                LK3soll=0;
            end
            %Status Leistungsklasse 4
            if LK4ist >= SLuLimLK4 && LK4ist <= SLoLimLK4
                LK4soll=1;
            end
            if LK4ist > SLoLimLK4
                LK4soll=2;
            end
            if LK4ist < SLuLimLK4
                LK4soll=0;
            end
           
            %Status Leistungsklasse 5
            if LK5ist >= SLuLimLK5 && LK5ist <= SLoLimLK5
                LK5soll=1;
            end
            if LK5ist > SLoLimLK5
                LK5soll=2;
            end
            if LK5ist < SLuLimLK5
                LK5soll=0;
            end
           
            %Status Leistungsklasse 6
            if LK6ist >= SLuLimLK6 && LK6ist <= SLoLimLK6
                LK6soll=1;
            end
            if LK6ist > SLoLimLK6
                LK6soll=2;
            end
            if LK6ist < SLuLimLK6
                LK6soll=0;
            end
           
            %Status Leistungsklasse 7
            if LK7ist >= SLuLimLK7 && LK7ist <= SLoLimLK7
                LK7soll=1;
            end
            if LK7ist > SLoLimLK7
                LK7soll=2;
            end
            if LK7ist < SLuLimLK7
                LK7soll=0;
            end
           
            %Status Leistungsklasse 8
            if LK8ist >= SLuLimLK8 && LK8ist <= SLoLimLK8
                LK8soll=1;
            end
            if LK8ist > SLoLimLK8
                LK8soll=2;
            end
            if LK8ist < SLuLimLK8
                LK8soll=0;
            end
           
            %Status Leistungsklasse 9
            if LK9ist >= SLuLimLK9 && LK9ist <= SLoLimLK9
                LK9soll=1;
            end
            if LK9ist > SLoLimLK9
                LK9soll=2;
            end
            if LK9ist < SLuLimLK9
                LK9soll=0;
            end
           
           
           
        else
            continue
        end
       
        % Wenn die jeweilige Leistungsklasse im hypothetischen Zyklus nicht im Intervall ist, dann soll das nächste
        % Micro-Segment gesucht werden.
        if    LK2soll ~=1 || LK3soll ~=1 || LK4soll ~=1 || LK5soll ~=1  || LK6soll ~=1 || LK7soll ~=1 || LK8soll ~=1 || LK9soll ~=1
            continue
           
        else
            break %Die Suche stoppt, sobald das nächste passende Micro-Segment gefunden und hizugefügt wurde.
        end
    end
   
   
    %Fügt das neue Micro-Segment dem Stadtzyklus hinzu.
    StadtLandZyklus= [StadtLandZyklus; addMicroSeg];
   
% Das gezogene Micro-Segment wird gelöscht
    newLand(newLand(:,4)== newMicroSeg(1,4),:)=[];
   
   
    % Berechnung der zurückgelegten Strecke. Relevant für die
    % while-Bedingung
    dv= sum(StadtLandZyklus(:,10))/size(StadtLandZyklus,1);
    time= size(StadtLandZyklus,1)/3600;
    s= dv*time;
   
end

%Ausgabe der Verteilung von Leistungsklassen
if LK2soll == 0
    disp(['Anteil Leistungsklasse 1+2 zu gering: ',num2str(LK2ist),' %']);
elseif LK2soll == 1
    disp(['Anteil Leistungsklasse 1+2 ok: ',num2str(LK2ist),' %']);
elseif LK2soll == 2
    disp(['Anteil Leistungsklasse 1+2 zu hoch: ',num2str(LK2ist),' %']);
end

if LK3soll == 0
    disp(['Anteil Leistungsklasse 3 zu gering: ',num2str(LK3ist),' %']);
elseif LK3soll == 1
    disp(['Anteil Leistungsklasse 3 ok: ',num2str(LK3ist),' %']);
elseif LK3soll == 2
    disp(['Anteil Leistungsklasse 3 zu hoch: ',num2str(LK3ist),' %']);
end

if LK4soll == 0
    disp(['Anteil Leistungsklasse 4 zu gering: ',num2str(LK4ist),' %']);
elseif LK4soll == 1
    disp(['Anteil Leistungsklasse 4 ok: ',num2str(LK4ist),' %']);
elseif LK4soll == 2
    disp(['Anteil Leistungsklasse 4 zu hoch: ',num2str(LK4ist),' %']);
end

if LK5soll == 0
    disp(['Anteil Leistungsklasse 5 zu gering: ',num2str(LK5ist),' % ', num2str(kl(kl(:,1)==5,2)),' mal']);
elseif LK5soll == 1
    disp(['Anteil Leistungsklasse 5 ok: ',num2str(LK5ist),' % ', num2str(kl(kl(:,1)==5,2)),' mal']);
elseif LK5soll == 2
    disp(['Anteil Leistungsklasse 5 zu hoch: ',num2str(LK5ist),' % ', num2str(kl(kl(:,1)==5,2)),' mal']);
end
if LK6soll == 0
    disp(['Anteil Leistungsklasse 6 zu gering: ',num2str(LK6ist),' %']);
elseif LK6soll == 1
    disp(['Anteil Leistungsklasse 6 ok: ',num2str(LK6ist),' %']);
elseif LK6soll == 2
    disp(['Anteil Leistungsklasse 6 zu hoch: ',num2str(LK6ist),' %']);
end

if LK7soll == 0
    disp(['Anteil Leistungsklasse 7 zu gering: ',num2str(LK7ist),' %']);
elseif LK7soll == 1
    disp(['Anteil Leistungsklasse 7 ok: ',num2str(LK7ist),' %']);
elseif LK7soll == 2
    disp(['Anteil Leistungsklasse 7 zu hoch: ',num2str(LK7ist),' %']);
end

if LK8soll == 0
    disp(['Anteil Leistungsklasse 8 zu gering: ',num2str(LK8ist),' %']);
elseif LK8soll == 1
    disp(['Anteil Leistungsklasse 8 ok: ',num2str(LK8ist),' %']);
elseif LK8soll == 2
    disp(['Anteil Leistungsklasse 8 zu hoch: ',num2str(LK8ist),' %']);
end

if LK9soll == 0
    disp(['Anteil Leistungsklasse 9 zu gering: ',num2str(LK9ist),' %']);
elseif LK9soll == 1
    disp(['Anteil Leistungsklasse 9 ok: ',num2str(LK9ist),' %']);
elseif LK9soll == 2
    disp(['Anteil Leistungsklasse 9 zu hoch: ',num2str(LK9ist),' %']);
end
 


newLand.xls
 Beschreibung:

Download
 Dateiname:  newLand.xls
 Dateigröße:  18.22 MB
 Heruntergeladen:  349 mal
StadtZyklus.xls
 Beschreibung:

Download
 Dateiname:  StadtZyklus.xls
 Dateigröße:  1.38 MB
 Heruntergeladen:  505 mal
Private Nachricht senden Benutzer-Profile anzeigen


agent_fux
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 12.01.17
Wohnort: ---
Version: MATLAB R2016b student use
     Beitrag Verfasst am: 28.02.2017, 18:59     Titel:
  Antworten mit Zitat      
Ich habe mit dem Debugger geschaut, was passiert. Kann aber nichts feststellen. Meine erste Vermutung war, dass er kein passendes Objekt nach den Kriterien findet. Aber ich habe, nachdem der Code abgebrochen wurde, manuell weiter gesucht und weitere Objekte in der Matrix gefunden. Ich verstehe die Welt nicht mehr.
Private Nachricht senden Benutzer-Profile anzeigen
 
agent_fux
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 12.01.17
Wohnort: ---
Version: MATLAB R2016b student use
     Beitrag Verfasst am: 28.02.2017, 22:27     Titel:
  Antworten mit Zitat      
Habe MATLAB neugestartet. Jetzt funktioniert es. Rolling Eyes
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.