WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Zwei kurze Anfängerfragen

 

raphw
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 12.11.08
Wohnort: ---
Version: Matlab R2010a
     Beitrag Verfasst am: 24.11.2008, 12:10     Titel: Zwei kurze Anfängerfragen
  Antworten mit Zitat      
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.

Danke fürs Antworten! Liebe Grüße,
Rafael
Private Nachricht senden Benutzer-Profile anzeigen


derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 24.11.2008, 12:24     Titel:
  Antworten mit Zitat      
1.

Code:

t=300;
in=[100,200,300]
max(t==in)
 


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)
  if nargin < 1 | nargin > 5
    error('usage: ([Y [, f [, t]]] = specgram(x [, n [, Fs [, window [, overlap]]]]) ')
  end

  % assign defaults
  if nargin < 2 | isempty(n), n = min(256, length(x)); end
  if nargin < 3 | isempty(Fs), Fs = 2; end
  if nargin < 4 | isempty(window), window = hanning(n); end
  if nargin < 5 | isempty(overlap), overlap = length(window)/2; end
 


Viele Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 24.11.2008, 13:23     Titel:
  Antworten mit Zitat      
beim Problem 2 würd ich die "find" funktion vorschlagen:

Code:

t=[1 2 3 4 4 4 3 3 2 3];
a=find(t==3); % a enthält alle Positionen der Zahl 3
a(1) % Das erste Element von a


a(1) ist das erste Auftreten der Zahl 3 im Vektor.
_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.11.2008, 13:38     Titel:
  Antworten mit Zitat      
Hallo,

zu 1:
Code:

zu 2:
Code:
mit X als Vektor und x als Skalar (bricht nach dem ersten erfolgreichen "Finden" die Suche ab.

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
hadi
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 06.08.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.11.2008, 15:52     Titel:
  Antworten mit Zitat      
Dachte, für (1) ist any(..) am sinnvollsten...
Code:
if any(t==[100,200,300])

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.11.2008, 16:31     Titel:
  Antworten mit Zitat      
Hallo,

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.

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
raphw
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 12.11.08
Wohnort: ---
Version: Matlab R2010a
     Beitrag Verfasst am: 24.11.2008, 16:51     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 24.11.2008, 17:28     Titel:
  Antworten mit Zitat      
Code:

_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
raphw
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 12.11.08
Wohnort: ---
Version: Matlab R2010a
     Beitrag Verfasst am: 24.11.2008, 18:08     Titel:
  Antworten mit Zitat      
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!!
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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button 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.