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

Fehler in if-Bedingung? Nichts passiert

 

Geranie
Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 27.05.13
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 14.08.2013, 17:28     Titel: Fehler in if-Bedingung? Nichts passiert
  Antworten mit Zitat      
Hallo again,

ich habe mir gerade eine eigentlich recht simple for-schleife mit if-bedingung geschrieben, aber irgendwie funktioniert diese nicht wie gewünscht. Ich bekomme allerdings auch keine Fehlermeldung, deswegen frage ich hier einmal nach, ob jemandem ein Fehler auffällt?

Zu meinen Daten: Ich habe ein Array mit 21600x366 Daten und ein weiteres mit 1x366 Daten. Ich möchte nun die einzelnen Spalten vom Array1 ablaufen und wenn ein Wert größer ist als der Wert von Array2, dann soll der Arry1-Wert durch den Array2-Wert ersetzt werden.
Folgendermaßen habe ich das im Code:

Code:
for m=1:366;
    if (array1(:,m)>array2(m));
    array1(:,m)=array2(m);
    else
        continue
    end
end


tatsächlich tut sich in meinem Array1 nichts. :/
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: 14.08.2013, 17:43     Titel:
  Antworten mit Zitat      
Code:
 if (array1(:,m)>array2(m));

funktioniert so nicht. das ist ja ein logisches array und kein wert.
Code:
array1(:,m)=array2(m);

damit würdest du alle werte überschreiben
Code:

is mir nicht ganz klar wozu der teil dient
Code:
for m=1:366;
array1(array1(:,m)>array2(m),1)=array2(m);
end
 

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
geraniegast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.08.2013, 11:47     Titel:
  Antworten mit Zitat      
Danke Winkow,

ich habe deinen Code ausprobiert, aber jetzt überschreibt er mir in array1 verschieden Zeilenblöcke der ersten Spalte mit array2-Werten, obwohl diese Werte nichteinmal größer sind als die aus array2?!

Die anderen Spalten werden, soweit ich das auf die Schnelle sehen konnte, gar nicht berührt. Gibt es da irgendeinen trick, damit er alle Spalten abläuft und diese mit dem einzelnen Wert aus array2 vergleicht?
 
BlackDread
Forum-Century

Forum-Century


Beiträge: 212
Anmeldedatum: 11.05.11
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 15.08.2013, 12:56     Titel:
  Antworten mit Zitat      
Hallo geraniegast,

ich glaube Winkow ist ein kleiner Fehler unterlaufen, so könnte es funktionieren:

Code:
array1 = [1 2 3 4 5 6 7;1 1.4 3 4 5 6 7.1;1 2 3 4 5 6 6.8];
array1 = array1';
array2 = [1 1.5 3 4 4.5 6 7];
for m=1:length(array2)
array1(m,array1(m,:)>array2(m))=array2(m)
end
 


Viele Grüße
Chris
Private Nachricht senden Benutzer-Profile anzeigen
 
geraniegast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.08.2013, 16:59     Titel:
  Antworten mit Zitat      
Hey Chris!

Danke auch für deine Antwort! Mit deinem Code werden zwar alle Spalten überprüft aber nur m Zeilen (also, alle 366 Spalten, aber nur bis Zeile 366).

Folgende Änderung bringt auch nicht das gewünschte Ergebnis:

Code:
for m=1:length(array2)
array1(:,array1(m,:)>array2(m))=array2(m)
end
 


Irgendwie steh ich da grad echt auf dem Schlauch.
 
BlackDread
Forum-Century

Forum-Century


Beiträge: 212
Anmeldedatum: 11.05.11
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 15.08.2013, 20:05     Titel:
  Antworten mit Zitat      
Hallo gerniegast,

hmm da ist mir wohl ein kleiner Fehler beim lesen passiert.
Falls bis morgen noch keiner geantwortet hat, werd ich nochmal schauen, hab hier grad kein MATLAB drauf und es gibt auch gleich essen Wink

Grüße
Chris
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: 15.08.2013, 21:30     Titel:
  Antworten mit Zitat      
Hallo Geranie,

Noch ein Versuch Winkows Code zu verbessern:
Code:
for m=1:366;
array1(array1(:,m)>array2(m), m) = array2(m);
end

Alternative:
Code:
array1 = bsxfun(@min, array1, array2)

Gruß, Jan
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: 15.08.2013, 23:14     Titel:
  Antworten mit Zitat      
ja ich war da aufm sprung sry ich hatte ne version die lief aber beim übertragen nach go matlab und anpassen der variablen namen hab ich wohl mist gebaut Smile
_________________

richtig Fragen
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: 17.08.2013, 21:58     Titel:
  Antworten mit Zitat      
Hallo Winkow,

Da widerspreche ich. Der Tippfehler "1" statt "m" zu schreiben ist kein "Mist", wenn man berücksichtigt, dass der Vorschlag ansonsten das Problem löst. Einen gewissen Grad von Mitdenken benötigt die Kommunikation im Forum einfach, solange man den Code nicht direkt im Web-Interface laufen lassen kann.

Da wir gerade dabei sind: Das wäre eine tolle Erweiterung des Forums! Matlab code im Web-Interface wäre sehr nützlich.

Ich finde die übliche Groß/Kleinschreibung besser lesbar.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 27.05.13
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 19.08.2013, 10:44     Titel:
  Antworten mit Zitat      
Herzlichen Dank euch allen, die 1 durch m Änderung brachte den Erfolg, hatte ich irgendwie selbst übersehen :/

Danke!
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.