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

for- und if-Schleife ersetzen

 

Ibero
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 28.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.01.2015, 15:11     Titel: for- und if-Schleife ersetzen
  Antworten mit Zitat      
Hallo Zusammen,

ich möchte unten stehenden Code gerne ohne for- und/oder if-schleife schreiben, da die Berechnung aktuell viel zu lange dauert.

Ist es möglich den Code umzuschreiben. Habe bisher noch keine Lösung dafür gefunden.


[code]M=zeros(8000,190);

%O (8000x190 logical), I, R, Z(8000x190 double)

for i=2:1:8000
for k=1:1:190

if O(i,k)==1
M(i,k)=R(i,k)-I(i,k)+Z(i,k);
else M(i,k)=Z(i,k);
end
M(M<=0)=0;
end
end

M;[/code]


Ich bin für jeden Tipp dankbar!

Beste Grüße
Ibero
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.01.2015, 19:14     Titel:
  Antworten mit Zitat      
Hallo,

auf den ersten Blick so:
Code:
M = Z;
M(O) = M(O) + R(O) - I(O);
M(M<=0)=0;


Ist es beabsichtigt, die i-Schleife bei 2 zu beginnen? Falls ja, muss das bei meinem Vorschlag noch berücksichtigt werden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ibero
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 28.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.01.2015, 16:15     Titel:
  Antworten mit Zitat      
Funktioniert einwandfrei, danke!

Ich habe noch ein paar weitere for- und if-Schleifen in meinem Programm, bei denen ich nicht genau weiß ob sie nötig sind.

z.B.
[code]

%A = double 8000x190; Liste = double 24x190

for i=2:1:8000
for k=1:1:190
if A(i,k)==1 %Wenn A(i,k)=1, dann sollen die Spalten Werte um den Wert aus Liste (Zeile 18, Spalte k) steigen.
A(i,k)=A(i-1,k)+Liste(18,k);
elseif A(i,k)==2
A(i,k)=A(i-1,k)+Liste(21,k);
elseif A(i,k)==3
A(i,k)=A(i-1,k)+Liste(24,k);

end
end
end[/code]

Geht das auch ohne Schleife? Oder braucht man immer eine Schleife, wenn man (i+x) oder (i-x) benutzt, um auf vorhergehende oder nachfolgende Werte zuzugreifen?

z.B.
A(A==1)=???
A(A==2)=???

Beste Grüße
Ibero
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.01.2015, 16:22     Titel:
  Antworten mit Zitat      
Hallo,

kann A nur die Werte 1, 2, 3 annehmen oder auch andere Werte?

Grundsätzlich kann es auch interessant sein, den Code mal mit dem Profiler zu analysieren und zu überprüfen, welche Code-Teile wirklich die meiste Zeit benötigen. Dann kann man sich bei der Laufzeitverbesserung auf genau diese Teile konzentrieren.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ibero
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 28.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.01.2015, 16:33     Titel:
  Antworten mit Zitat      
Hallo und schon mal Danke für die schnelle Antwort!

A nimmt auch andere Werte als 1,2 und 3 an.

Ich werde es mal mit dem Profiler analysieren. Die Schleife oben benötigt einzeln gar nicht so viel Zeit. Ich habe jedoch mehrere Schleifen, die ähnlich aufgebaut sind und das summiert sich dann.

Ist es denn überhaupt möglich eine for-Schleife zu umgehen, wenn man z.B. in einer Spalte auf nachfolgende bzw. vorhergehende Elemente zugreifen möchte? (z.B. in Spalte i: Wenn der Wert 0 wird, sollen die Werte in den nächsten 5 Zeilen der Spalte i auch 0 sein)

Viele Grüße
Ibero
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.