|
|
Code Ausschnitt ersetzen - Idee aus Präprozessor |
|
pooz |

Forum-Anfänger
|
 |
Beiträge: 49
|
 |
|
 |
Anmeldedatum: 04.05.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.05.2009, 12:38
Titel: Code Ausschnitt ersetzen - Idee aus Präprozessor
|
 |
|
 |
|
Hallo Leute,
ich möchte gerne in einer Zeile eine Variable ersetzen. Und dieses abhängig davon, was der Benutzer mittles eines Radio-Buttons gewählt hat.
Der Benutzer hat 3 Möglichkeiten zu Auswahl: Er ersetzt die Variable entweder durch einen Vektor, oder durch jeweils eine der beiden Matrizen.
Bisher hab ich immer per Hand, je nach dem welchen Modus ich haben wollte, eine Zeile auskommentiert.
Ich denke ein Code (gekürzte Fassung) sagt mehr als meine vielen Worte:
Die Zeilen sind bis auf die Variablen "f" (vektor), "f_a" (Matrix), "f_r" (Matrix) identisch. Ich möchte diese zu einer Zusammenfassen, die verschidenen Variablen durch eine namens "freq" ersetzen.
Eine Switch-Anweisung vor der Schleife soll entscheiden, welche meiner 3 Variablen eignesetzt wird.
Die Probleme sind:
1: Ich möchte ungern in der Schleife eine if oder switch/case abfrage.
2: In der ersten Zeile hab ich einen Vektor-Index, in den beiden anderen dagegen 2 Matrix indizes
Die einzige Methode, die mir einfällt, wäre eine reine String-substitution. Kriege das aber nicht hin.
Mit Symbole hab ich das auch probiert, jedoch geht das mit der Anzahl an verschiedenen Indizes nicht.
Für jegliche hilfe bin ich dankbar
gruß!
|
|
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 28.05.2009, 13:58
Titel:
|
 |
Hallo,
da sollst vielleicht mit eval probieren
ungefähr so, musst aber an dein code anpassen:
|
|
|
pooz |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 49
|
 |
|
 |
Anmeldedatum: 04.05.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.05.2009, 14:56
Titel:
|
 |
jap,
vielen dank! Hatte ich bereits probiert, und verlangsamt meine Schleife leider ungemein!
(Es werden Audio-Dateien prozessiert. Bei bspw. 200000 Samples dauert das leider merklich mehr als ohne)
Gibt es eine andere Möglichkeit?
Danke!!
|
|
|
steve |

Ehrenmitglied
|
 |
Beiträge: 2.029
|
 |
|
 |
Anmeldedatum: 03.09.07
|
 |
|
 |
Wohnort: Wien
|
 |
|
 |
Version: R2024a
|
 |
|
|
 |
|
Verfasst am: 28.05.2009, 15:00
Titel:
|
 |
Moin,
kurze Frage:
warum keine Switch-Abfrage in der Schleife?
Gruß
Alex
_________________
>> I told me to.
____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
|
|
|
pooz |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 49
|
 |
|
 |
Anmeldedatum: 04.05.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.05.2009, 15:22
Titel:
|
 |
Moin,
um die Switch-Abfrage geht es nicht. Der Befehl "eval" in der Schleife, ist das Problem. Anscheinend benötigt der viel Rechenzeit.
|
|
|
steve |

Ehrenmitglied
|
 |
Beiträge: 2.029
|
 |
|
 |
Anmeldedatum: 03.09.07
|
 |
|
 |
Wohnort: Wien
|
 |
|
 |
Version: R2024a
|
 |
|
|
 |
|
Verfasst am: 28.05.2009, 15:27
Titel:
|
 |
Ich weiß das eval viel Zeit benötigt - aber du hast in deinem ersten Post geschrieben:
pooz hat Folgendes geschrieben: |
1: Ich möchte ungern in der Schleife eine if oder switch/case abfrage. |
Darauf bezog sich meine Frage.
Gruß
Alex
_________________
>> I told me to.
____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 28.05.2009, 15:43
Titel:
|
 |
