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

> Logic-Abfrage - Problem event. mit if-Loop

 

stoxxii

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2013, 11:11     Titel: > Logic-Abfrage - Problem event. mit if-Loop
  Antworten mit Zitat      
Halloo User-Gemeidne,
Halloo Admins,


habe kleineres Abfrage bzw. Zuordnungs-Problem:
Daten - Input :
class = [ 1 3 6 12 24] % oberen Klassen- bzw. Intervall-Rand (Monate)
dx = [1 2 3 6 12] % das sind die Abstände, also Intervall-Breite

will z.B. "5" (Monate) im Vector [class] logisch abfragen und
dann eine Formel rechnen :

Code:

a = 5;
if a <class(1)
      z = a/dx(1)
   else class(1) < a <= class(2)
      z = a/dx(2)
   else  class(2) < a <= class(3)
     z = a/dx(3)
   else class(3) < a <= class(4)
      z = a/dx(4)
   else class(4) < a <= class(5)
       z = a/dx(5)
end
 


Nun meine Frage : kann man das eventuell eleganter und kürzer schreiben ??? , insbes. wenn man bedenkt, das mehr Intervalle abgefragt werden müssen ....
Vielleicht muß ich das noch um einen Abfrage erweitern ...

Danke für Ideas, Zeit & Mühen vorab ...

Beste Grüße
stoxxii


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 03.08.2013, 11:34     Titel:
  Antworten mit Zitat      
phu. dein code weist einige fehler auf.
also erstemla ist class ein matlab begriff und sollte nicht als variablen namen verwendet werden. des weiteren verwndest du die if else abfrage falsch.
Code:
cl = [ 1 3 6 12 24]; % oberen Klassen- bzw. Intervall-Rand (Monate)
dx = [1 2 3 6 12];

a = 5;
if a <=cl(1)
      z = a/dx(1);
elseif cl(1) < a && a<= cl(2)
      z = a/dx(2);
elseif  cl(2) < a && a<= cl(3)
     z = a/dx(3);
elseif cl(3) < a && a<= cl(4)
      z = a/dx(4);
elseif cl(4) < a && a<= cl(5)
       z = a/dx(5);
end

der bereich a=cl(1) war bei dir nicht berücksichtigt.
außerdem geht es auch nicht wenn a>cl(end) ist.
kürzer wäre
Code:
z2=a/dx(find(a<=cl,1));
könnte klappen hab ich aber nicht getestet.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
stoxxii

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2013, 11:47     Titel: >> erstmal DANKE >> jaja, else if - ist quatsch
  Antworten mit Zitat      
Halloo Winkow,

danke für den eleganten Einzeiler , für diese one-Line-Solution ...

ich hatte lauter einzelne, separate if-Abfragen im Kopf ...
dann viel mir "else" ein .... und aufgrund meinen Zahnschmerzen machte ich daraus "elseif" ....

aber meinst du nicht, daß ich da vielleicht doch eine kleine if-Loop brauche ???
>> insbes. weil doch auch der Index bzw. das Element aus dem Vector dx mit der Abfrage mit laufen muß ...

Grüße
stoxxii
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 03.08.2013, 11:52     Titel:
  Antworten mit Zitat      
Zitat:
aber meinst du nicht, daß ich da vielleicht doch eine kleine if-Loop brauche ???
denke nicht ^^ sonst hätte ich das ja gemacht ^^
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
stoxxii

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2013, 19:01     Titel: >> der Einzeiler läuft nicht ... aber die if-Loop
  Antworten mit Zitat      
Halloo Winkow,

leider läuft der Einzeiler nicht ...daher versteh ich nicht ganz , den Sinn ...

Gibt es vielleicht noch eine Möglichkeit, diese if-Loop mit den elseif
kürzer zu schreiben, weil ich daheim noch ein paar Intervalle zum Abfragen einbauen müßte ...??

Danke für Programmier-Tips vorab ....
Grüße
stoxxii
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 03.08.2013, 19:54     Titel:
  Antworten mit Zitat      
Zitat:
leider läuft der Einzeiler nicht ...daher versteh ich nicht ganz , den Sinn ...
damit kann ich leider nichts anfangen ohne wild is blaue zu raten.
was geht nicht. welche fehlermeldungen treten auf? wie weicht das ergebniss vom erwartetem ab? ohne informationen kann ich nichts machen ^^.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
stoxxii

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2013, 10:07     Titel: > hier meine Fehlermeldung
  Antworten mit Zitat      
Halloo Winkow,
halloo Admins,

ich habe im Anhang meine Fehlermeldung drangehängt ... bloß so zur Kontrolle ...
da kommt :
"too many ipnu arguments" für den Einzeiler , von Winkow.... schade ...
Hängt wohl am "find" - Befehl ...

Bitte nicht Irritieren lassen, das im Screenshot, also in meinem Matlab-File ein
Rechenschritt mehr drin ist ....

Der Sinn der ganz Abfrage-Scheleife sollte sein, die Wahrscheinlichkeit bei klassierten Daten auszurechnen ...

Vielleicht fällt euch noch eine andere Möglichkeit ein...
Danke vorab...
Beste Grüße
stoxxii

_Error - Meldung__.pdf
 Beschreibung:

Download
 Dateiname:  _Error - Meldung__.pdf
 Dateigröße:  82.07 KB
 Heruntergeladen:  314 mal
 
stoxxii

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2013, 10:27     Titel: >> sorry, Ergänzung zum Matlab-File : Variable - F
  Antworten mit Zitat      
Halloo User-Gemeinde ,
Hi Admins,

ich habe vergessen, die Variable F zu benennen ...
Das ist die kumulierte Häufigkeit : also
Code:

F = cumsum(freq);
 

sorry, hatte ich vergessen ...
Grüße
stoxxii
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 04.08.2013, 10:34     Titel:
  Antworten mit Zitat      
ka bei mir läufts. welche version von matlab benutzt du? hast du mal in deine doc zu find geguckt ?
die fehlermeldung ist ja doch recht eindeutig.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
stoxxii

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2013, 10:53     Titel: >> komisch, liegt es an meiner Version 6.5 R13
  Antworten mit Zitat      
Halloo Winkow,

danke für dein schnelles Durchprüfen ...
Es liegt wohl an meiner Version 6.5 R 13 ...

aber eigentlich nix großes kompliziertes am find-Befehl ...

grüße
stoxxii
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.08.2013, 13:55     Titel: Re: >> komisch, liegt es an meiner Version 6.5 R13
  Antworten mit Zitat      
Hallo stoxxii,

Die Matlab version 6.5 kann mit dem zweiten Input von FIND noch nichts anfangen. Die Version ist jetzt aber auch schon 11 Jahre alt und ein Update wäre sinnvoll.

Statt "find(x, 1)" kannst Du im alten Matlab auch schreiben:
Code:
y = find(x);
y = y(1);


Nebenbei wäre zu betonen, dass es keine "IF-Schleifen" gibt. Nur FOR und WHILE erzeugen eine Schleife.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
stoxxii

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2013, 18:58     Titel: > Danke , mal sehn , ob es nun bei mir läuft ...
  Antworten mit Zitat      
Halloo Jan,

dank nochmal für die "find" - Korrektur ...
Bingespannt, wenn ich zu Hause bin, ob es läuft ...

grüße
stoxxi
 
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.