Verfasst am: 24.11.2008, 11:10
Titel: Zwei kurze Anfängerfragen
Hallo Forum,
ich arbeite erst seit kurzem mit Matlab, programmiere aber schon eine Weile.
Ich suche derzeit Lösungen zu folgenden Problemstellungen, die vielleicht sogar verwandt sein könnten.
1. Einmal wundere ich mich, wie ich etwas in der Art:
IF Variable IS IN ([100 200 300])
true, wenn Variable = 100, 200 oder 300
programmieren kann. Also true zurückgeworfen wird, falls Variable 100 200 oder 300 ist (Variable ist hier ein double)
2. Weiter möchte ich gerne wissen, wie ich in einer langen Matrix die Position des ersten Auftretens miner Variable ermitteln.
Also eine Art von:
position(200,[100 200 300],'first')
Natürlich kann ich das mit unique auch machen, nur dauert das sehr lange, wenn die Matrix sehr groß ist und die Variation der Variablen sehr hoch. Ich möchte also gerne den Output von unique, nur dass Matlab abbrechen soll, wenn das Programm gefunden hat, wonach ich suche.
Zumindest letzteres könnte ich mir zwar selbst programmieren, aber programminterne Funktionen sind bekanntlich schneller.
3. Wie kann ich denn bei Funktionen optionale Parameter setzen?
Also function foo = foo(obligatory,obligatory,optional,optional)
Hierzu steht unter function, warum auch immer, nichts in der Referenz.
2. Ich glaube du kannst das nur selber programmieren in einer Schleife aber probiere trotzdem innerhalb der schleife performant zu arbeiten.
Mein Vorschlag, teile deine Matrix in feste Stücke z.B. jeweils 1000 Werte benutze dann unique und beim ersten Auftreten brichst du die Schleife ab.
3. Funktioniert mit nargin hier mal ein Beispiel:
Code:
function[Timefreq, f_r, t_r] = myspecgram(x, n, Fs, window, overlap) ifnargin < 1 | nargin > 5 error('usage: ([Y [, f [, t]]] = specgram(x [, n [, Fs [, window [, overlap]]]])') end
ich habe grad in "ismember" reingeschaut. Da wird es tatsächlich mit "any" gemacht, genauso wie du es geschrieben hast. Der Vortei von "ismember" ist allerdings, dass man auch Vektoren, Matrizen u.ä. mit reingeben kann.
Hallo zusammen,
wirklich klasse, alles läuft so, wie ich es möchte. Vielen, vielen Dank. Eine Frage nur noch: Wie würdet ihr denn alle Nullen in einer n*m-Matrix durch NaN ersetzen?
Danke für diesen letzten Ratschlag! Liebe Grüße, Rafael
Perfekt. Ich hatte eine kleine Umweglösung über drei Zeilen, aber ich dachte mir schon dass es schneller geht, hätte ich auch selbst drauf kommen können. Danke euch allen!!
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
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.