|
|
Die "find"-Funktion von Scilab |
|
Ben de Brugg |
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 20.11.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.02.2017, 08:48
Titel: Die "find"-Funktion von Scilab
|
|
|
|
|
Hallo,
ich bin bezüglich fehlender Lizenz von Matlab auf Scilab umgestiegen und benutze Scilab zur digitalen Datenverarbeitung.
In einem Programm möchte ich die Indizes eines Vektors suchen:
// Find the indices of the amplitudes to the corresponding center frequencies
for k = 1:length(fc)
fa(k) = f(find(f == fc(k)))
// Test if the chosen center frequency is available in the frequency vector
if(isempty(fc(k)))
fa(k) = fc(k);
then
// Calculation of a middle frequency between the next higher and the...
// next lower frequency
fa(k) = (f(find(f <= fc(k))) + f(find(f<=fc(k))+1))/2;
end
fc ist eine Matrix des Typs (3,1). f ist ein Vektor (1,250).
Das Problem ist, dass die Werte in fc oftmals nicht in f vorhanden sind und ich diese durch eine Approximation (Mittelwert aus dem nächst kleineren und nächst höheren) berechnen muss. In Matlab benutzte ich deshalb immer die optionen "last" und "first", sodass ich gezielt den letzten vor dem gesuchten Wert und den ersten danach heranziehen konnte. Das ging auch sehr komfortabel. In Scilab gibt es meines Wissens diese Optionen nicht.
Ein Umweg wäre alle Indizes ausgeben zu lassen, welche unterhalb des Wertes sind und alle Indizes oberhalb des Wertes. Dann könnte ich aus den erzeugten Vektoren den letzten, bzw. den ersten Wert entnehmen (sofern das funktionieren sollte).
Hat von euch auch jemand dieses Problem oder gar eine Lösung hierfür?
Ich wäre euch sehr dankbar.
Vielen Dank schonmal.
_________________
"Who you gonna call?!?" - "Matlab."
|
|
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 20.02.2017, 13:06
Titel: Re: Die "find"-Funktion von Scilab
|
|
Hallo Ben de Brugg,
Der gezeigte Code kann nicht laufen:
Die Elemente eines Vektors können niemals leer sein.
Wenn die Elemente von fc eindeutig und sortiert sind, ist eine lineare Interpolation einfacher und effizienter.
Gruß, Jan
|
|
|
Ben de Brugg |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 20.11.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.02.2017, 14:26
Titel:
|
|
Hallo,
vielen Dank für deinen schnellen Eintrag. Hab das Problem lösen können.
if(isempty(find(f == fc(k))))
Diese Zeile macht das Programm lauffähig. Hab es mal ausprobiert --> Läuft!
Aber vielen Dank.
Gruß,
Bene
_________________
"Who you gonna call?!?" - "Matlab."
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 20.02.2017, 18:05
Titel:
|
|
Hallo Ben de Brugg,
Auch wenn es läuft, ist es ziemlich indirekt. Einfacher und schneller:
Gruß, Jan
|
|
|
Ben de Brugg |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 20.11.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.02.2017, 12:24
Titel:
|
|
stellt einen Matlab-Befehl dar.
In Scilab ist die Schreibweise
anzuwenden.
Wollte dies ergänzen, sodass weitere User direkt eine Lösung für das any-Problem erhalten. Aber vielen Dank dir =)
Gruß,
Bene
[EDITED, Jan, Bitte kein Top-Quoting der gesamten vorhergehenden Nachricht - Danke!]
_________________
"Who you gonna call?!?" - "Matlab."
|
|
|
|
|
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.
|
|