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

Wie soll das ohne Schleife gehen?

 

kingkamali

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2009, 14:43     Titel: Wie soll das ohne Schleife gehen?
  Antworten mit Zitat      
Hallo Leute, ich bin gerade dabei eine Funktion zu schreiben, die einen Vektor übergeben kriegt (1x167500) und als Rückgabe einen Vektor zurückgibt, der bestimmte stellen mit 0 oder 1 markiert,

Code:

function y = marker(x)

for(i=1:length(x))

if x(1,i)>=1000 && x(1,i)<=2000 || x(1,i)<=-2000 && x(1,i)>=-3500
    y(1,i)=1;

else
    y(1,i)=0;

end

end
 


Das funzt auch, nur mein Problem es dauert viel zu lange, mir wurde auch gesagt dass ich generell in Matlab schleifen meiden sollte, aufgrund des Rechenaufwandes....

Ich hoffe einer kann mir weiter helfen

danke


Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 05.11.2009, 14:48     Titel:
  Antworten mit Zitat      
Hallo,

die Schleife an sich ist nicht das Problem, sondern dass y nicht vorbelegt ist:
einfach eine Zeile y=false(size(x)); einfügen vor der Schleife.

Wenn Du aber die Schleife loswerden möchtest, dann geht es auch direkt:
Code:

y = x>=1000 & x<=2000 || x<=-2000 && x>=-3500;
 


Ciao,
Titus

Zuletzt bearbeitet von Titus am 05.11.2009, 14:49, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 05.11.2009, 14:48     Titel:
  Antworten mit Zitat      
Hallo

im Prinzip reicht nur Vergleich zu machen

Code:


function y = marker(x)
y =  x >= 1000 &  x <=2000 | x<=-2000 & x >= -3500
 
Private Nachricht senden Benutzer-Profile anzeigen
 
kingkamali

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2009, 15:52     Titel:
  Antworten mit Zitat      
danke, jetzt geht es ziemlich schnell Smile

aber was sagt diese Zeile aus

Code:


und ist dann der weg mit der schleife schneller oder der direkte vergleich?

Und erst mal danke für die sehr schnellen antworten Smile
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 05.11.2009, 16:17     Titel:
  Antworten mit Zitat      
Hallo kingkamali,

die Zeile legt einen Vektor y an, der genauso lang ist wie x, und nur logische Nullen enthält. Die Belegung ist eigentlich egal, weil ja alle Werte in der Schleife festgelegt werden, aber die Länge sollte der von x entsprechen, damit der Vektor y in der Schleife nicht vergrößert werden muss. Das ist nämlich der Vorgang, der die meiste Zeit beansprucht.

Wenn x viele Elemente hat, ist der direkte Vergleich schneller.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 05.11.2009, 17:31     Titel:
  Antworten mit Zitat      
Hallo,

was die Geschwindigkeit angeht: wie schon gesagt, der direkte Weg ist schneller, aber (wenn Variable vorbelegt) nicht viel.
Daher: solange vorbelegt ist, kann danach (meiner Meinung nach) programmiert werden, wie will. Ich finde das direkte lesbarer als eine Schleife, aber man braucht nicht mehr wie früher auf Teufel komm raus Schleifen vermeiden ...

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