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

Error: Improper assignment with rectangular empty matrix

 

claraleinchen
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 03.12.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.12.2011, 12:16     Titel: Error: Improper assignment with rectangular empty matrix
  Antworten mit Zitat      
Hallo,
Ich soll ein Programm erstellen, dass eine Zerlegung an bestimmten Stellen verfeinert.
Soweit funktioniert das Programm auch schon nur manchmal bekomme ich eine Fehlermeldung: Improper assignment with rectangular empty Matrix
Leider sehe ich den Fehler nicht, kann mir vielleicht jemand helfen?

Code:
function Z=refine(zerl,ind)

g=zeros(1,length(ind));

    for i=1:length(ind);
        k=max(find(zerl<ind(i))); %Index von ind in zerl
        w=(ind(i)+k)/2;
        g(i)=w;

    end

b=[zerl,g];
Z=sort(b);

end
 
Private Nachricht senden Benutzer-Profile anzeigen


Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.12.2011, 14:16     Titel:
  Antworten mit Zitat      
Hallo claraleinchen,
wenn irgendwo ein Fehler auftritt, solltest Du zuerst einmal schauen in welcher
Zeile der Fehler auftritt, welche Variablen beteiligt sind, wie deren Inhalt ist.
Kann es sein, dass irgendwo eine leere Matrix erzeugt wird, wo Du es gar nicht
erwartest.
Du schreibst, der Fehler tritt nur manchmal auf. Was ist in diesen Fällen anders
als in allen anderen?

grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
claraleinchen
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 03.12.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.12.2011, 14:38     Titel:
  Antworten mit Zitat      
Der Fehler entsteht, wenn ich meinen Vektor g, mildem ich die Zerlegung ergänzen möchte, mit Werten fülle.

Ich gebe in "ind" die oberen Werte des Intervalls in der Zerlegung an, die verfeinert werden sollen.
Dann suche ich die nächst kleineren Werte und suche dann den Punkt der dazwischen liegt.

Eine leere Matrix wird dort doch nicht erzeugt, oder?
Ich bilde ja Werte und will sie in den Vektor g eingeben.


Code:
function Z=refine(zerl,ind)

% zerl ist die eigentliche Zerlegung
% ind enthält Werte von zerl, und gibt die obere Grenze des zu verfeinernden % Intervalls an

g=zeros(1,length(ind));    % Vektor zum Ergänzen von zerl

    for i=1:length(ind);      % Schleife für alle Werte von ind
        k=max(find(zerl<ind(i)));  % suche nächst kleineren Wert
        w=(ind(i)+k)/2;       % bilde aus einem Intervall zwei, mit halbierter Schrittweite
        g(i)=w;                      % Fehler entsteht hier

    end

b=[zerl,g];
Z=sort(b);

end



Wenn ich einfach so Listen eingebe funktioniert es.
Sobald ich aber zerl und ind vorher speichere und dann in die Funktion eingebe, bekomme ich die Fehlermeldung.
Ich kann mir leider nicht erklären woran es liegt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.12.2011, 15:07     Titel:
  Antworten mit Zitat      
Hallo claraleinchen,
wenn Du Dir anschaust, was g(i) zugewiesen wird,
Code:
k =

   Empty matrix: 1-by-0


w =

   Empty matrix: 1-by-0

Improper assignment with rectangular empty matrix.

Error in refine (line 11)
        g(i)=w

kannst Du den Fehler auf den Befehl
Code:
find(zerl<ind(i))

zurückverfolgen.
Es gibt kein Element in zerl das kleiner ist als ind(i),
dadurch entstehen Deine leeren Matrizen.

Gruß
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
claraleinchen
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 03.12.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.12.2011, 15:39     Titel:
  Antworten mit Zitat      
Danke für die schnelle Hilfe!

Allerdings weiß ich leider nicht wie ich dieses Problem umgehen kann.
Ich finde keine andere Möglichkeit den nächst kleineren Eintrag in der Liste zu finden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.12.2011, 17:43     Titel:
  Antworten mit Zitat      
Hallo,

eine andere Möglichkeit hilft auch nicht weiter, wenn es keinen kleineren Wert gibt.

Anders gesagt: du solltest abfangen, was passieren soll, wenn kein kleinerer Wert gefunden wird, z.B.

Code:
if isempty(w)
g(i) = NaN;
else
g(i) = w;
end


Wenn es eigentlich nciht sein kann, dass es keinen kleineren Wert gibt, solltest du den Algorithmus nochmal überdenken.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.12.2011, 17:58     Titel:
  Antworten mit Zitat      
Hallo Claraleinchen,

wie werden die ind-Werte erzeugt? Du mußt beim Aufruf von refine sicherstellen,
dass alle Zahlen in ind > min(zerl).

Bist Du sicher, dass find hier richtig ist?
find ermittelt die Positionen in zerl, an denen der Wert kleiner
als ind(i) ist. Wenn ich Dich richtig verstanden habe, soll in k aber
der größte Wert von zerl < ind(i) stehen, also max(zerl(zerl<ind(i))).

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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 03.12.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.12.2011, 19:06     Titel:
  Antworten mit Zitat      
Habs geändert und jetzt funktioniert es.
Da ich matlab Neuling bin, dachte ich, ich muss den Wert suchen und bin dann irgendwie auf find gekommen Very Happy
Danke für eure Hilfe!
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.