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

for-Schleife und find()... Matrix-Dimension

 

mat007
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2011, 21:22     Titel: for-Schleife und find()... Matrix-Dimension
  Antworten mit Zitat      
Hallo,
ich habe ein Problem mit dem Befehl find und mit einer for-Schleife.
Wenn ich sie ausführe kommt immer
??? Index exceeds matrix dimensions. für die Zeile mit dem "find".

Code:

a=numel(B); %B=Matrix mit 6 Werten in einer Spalte, size 1 2
b=1;
for j=(1:a);
    if j==b;
    ind=find(A(:,1)==B(b,1)); % A = <3201x2 double> Matrix mit size 1 3
    c=A(index,2);
    b=b+1;
    end
   E=[E c];
end
 

Bei A ist Spalte 1 =x und spalte 2=y.
Ich möchte jeden Wert aus der Matrix B mit der 1. Spalte von A vergleichen und den dazugehörigen y-Wert bekommen.
Kann mir jemand helfen? ich komm an der Stelle einfach nicht weiter... 'Sad'
Private Nachricht senden Benutzer-Profile anzeigen


Scriptor
Forum-Century

Forum-Century


Beiträge: 217
Anmeldedatum: 22.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2011, 21:38     Titel:
  Antworten mit Zitat      
numel gibt dir die Anzahl aller Elemente wieder, die sich in der Matrix befinden. Wenn du also eine 2x6 Matrix hast, hast du 12 Werte drin. So zählst du in der Schleife bis 12, kommst du in der Indizierung über 6, du "exceedest" die Matrixdimension.

Gib in deine Matlab konsole einfach mal "doc size" ein

Zuletzt bearbeitet von Scriptor am 06.03.2011, 22:00, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
mat007
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2011, 21:57     Titel: Trotzdem Fehlermeldung...
  Antworten mit Zitat      
Vielen Dank für die schnelle Antwort Scriptor! Very Happy

Aber selbst wenn ich 6 bei a eingebe kommt die Fehlermeldung...???
Hab schon soviel rumprobiert... Confused
Private Nachricht senden Benutzer-Profile anzeigen
 
Scriptor
Forum-Century

Forum-Century


Beiträge: 217
Anmeldedatum: 22.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2011, 22:03     Titel:
  Antworten mit Zitat      
nimm dir doch mal den Debugger und schau dir im Workspace die Matrizen an, wie die sich verändern. Meist hilft das.

was heißen denn die Angaben size 1 2 oder 1 3? Irgendiwe verwirren die mich

Mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
mat007
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2011, 22:22     Titel:
  Antworten mit Zitat      
Ich dachte size könnte beim finden der Antwort helfen.
Ich werd das mal mit dem Debugger probieren.

Das find hat schon einmal bei einem anderen Problem funktioniert.

Aber auch wenn ich es bei diesem Problem jetzt ohne Schleife probiere sagt er mir dass ich die Matrix-Dimension überschreite. Question

Viele Grüße Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Scriptor
Forum-Century

Forum-Century


Beiträge: 217
Anmeldedatum: 22.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2011, 22:30     Titel:
  Antworten mit Zitat      
Sorry ich kann dir nicht helfen, das sind zu wenig Infos zumal dein Code generell Verwirrung stiftet. In deinem Quellcode benutzt du zB ind und index, desweiteren wundere ich mch, warum du in der for schleife eine if Bedingung einführst, obwohl die Bedingung eh immer erfüllt ist... überdenke das Ganze am besten noch einmal Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
mat007
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2011, 22:42     Titel:
  Antworten mit Zitat      
Ja, ok, das kommt von dem ganzen rumprobiere. Ich hatte die Schleife auch schon ohne if. Und das index ist eigentlich ind.

Vielen dank für die Anregungen. Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Scriptor
Forum-Century

Forum-Century


Beiträge: 217
Anmeldedatum: 22.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2011, 22:57     Titel:
  Antworten mit Zitat      
Ich würde einfach mal überflüssigen Code wegkürzen:

Code:

a=size(B,1); %definitiv die Anzahl der Zeilen

for j=(1:a);
    ind=find(A(:,1)==B(j,1)); % A = <3201x2 double>  
    c=A(index,2);
    E=[E c];
end
 


erstal rudimentären Code beseitigen, was willst du eigentlich machen?
Due willst gerausfinden, an welchen Stellen in der ersten Spalte A, ein wert in der ersten Spalte B genauso groß ist. und dann im den entsprechenden wert aus der zweiten Spalte zu extrahieren und in E packen richtig? Wenns so laufen soll, dann teste mal...
Private Nachricht senden Benutzer-Profile anzeigen
 
mat007
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2011, 23:40     Titel:
  Antworten mit Zitat      
Danke für den code.Smile

Aber es wird mir immernoch angesagt, dass in der Zeile bei find die Matrixdimension überschritten wird.

Gibt es noch eine Idee Question
Private Nachricht senden Benutzer-Profile anzeigen
 
Scriptor
Forum-Century

Forum-Century


Beiträge: 217
Anmeldedatum: 22.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2011, 23:54     Titel:
  Antworten mit Zitat      
Ich kann mir nur noch ein Problem vorstellen und zwar in dern Zeile mit dem find, ersetze mal zu

Code:

ind=find(A(:,1)'==B(j,1));
 


also einfach nur ein Hochkomma....

Und du bist dir sicher dass B nicht leer ist und A hat über 3000 Zeilen?

Mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
mat007
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2011, 00:15     Titel:
  Antworten mit Zitat      
Ja da bin ich mir sicher. Ich bin für jeden Lösungsvorschlag sehr dankbar.
Das mit dem Hochkomma funktioniert nicht.

Ich hab allerdings vorher in einer anderen Schleife auch schon ein find eingesetzt. Kann es auch daran liegen?

Code:

find(V(:,2))=g;
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Scriptor
Forum-Century

Forum-Century


Beiträge: 217
Anmeldedatum: 22.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2011, 00:42     Titel:
  Antworten mit Zitat      
Kollege wirf doch nicht so die brocken hin, was ist g und V schon wieder !!!Setze mal den Debugger vor die Zeile des gekürzten Quellcodes und schaue dir deine Matrizen A und B an und gib mal die Dimensionsgrößen durch Irgendwas haut da nicht hin...
Private Nachricht senden Benutzer-Profile anzeigen
 
mat007
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2011, 01:05     Titel:
  Antworten mit Zitat      
die Matrix V ist eine 21x2 double Matrix und g ist ein Wert einer Schleife.
Code:

for g=(1:6);
   find(V(:,2))=g;
        z=V(g,1);
        z1=max(z);
    B1=[B1 z1];
end

B=B1'; % B ist eine 6x1 double
 


und dann geht es weiter mit dem Rest, was oben schon steht.
Hab auch schon probiert B jetzt zu speichern und vor der nächsten schleife wieder zu laden.
Private Nachricht senden Benutzer-Profile anzeigen
 
mat007
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2011, 01:36     Titel:
  Antworten mit Zitat      
Juhuu ich hab das Rätsel geknackt... Cool .

Es lag an dem find. Er hat es nach der ersten schleife als vektor mit 1x6 angesehen. Klar, dass dort nix mit einer Matrix von über 3000 Zeilen zu machen ist.

Hab einfach vor die nächste Schleife
Code:

geschrieben.

Vielen Herzlichen Dank Scriptor für die vielen Denkanstöße Very Happy

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