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

Inner matrix dimensions must agree

 

stratist9011
Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2013, 16:58     Titel:
  Antworten mit Zitat      
Hallo, habe das vorherige Problem jetzt mittels regionprops wunderbar lösen können jetzt habe ich allerdings ein neues Problem -.- ....
Ich habe eine Schleife bei der ich für die indizes i von 1 bis 28 und ii von 1 bis 28 die jeweiligen werte für eine Berechnung nutzen will.

Also zb. b1=(xi1*yii1-xii1*yi1)/(xi1-xii1) ....
Wenn ich das per Hand mache , d.h xi(1)*yii(1) rechne klappt das wunderbar. Nur die Schleife will nicht ich bekomme folgende Fehlermeldung:

Error using *
Inner matrix dimensions must agree.

Weshalb ich mal davon ausgehe, das mit der Auswahl der jeweiligen Werte etwas nicht stimmt ...

Code:

for i=1:1:28
    for ii=1:1:28
        b=(xi*yii-xii*yi)/(xi-xii);    % Off-Set Wert-Vektor der Geraden
        m=(yi-b)/xi;                   % Steigungs-Vektor der Geraden
        y=m*xi+b;                      % Geradengleichung
        plot(xi,y,'k-');
        hold off
    end
end
 


Für Hilfe wäre ich dankbar Confused
Private Nachricht senden Benutzer-Profile anzeigen


Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2013, 17:34     Titel:
  Antworten mit Zitat      
Die Schleifenvariablen kommen in Deinem Code gar nicht vor, also sind die Schleifen auch nutzlos. In welcher Zeile tritt der Fehler auf, wie sind die Dimensionen Deiner Matrizen, was willst Du überhaupt erreichen. Meinst Du vielleicht '.*'?
Private Nachricht senden Benutzer-Profile anzeigen
Gesplittet: 02.06.2013, 21:02 Uhr von Jan S
Von Beitrag Probleme mit if-Schleife aus dem Forum Programmierung
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 02.06.2013, 21:03     Titel:
  Antworten mit Zitat      
Hallo stratist9011,

Bitte poste neue Fragen immer in einem neuen Thread. Danke!

Die Fehlermeldung ist nicht vollständig. Vor allem fehlt der Teil, der anzeigt, in welcher Zeile das Problem auftritt. Dies ist aber wichtig, das wir das nicht erraten können und mangels einer definition für die Inputs Deinen code auch nicht laufen lassen können.

Der Debugger hilft, solche Probleme sehr schnell alleine zu untersuchen:
Code:

Dann stoppt Matlab beim Erreichen der Fehlers und Du kannst die lokalen Variablen untersuchen, bis Du das Problem findest. Da der Debugger den gesamten Code und die Orginal-Daten zur Verfügung hat und direkt bei Dir auf dem rechner läuft, ist das effizienter, als auf die um Stunden verzögerten Antworten aus dem Forum zu warten.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
stratist9011
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2013, 20:32     Titel:
  Antworten mit Zitat      
Ok ... danke
Private Nachricht senden Benutzer-Profile anzeigen
 
stratist9011
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2013, 22:26     Titel:
  Antworten mit Zitat      
Hallo ich habe den Code jetzt mal angepasst, leider führt das dazu das Matlab sehr sehr lange rechnet und nach 5 min einfach abstürzt ... was mache ich da falsch ????
Für Hilfe wäre ich dankbar ...

Code:
for xi=1:28;
    for xii=1:28;
        for yi=1:28;
            for yii=1:28;
                b=(xi*yii-xii*yi)/(xi-xii);    % Off-Set Wert-Vektor der Geraden
                m=(yi-b)/xi;                   % Steigungs-Vektor der Geraden
                y=m*xi+b;                      % Geradengleichung
                plot(xi,y,'k-');
                hold off                
            end
        end
    end
end
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 03.06.2013, 22:28     Titel:
  Antworten mit Zitat      
wenn du hold off machst plottet der doch immer nur einen punkt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.06.2013, 09:22     Titel:
  Antworten mit Zitat      
Hallo stratist9011,

Ich vermute der crash kommt daher, dass Du versuchst 28^4=614656 Objekte zu erstellen. Das könnte eventuell den Speicher sprengen. Falls es funktionieren würde, sollte die Pixel-Dichte aber auch den optischen Eindruck sprengen. Was genau möchtest Du zeichnen? Üblicherweise ist es praktischer, zuerst die Daten zu erstellen und die Grafik erst danach mit einem einzigen Befehl zu erstellen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
stratist9011
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.06.2013, 09:45     Titel:
  Antworten mit Zitat      
