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

Hilfe bei Bedingungsformulierung

 

Matlablooser:D

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.09.2011, 17:04     Titel: Hilfe bei Bedingungsformulierung
  Antworten mit Zitat      
Hallo liebe Forumgemeinde,

zu meinem Problem:

ich habe eine Wertematrix der Größe m x n mit lauter unterschiedlichen Werten. Jetzt will ich, dass er die Bereiche heraussucht in denen die Summe der Werte am höchsten ist.

Beispiel:
Meine Matrix hat die Größe 20x20.
Dann soll die Bedingung immer 5x5 große Bereiche berechnen. Wenn die Summe kleiner als ein gewisser Wert ist, soll er das Feld 0 setzen.

Geht sowas in einer if Schleife? Und wie?

Gruß


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.09.2011, 17:43     Titel: Re: Hilfe bei Bedingungsformulierung
  Antworten mit Zitat      
Hallo Matlablooser,

Zitat:
Jetzt will ich, dass er die Bereiche heraussucht in denen die Summe der Werte am höchsten ist.

Das widerspricht sich: "Bereiche" ist plural, "am höchsten" impliziert aber einen einzigen Wert.

Zitat:
Meine Matrix hat die Größe 20x20.
Dann soll die Bedingung immer 5x5 große Bereiche berechnen. Wenn die Summe kleiner als ein gewisser Wert ist, soll er das Feld 0 setzen.

Das ist aber ein anderes Problem als das aus dem ersten Absatz.
Welches Feld soll auf 0 gesetzt werden? Was soll am Rand geschehen? Soll die Einteilung in 5x5 Bereiche fließend sein, so dass die einzelnen Bereiche sich überlappen?

Es gibt keine IF-Schleifen, nur FOR und WHILE.

Bitte versuche Dein Problem klar zu formulieren. Es lohnt sich nicht mit Lösungsvorschlägen anzufangen, wenn die Frage noch gar nicht eindeutig ist. Und dann fange mal an Dein Programm zu implementieren bis konkrete Probleme auftauchen. Diese lassen sich dann hier sehr effizient lösen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlablooser:D

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.09.2011, 18:18     Titel:
  Antworten mit Zitat      
OK Jan ich habe es versucht. Matlab bringt kein Fehler, aber aus passiert auch nicht?

Code:

