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

Welche Schleife benötige ich?

 

tompson
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 12.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2013, 18:31     Titel: Welche Schleife benötige ich?
  Antworten mit Zitat      
Hallo Leute,
mal vorne weg ich beschäftige mich erst seit kurzem mit Matlab, von daher hab ich auch den ein oder anderen syntax Fehler...aber das ist erstmal egal
Ich bin gerade verwirrt.

Mein Problem:
Ich möchte die Matrix B
Die Werte der Matrix B sollten wie folgt berechnet werden.:
Der einfachheitshalber mal so erklärt
B = 0 wenn (A(:) - 2)*5>=0
B = 5 wenn (A(:) - 2)*5<=100
ansonsten B =(A(:) - 2)*5 wenn 0<(A(:) - 2)*5<100...

Das hier if falsch ist ist mir inzwischen schon klar, aber meine tests mit for und while hatten auch das selbe ergebnis und zwar, das praktisch nur if (I(:) - k2)*k1<=0 ;
B =(A(:) - 2)*5 gerechnet wird :(

Mein Fehler liegt doch sicherlich darin das ich wohl nur den ersten wert abfrage und dann meine letzte "bedingung" eintrifft und die komplett auf die ganze matrix angewandt wird?!

Code:
if (I(:) - k2)*k1<=0 ;
    B=0 ;
    %Ist die Steigung >=255
elseif (I(:) - k2)*k1>= 255;
B= 255;

%Ist die Steigung zwischen 255 und 0 :
else B=(I(:) - k2)*k1;
   
end
Private Nachricht senden Benutzer-Profile anzeigen


Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 18.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 14.12.2013, 19:34     Titel:
  Antworten mit Zitat      
Hallo tompson,

Möchtest du alle Elemente von A prüfen und davon abhängig B erstellen? Sind A und B demnach gleich groß?

Hab gerade kein Matlab zur Verfügung, hoffe es ist kein Fehler drin:
Code:
for ii=1:anzahlElemente
   if (A(ii) - 2)*5<=0
      B(ii) = 0;
   elseif (A(ii) - 2)*5>=100
      B(ii) = 5;
   else   % Deine genannten Bedingungen sind übrigens nicht eindeutig
      B =(A(ii) - 2)*5;
end
 

Suchst du so was?

Grüße
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
tompson
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 12.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2013, 11:09     Titel:
  Antworten mit Zitat      
Code:
for ii=1:[b]numel(I)[/b]
   if (A(ii) - 2)*5<=0
      B(ii) = 0;
   elseif (A(ii) - 2)*5>=100
      B(ii) = 5;
   else   % Deine genannten Bedingungen sind übrigens nicht eindeutig
      B[b](ii)[/b] =(A(ii) - 2)*5;
end
[b]end[/b]
 


Danke dir, das fett gedruckte waren "deine" Fehler, welche dir Matlab vermutlich eh sofort ausgespcukt hätte ;-)
Dieser Code ist nur ein Beispiel da hier schneller klar wird auf was ich hinaus will.

Weitere Frage:
Mein Fehler bestand darin das ich die for-Schleife nicht zählen lassen konnte...
Wie man hier sieht wurde es mit ii gemacht... hat das ne tiefere Bedeutung? funktioniert doch auch mit i, wieso dann ii?

B ist bei mir nun ein Vektor welchen ich dann "reshapen" muss.
Kann ich die rechenoperation auch so durchführen das ich reshape weglassen kann und sich dabei der Code nicht nur verkürzt sondern sogar noch schneller wird?

lg
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.12.2013, 11:20     Titel:
  Antworten mit Zitat      
Hallo,

ii statt i wird verwendet um Verwechslungen mit der imaginären Einheit i zu vermeiden.

Die Aufgabenstellung kann deutlich eleganter mit logischer Indizierung gelöst werden. Prinzipiell kann das dann so aussehen:

Code:
B = zeros(size(A));
A2 = (A-2)*5;
B(A2 >= 100) = 5;
B(A2 > 0 & A2 <= 100) = A2(A2 > 0 & A2 <= 100);


Grüße,
Harald
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 - 2024 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.