Das stimmt es verlangsamt,
dein Code wg der Schleifen ungemein.
Wenn bei dir Vektor auftritt, Welche werte hat N
Zitat: |
"f" (vektor), "f_a" (Matrix), "f_r" (Matrix) identisch. |
sonst kanst du dein vektor zu matrix aufblasen
Edit: die Klammer Anzahl stimmt irgendwie nicht
|
|
|
pooz |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 49
|
 |
|
 |
Anmeldedatum: 04.05.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.05.2009, 16:59
Titel:
|
 |
@ Alex
Selbstverständlich, du hast Recht! Entschuldige, hab gar nicht an den Ausgangspost mehr gedacht.
Zur Aussage: Vermeiden wollte ich die if-Abfrage, da diese in Schleifen Ewigkeiten dauert.
@ denny
Japp! Hatte ich auch mal dran gedacht, aber ich bin schnell wieder davon abgekommen, das aufzublasen. Grund: N beträgt bspw. 200000. Das sind die Anzahl an Samples aus Audio-Dateien.
Ich konnte es nicht mit mir vereinbaren, eine so große, redundante Matrix zu basteln
Dann hätte ich es lieber nicht mathematisch sondern per "Code-Ersetzung" umsetzen wollen. Und hier bin ich nun gelandet
|
|
|
steve |

Ehrenmitglied
|
 |
Beiträge: 2.029
|
 |
|
 |
Anmeldedatum: 03.09.07
|
 |
|
 |
Wohnort: Wien
|
 |
|
 |
Version: R2024a
|
 |
|
|
 |
|
Verfasst am: 28.05.2009, 17:21
Titel:
|
 |
If-Abfragen dauern lange, das stimmt, allerdings sollte eine switch-Anweisung ein relativ schnelles Ergebnis bringen...
Gruß
Alex
_________________
>> I told me to.
____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 28.05.2009, 17:36
Titel:
|
 |
In diesem Fall ist eine if noch günstig,
Laufzeit beträgt ja da ca. n(n+n)= 2*n^2=O(n^2)
Das heißt, da for Schleifen mehr Laufzeit benötigen wird man eine If-Abfrage praktisch nicht spüren.
probier mal so:
|
|
|
pooz |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 49
|
 |
|
 |
Anmeldedatum: 04.05.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.05.2009, 18:13
Titel:
|
 |
Vielen Dank, ihr Beiden!!
Jetzt haben wir 4 Ergebnisse. Ich fasse zusammen:
1) Text-Ersetzung mittels "eval" (Dauert zu lange)
2) Vektor aufblasen mittels "repmat"
3) if-Abfrage in der For-Schleife (siehe Post direkt hiervor)
4) 3 Mal den ganzen Quell-Code kopieren, und jeweils diese eine Zeile anpassen. Mit einer If-Abfrage vor jedem Block überprüfen, welcher Block ausgeführt werden soll. (Mein bisheriger Workaround)
Frage
Welches der Methoden 2,3 oder 4 ist am schnellsten?
Danke!
pooz
BTW: /SideToppic.
Wo wir gerad dabei sind: Was ist schneller, switch oder ifelse ?
oder
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 28.05.2009, 19:27
Titel:
|
 |
Aus Sicht der Informatik, ist SWITCH und IF gleich schnell.
SWITCH ist einfach etwas übersichtlicher struktuiert.
Auf Laufzeit eine Schleife wirkt sich mehr die Anzahl der Verzweigungen und auch Anzahl der Vergleiche spielt eine Rolle. Vergleicht man Arrays oder Konstanten miteinander, das macht ein großes Unterschied.
Edit: Besser zu jedem Beispiel:
wenn ich richtig die Laufzeit berechnet habe, dann sieht es so aus
2) Worst Case n^2+n^2 = 2n^2 (mit repmat): BestCase n^2+1
3) Worst Case 4n^2+4 BestCase: 3n^2+4
4) Worst Case 4n^2 BestCase: 2n^2
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|