|
|
Spaltenvektor mit if - Abfrage bearbeiten |
|
Lini |
Forum-Newbie
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 26.12.16
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.12.2016, 11:18
Titel: Spaltenvektor mit if - Abfrage bearbeiten
|
|
Hallo,
ich habe ein Problem bei der Erstellung von Matlab Funktionen, die einen Spaltenarray abarbeiten sollen. Mein code sieht folgendermaßen aus:
Wenn ich auf diese If- Abfrage Für Freq einen Wert gebe dann wird die if- Abfrage vernünftig ausgeführtrt, bei einem array wird immer nur das else ausgeführt. Die Funktion passt nur, wenn ich den code mit einer for- Schleife mache. Das will ich allerdings vermeiden, da ich mehrere Millionen Werte abfragen muss.
Der letzte Term y = y(-1) + x; wird so auch nicht ausgeführt. Dies könnte ich zwar mit dem Befehl y=y(1)+ cumsum(x) lösen, brauche aber den Befehl auf eine zurückliegende Zeile zuzugreifen auch zur Erweiterung des Codes.
Ich bin über jede Hilfe sehr dankbar, da ich echt keine Ideen mehr habe und das Internet und Bücher konnten mir auch nicht wirklich helfen.
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 26.12.2016, 11:47
Titel:
|
|
Hallo,
schau dir mal logische Indizierung (logical indexing) an.
Der Anfang wäre:
Grüße,
Harald
|
|
|
Lini |
Themenstarter
Forum-Newbie
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 26.12.16
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.12.2016, 22:57
Titel:
|
|
Vielen Dank dafür, das hat auf jeden Fall sehr geholfen.
Habe ich denn jetzt auch die Möglichkeit auf Spalten zuzugreifen, die beispielsweise 10 sekunden (also 10 spalten in diesem Fall) zurückliegen, oder die erst 10 sekunden später kommen?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 27.12.2016, 10:45
Titel:
|
|
Hallo,
grundsätzlich per Indizierung. Beispielsweise würde ein mathematisches
y(t) = x(t) + x(t-10)
zu etwas wie
Grüße,
Harald
|
|
|
Lini |
Themenstarter
Forum-Newbie
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 26.12.16
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 28.12.2016, 22:57
Titel:
|
|
Vielen Dank für deine Unterstützung! So komm ich mit der Indizierung aber leider nicht ganz zurecht. Wenn ich mir beispielsweise mit folgendem Code die Zeile y = x(n-1) ausgeben lassen möchte
bekomme ich anstelle des Arrays nur die 12.5 ausgegeben. Und wenn ich das folgendermaßen versuche:
bekomme ich immer den Fehler: Subscript indices must either be real positive integers or logicals.
Kann man da irgendwas machen da der Array x bzw. andere Arrays von den zurückliegenden X-Werten beeinflusst werden?
[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 29.12.2016, 10:31
Titel:
|
|
Hallo,
x muss definiert und y vorbelegt werden, bevor die Indizierung erfolgt.
Die Anzahl der extrahierten Werte und der hineinzuschreibenden muss übereinstimmen.
Um dir mit der Fehlermeldung zu m weiterzuhelfen, müsste man wissen, was m ist.
Sofern m kein Vektor ist, wird das aber auch wieder nur eine Zahl zurückgeben.
Grüße,
Harald
|
|
|
Lini |
Themenstarter
Forum-Newbie
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 26.12.16
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 30.12.2016, 08:53
Titel:
|
|
Hallo,
wenn ich das jetzt richtig verstanden habe sollte folgende Funktion mit der Inputvariablen z = [15:20]
als y-Wert den Vektor [0, 30, 32, 34, 36, 38] liefern? Ich bekomme aber immer einen Vektor mit Nullen ausgegeben. Oder liege ich da falsch?
Zitat: |
Um dir mit der Fehlermeldung zu m weiterzuhelfen, müsste man wissen, was m ist.
Sofern m kein Vektor ist, wird das aber auch wieder nur eine Zahl zurückgeben. |
Hier habe ich versucht m als Index nutzen. In diesem Fall sah die ganze Funktion in etwa so aus:
Mit der Fehlermeldung: Subscript indices must either be real positive integers or logicals.
Error in xz (line 6)
y(2:end) = x(m-1);
Viele Grüße,
Lini
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 30.12.2016, 09:51
Titel:
|
|
Hallo,
gehe den Code doch am besten mal Zeile für Zeile durch, so wie MATLAB es auch macht.
Vermutlich meinst du sowas:
Bei der zweiten Funktion verstehe ich noch weniger, was sie machen soll, insbesondere das find. Wenn m danach 1 enthält, bekommst du natürlich ein Problem, wenn du später 1 abziehst und somit 0 als Index verwendest.
Grüße,
Harald
|
|
|
Lini |
Themenstarter
Forum-Newbie
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 26.12.16
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 30.12.2016, 12:04
Titel:
|
|
Hallo Harald,
Ich glaube ich hab mein Problem Verstanden.
Vielen Dank für deine Hilfe!
gruß
Lini
|
|
|
|
|
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 - 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.
|
|