Ich habe aus einer Bildmatrix charakteristische Punkte bestimmt und möchte nun für eine bestimmte Zeile i der Bildmatrix 2 Punkte P1(xi , yi) und P2(xii , yii) durch eine Gerade verbinden.

Im Anschluss daran will ich mittels regionprops orientation deren Steigung ermitteln.

Den Befehl hold off habe ich drin damit die Geraden auf einer bestimmten figure geplottet werden, welche ich vorher erzeuge.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.06.2013, 11:06     Titel:
  Antworten mit Zitat      
Hallo stratist9011,

Wenn Du bereits die Koordinaten von zwei Punkten hast, ist REGIONPROPS eine ausgesprochen indirekte Methode zum Messen der Steigung. Wie wäre es die Koordinaten direkt zu benutzen?

Zitat:
Den Befehl hold off habe ich drin damit die Geraden auf einer bestimmten figure geplottet werden, welche ich vorher erzeuge.

Ich sehe keinen Zusammenhang zwischen der Wirkung von "hold off" und dem beschriebenen Zweck. "doc hold" sollte das klären.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.06.2013, 23:57     Titel:
  Antworten mit Zitat      
Hallo stratist9011,
jetzt erzählst Du was von P1 und P2. Diese beiden Variablen kommen in Deinen bisherigen Versuchen noch gar nicht vor.
Was bedeutet diese ominöse 28?
Was hast Du Inputdaten?
Private Nachricht senden Benutzer-Profile anzeigen
 
stratist9011
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2013, 17:36     Titel:
  Antworten mit Zitat      
Natürlich kommen P1 und P2 vor !
Ein Punkt ist P=(xi,yi) ... dann ist P1=(x1,y1) ...
Ich habe insgesamt 28 Punkte deshalb die 28.

Hier mal der Code den ich vorher benutzte um die Punkte zu bestimmen vielleicht hilft das beim Verständnis ...

Code:
s  = regionprops(L, 'Centroid');
        centroids = cat(1, s.Centroid);  % Die Matrix centroids enthält die Koordinaten der Mittelpunkte, mittels cat wird aus dem Array eine Matrix
        [ii,jj] = size(centroids);       % ii=Index Zeilen von Centroids , jj=Index Spalten von Centroids
        xi=centroids(:,1);               % Vektor mit x-Koordinaten der Mittelpunkte
        yi=centroids(:,2);               % Vektor mit y-Koordninaten der Mittelpunkte
       
% Schleife um jeweils einen Punkt neben einem Mittelpunkt zu finden

for i=ii                   % Für die jeweilige Zeile in centroids und L
    xii=xi-30;             % ist xii gleich xi-1
    yii=yi;                % ist yii gleich yi
    points = [xii,yii];    % Erzeugt aus den Vektoren der Koordinaten die Matrix points
    figure,
    imshow(~L);
    hold on
    plot(centroids(:,1), centroids(:,2), 'r*') % Plottet die gefundenen Mittelpunkte  
    plot(points(:,1), points(:,2), 'r*')       % Plottet die gefundenen Punkte
end


Direkt im Anschluss daran soll sich die Schleife anschließen die im Moment einen Crash verursacht.
Private Nachricht senden Benutzer-Profile anzeigen
 
stratist9011
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2013, 20:11     Titel:
  Antworten mit Zitat      
Okay ich habe die Lösung zu meinem Problem.
Allerdings hätte ich noch eine letzte Frage und zwar :

Wenn ich eine Berechnung durchführen will :

a=xi+yi

und ich n bestimmte xi Werte für i=1+n , mit n=[0 bis 28] habe
muss meine Schleife dann wie folgt aussehen ?

Code:
for i=1:28
a=xi+yi
end


also wie kriege ich Matlab dazu diese Berechnung mit den jeweilig zu i=1, i=2 usw. gehörenden Werten durchzuführen ?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 05.06.2013, 21:47     Titel:
  Antworten mit Zitat      
Hallo stratist9011,

Benutze statt "xi" einen Vektor:
Code:
for i=1:28
 a = x(i) + y(i)
end

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
stratist9011
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2013, 21:52     Titel:
  Antworten mit Zitat      
Okay super danke ... jetzt klappts Very Happy
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.