for j=1:c
    for i=1:r
        Summe= sum(D(i:i+5,j:j+5);
    end
end
if Summe < 25*mean(D(:))
    Summe= zeros([5 5]);
end
 
 
Matlablooser:D

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.09.2011, 18:39     Titel:
  Antworten mit Zitat      
Wenn ich den Quellcode so ergänze kommt die Fehlermeldung:

Code:

for j=1:c
    for i=1:r
        Summe(i,j)= sum(D(i:i+5,j:j+5));
    end
end
if Summe(i,j) < 25*mean(D(:))
    Summe(i,j)= zeros([5 5]);
end
 
??? Subscripted assignment dimension mismatch.
 
 
Jan S
Moderator

Moderator


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

Das sieht schon mal ganz gut aus.

Die Fehlermeldung erscheint wohl in dieser Zeile:
Code:
Summe(i,j) = sum(D(i:i+5,j:j+5));

Mit dem debugger kannst Du das Problem finden:
Code:

Dies läßt Matlab stoppen, wenn ein Fehler auftritt. Dann kannst Du Dir den Wert der rechte Seiten im Command-Window anzeigen lassen: sum(D(i:i+5,j:j+5)) liefert einen Vektor zurück.

Hier gibt es weitere Probleme:
Code:
if Summe(i,j) < 25*mean(D(:))
    Summe(i,j)= zeros([5 5]);
end

Summe(i,j) ist ein Skalar, zeros(5,5) ist eine Matrix.

Viel Erfolg, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlablooser

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.09.2011, 13:03     Titel:
  Antworten mit Zitat      
Hey Jan,

die Frage ist, ob ich überhaupt so ansetzen kann oder ob ich mir hier ein Feld erstellen muss, dass meine Matrix abtastet?

Gruß
 
Matlablooser:D

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2011, 10:10     Titel:
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:

Die Fehlermeldung erscheint wohl in dieser Zeile:
Code:
Summe(i,j) = sum(D(i:i+5,j:j+5));


Das stimmt!

Mit dem debugger kannst Du das Problem finden:
Code:

Dies läßt Matlab stoppen, wenn ein Fehler auftritt. Dann kannst Du Dir den Wert der rechte Seiten im Command-Window anzeigen lassen: sum(D(i:i+5,j:j+5)) liefert einen Vektor zurück.

Der Wert/Vector wird leider nicht angezeigt.


 
Matlablooser:D

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.09.2011, 09:34     Titel:
  Antworten mit Zitat      
Jetzt habe ich es nochmal anders geschrieben, bekomme aber immer noch einen Fehler. Allerdings zeigt er mir jetzt schon einmal das "Feld" an.
Code:

Feld=zeros(r,c);
for j=1:2:c
    for i=1:2:r
        Feld(i,j) = D(i:i+2,j:j+2);
        Summe(i,j)= sum(Feld);
    end
end
if Summe(i,j) < 2*mean(D(:))
    Feld(i,j)= zeros([2 2]);
end
 


Ich brauche Hilfe bitte...
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 12.09.2011, 13:14     Titel:
  Antworten mit Zitat      
Matlablooser:D hat Folgendes geschrieben:
Jetzt habe ich es nochmal anders geschrieben, bekomme aber immer noch einen Fehler.


Welchen Fehler?Fehlermeldung?

Matlablooser:D hat Folgendes geschrieben:

Jan S hat Folgendes geschrieben:

Mit dem debugger kannst Du das Problem finden:
Code:
Code:


Dies läßt Matlab stoppen, wenn ein Fehler auftritt. Dann kannst Du Dir den Wert der rechte Seiten im Command-Window anzeigen lassen: sum(D(i:i+5,j:j+5)) liefert einen Vektor zurück.

Der Wert/Vector wird leider nicht angezeigt.

Sondern was passiert da? Irgendwass muss er anzeigen. Ob Fehlermeldung oder Wert.
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlablooser:D

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.09.2011, 13:19     Titel:
  Antworten mit Zitat      
Die Fehler meldung ist noch die gleiche:

??? Subscripted assignment dimension mismatch.

Code:
Feld(i,j) = D(i:i+2,j:j+2);
gibt eine zeros Matrix aus. Aber wie muss man es anders schreiben?
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.09.2011, 22:29     Titel:
  Antworten mit Zitat      
Hallo Matlablooser:D,

Code:

Feld = zeros(r,c);
for j = 1:2:c
    for i = 1:2:r
        % Feld(i,j) = D(i:i+2,j:j+2);   % ERROR!
        %   Feld(i, j) ist ein Skalar, also ein einzelnes Element.
        %   D(i:i+2,j:j+2) ist eine 3x3 Matrix.
        % Links und rechts vom Gleichheitszeichen müssen aber natürlich
        % gleich viele Elemente stehen.
       
        % Summe(i,j)= sum(Feld);  % Möchtest Du wirklich die Summe über das ganze Feld???
    end
end

%  if Summe(i,j) < 2*mean(D(:))
% Welche Werte für i und j meinst Du gelten hier?
 

Ein Forum kann keinen Programmierkurs ersetzen. Es wäre nicht sinnvoll irgendeine Lösung aufzuschreiben, da Du offensichtlich schon Schwierigkeiten hast, Deinen eigenen Code zu verstehen. Zudem sehe ich immer noch kleinen Zusammenhang zwischen dem geposteten Code und der Beschreibung:
Zitat:
ich habe eine Wertematrix der Größe m x n mit lauter unterschiedlichen Werten. Jetzt will ich, dass er die Bereiche heraussucht in denen die Summe der Werte am höchsten ist.

Beispiel:
Meine Matrix hat die Größe 20x20.
Dann soll die Bedingung immer 5x5 große Bereiche berechnen. Wenn die Summe kleiner als ein gewisser Wert ist, soll er das Feld 0 setzen.

Dein Code und die beiden Abschnitte scheinen drei unterschiedliche Probleme zu betreffen. Deshalb vermute ich, dass Du erstmal herausfinden sollten, was du genau berechnen möchtest. Danach können wir Dir wohl auch eher weiterhelfen.

Gruß, Jan
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.