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

Werte in einem Intervall

 

jean marie

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.01.2013, 15:34     Titel: Werte in einem Intervall
  Antworten mit Zitat      
Hey ich habe eine Frage:
Ich habe ein array von 250 Zahlen, davon habe ich den Mittelwert berechnet. Nun soll ich jede Zahl überprüfen, ob der Mittelwert zwischen der i-ten und der (i+1) -ten Zahl. Und danach soll ich überprüfen welcher der beiden Zahlen näher am Mittelwert liegt.

Ich habe es versucht aber irgentwie kommt noch nicht das richtige herraus kann mir vielleicht jemand weiter helfen?

Code:
for i=1:length(a)-1
   if (a(i)>mittelwert && mittelwert>a(i+1)) ||(a(i)<mittelwert && mittelwert<a(i+1))
     test1= a(i)- mittelwert
     test2= a(i+1) - mittelwert
     if (test1 < test2)
      gw= a(i+1);
      else gw= a(i+1);
     gw
     end
   end
end


[EDITED, Jan, Bitte Code-Umgebung benutzen - Danke!]


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.01.2013, 16:09     Titel: Re: Werte in einem Intervall
  Antworten mit Zitat      
Hallo jean marie,

"gw" ist in beiden Fällen gleich und wird nur im 2. Fall ausgegeben. Besser:
Code:
if (test1 < test2)
  gw= a(i);
else
  gw= a(i+1);
end
gw

Ist dies das, was Du suchst?

Noch ein Hinweis für schöne Matlab-Programme:
Ziehe doch mal den Index-Vektor aus der FOR-Schleife direkt in die Indices innerhalb der Schleife:
Code:
index =  (a(1:length(a)-1)>mittelwert && mittelwert>a(2:length(a))) | (a(1:length(a)-1)<mittelwert && mittelwert<a(2:length(a)))

Das ersetzt die FOR-Schleife!
Hier wurde noch aus || das allgemeinere | gemacht. Siehst Du schon, wie man den nächsten Test ebenso durchführen könnte?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
jean Marie

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.01.2013, 16:31     Titel:
  Antworten mit Zitat      
Vielen Dank für deine schnelle Antwort, ich habe den Fehler jetzt behoben, aber irgentwie gibt er mir nicht alle Werte für gw aus, dort erhalte ich immer nur ein Wert. Was muss ich noch ändern, damit ich zum Schluss alle mein gw erhalte? ich habe es schon versucht mit gw(1,i) = a(i) aber so funktionniert es auch nicht Confused [/code]
 
jean marie

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.01.2013, 16:58     Titel:
  Antworten mit Zitat      
Nun erhalte ich alle Werte aber ich will nur die herausbekommen bei denen es zutrifft. Also ich erhalte nun ein Array mit lauter Nullen und an denen Stelle wo das mit dem Mittelwert zutrifft dort steht die Zahl. Aber wie erhalte ich ein Array in dem nur die Zahlen drin stehen, die mich interressieren?
Code:
%
gw= zeros(250,1);
for i=1:length(a)-1
   if (a(i)>mittelwert && mittelwert>a(i+1))|(a(i)<mittelwert && mittelwert<a(i+1))
     test1= abs( a(i)- mittelwert);
     test2= abs(a(i+1) - mittelwert);
     if (test1 < test2)
      gw(i,1)= a(i);
     else  if (test1 > test2)
              gw(i,1)= a(i+1);
         end
     end
     end
end
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.01.2013, 17:26     Titel:
  Antworten mit Zitat      
Hallo jean marie,

Das "else if (test1 > test2)" ist nur notwendig, wenn du test1==test2 unbedingt ausschließen möchtest.
Du kannst entweder nach der Schleife alle Nullen aus gw löschen:
Code:
gw(gw == 0) = [];

Oder Du verwendest einen zweiten Zähler k, der immer um 1 erhöht wird, wenn ein passender Wert auftritt.

Eigentlich naheliegend, oder? Aber es ist wie immer: wenn man es weiß, ist es trivial. Wenn man es nicht weiß, unmöglich. :-)

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
jean Marie

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.01.2013, 17:41     Titel:
  Antworten mit Zitat      
Ach ja stimmt .... vielen Dank ja bin einfach nicht darauf gekommen viel Dank. Ich habe da jetzt nur das Problem (da es ja nun ausserhalb von der Schleife ist), dass ich den Index noch benötige also an welcher Stelle der Wert im Array a ist. Kann ich das irgentwie lösen, das ich den Wert mit dem Index bekomme?


Vielen Dank
MFG Jean Marie
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 18.01.2013, 08:30     Titel:
  Antworten mit Zitat      
Hallo jean Marie,

Ich verstehe die Frage nicht. An welcher Stelle steht welcher Wert im Array a?

Vielleicht könntest Du gw zunächst auch mit dem Index der FOR-Schleife beschreiben, und nach der Schleife per FIND die Indices erhalten. Aber möglicherweise meinst du etwas anderes. Es hilft bestimmt, wenn Du den aktuellen Code postest.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
jean marie

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.01.2013, 10:56     Titel:
  Antworten mit Zitat      
Mein Programm sieht jetzt so aus am Ende erhalte ich alle richtigen Werte in gw das Programm funktionniert also, aber ich möchte nun gerne wissen an welcher stelle die Werte von gw in dem Vektor a stehen. Als Beispill: Der erste Wert von gw sei 5 nun möchte ich gerne wissen an welcher stelle diese 5 in meinem Anfangsvektor a steht.[/code]

Code:
% for i=1:length(a)-1
    for k=1:length(a)-1
   if (a(i)>mittelwert && mittelwert>a(i+1))|(a(i)<mittelwert && mittelwert<a(i+1))
     test1= abs( a(i)- mittelwert);
     test2= abs(a(i+1) - mittelwert);
     if (test1 < test2)
      gw(i,1)= a(i);
     else  if (test1 > test2)
              gw(i,1)= a(i+1);
               %plot(gw,'m*')
         end
     end
   end
   end
end
gw(gw == 0) = [];
 
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 19.01.2013, 14:08     Titel:
  Antworten mit Zitat      
Hallo jean marie,

Im Code stimmt etwas nicht mit der Schleife: "for i" ist wohl eher gemeint als "for k", oder?

Wenn Du nun noch die Position wissen möchtest, wieso schreibst Du den entsprechenden Index nicht einfach in einen zweiten Vektor? Also überall, wo gw benutzt wird, füge eine zweite Variable gwIndex ein und speichere darin die Position bzgl. a. Das ist naheliegend, oder?

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