Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Studierende:
Praktikant Toolentwicklung Matlab (m/w)
Branche: Beratung, Expertise, Fahrzeugtechnik, Fahrzeugteile, Technische Dienstleistungen
MBtech Group GmbH & Co. KGaA - Fellbach

Abschlussarbeit / Praktikum: Entwicklung Matlab (m/w)
Branche: Informationstechnologie, Elektrotechnik, Elektronik
GIGATRONIK Technologies GmbH - Ulm

Studentische Mitarbeit - Fahrzeugmessungen
Branche: mehrere
IAV GmbH - Ingenieurgesellschaft Auto und Verkehr - Berlin

Werkstudent (m/w) High End GNSS Simulation mit modernsten Signalgeneratoren
Branche: Mess-, Regel-, Automatisierungstechnik, Telekommunikation, Nachrichtentechnik
ROHDE & SCHWARZ GmbH & Co. KG - München

Praktikant Testsystemaufbau (m/w)
Branche: Beratung, Expertise, Fahrzeugtechnik, Fahrzeugteile, Technische Dienstleistungen
MBtech Group GmbH & Co. KGaA - Sindelfingen

weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Die "find"-Funktion von Scilab

 

Ben de Brugg
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 20.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.02.2017, 08:48     Titel: Die "find"-Funktion von Scilab
  Antworten mit Zitat      
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."
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 10.481
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 20.02.2017, 13:06     Titel: Re: Die "find"-Funktion von Scilab
  Antworten mit Zitat      
Hallo Ben de Brugg,

Der gezeigte Code kann nicht laufen:
Code:

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Ben de Brugg
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 20.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.02.2017, 14:26     Titel:
  Antworten mit Zitat      
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."
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 10.481
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 20.02.2017, 18:05     Titel:
  Antworten mit Zitat      
Hallo Ben de Brugg,

Auch wenn es läuft, ist es ziemlich indirekt. Einfacher und schneller:
Code:
if any(f == fc(k))

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Ben de Brugg
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 20.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.02.2017, 12:24     Titel:
  Antworten mit Zitat      
Code:

stellt einen Matlab-Befehl dar.

In Scilab ist die Schreibweise

Code:
mtlb_any(A)


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


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2017 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.