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

Funktionsfrust

 

ibejustme
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 12.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.01.2010, 21:47     Titel: Funktionsfrust
  Antworten mit Zitat      
Hallo Zusammen,

ich wollte mich an meine erste Matlabfunktion machen, jedoch treibt mich Matlab derzeit in den Wahnsinn Smile

Code:

if humidity > 80 && rain == false
rainprob = high
else
rainprob = medium
end
 


funktioniert in einem script. Möchte ich jetzt allerdings die Funktionalität aus einem script in eine funktion packen meckert matlab.

Und zwar:
Operands to the || and && operators must be convertible to logical scalar values.


Irgendwie komme ich nicht auf die Ursache warums einmal geht, und dann wieder nicht. jemand ne Idee?
Hat jemand mal ein Beispiel für eine größere Funktion mit mehreren Variablen? Die Besipuiele die man findet sind immer sehr übersichtlich und nicht wirklich aufschlussreich worauf man achent muss wenn man mehrere variablen hat.

Gruß
Ibejustme
Private Nachricht senden Benutzer-Profile anzeigen


muvik
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 27.11.07
Wohnort: Mannheim
Version: ---
     Beitrag Verfasst am: 30.01.2010, 12:07     Titel:
  Antworten mit Zitat      
Hallo,

Funktionen in Matlab sind eigentlich ganz einfach. Alle Variablen in den runden Klammern sind die übergebenen Variablen und die Variable in den eckigen Klammern sind die Ausgabevariablen. Beachten muss man noch, dass der Dateiname mit dem Funktionennamen übereinstimmt, aber das wusstest du bestimmt schon.

Hier auch ein einfaches Beispiel:

Code:
function [x]=ThomasAlgorithmus(a,b,c,d)
% a: Unter-Diagonalelemente
% b: Diagonalelemente
% c: Ober-Diagonalelemente
%
%
%       b1 c1  0  0  0 ...
%  T =  a2 b2 c2  0  0 ...
%        0 a3 b3 c3  0 ...
%        . . . . . . . . .
%
n = length(a);
x = zeros(n,1);

c(1) = c(1)/b(1);
d(1) = d(1)/b(1);
for i = 2:n
    c(i) = c(i) / (b(i)-a(i)*c(i-1));
    d(i) = (d(i)-a(i)*d(i-1))/(b(i)-a(i)*c(i-1));
end

x(n) = d(n);
for i= n-1:-1:1
    x(i) = d(i) - x(i+1) * c(i);
end
 


Wenn du deine einfache Funktion und das aufrufende Skript, die du geschrieben hast hier postest, dann kann dir sicherlich noch besser geholfen werden.

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

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 10.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.01.2010, 16:08     Titel:
  Antworten mit Zitat      
Hallo Leute!
Auch ich hab zurzeit hier "Funktionsfrust" Confused , daher schreibe ich in diese Thema und erstelle kein neues.
Folgendes Problem beschäftigt mich, ich kanns einfach nicht lösen. Mache da etwas falsch...
Ich möchte eine funktion schreiben, deren Eingangsparameter der Name eines wav-Files ist (z.B. 'sounddatei1') und als Ausgang
möchte ich die MFCC-werte dieser wav-Datei haben (als Matrix).
Die berechnungen an sich sind richtig bei mir, nur kann ich das nicht vernünftig verpacken (als Funktion).
Hierzu poste ich am besten den Funktionskopf und -ende:
Code:

function [MFCCs,c0]=training(wav)
% training: einlesen der Trainingssequenz
[y,fs]=wavread(wav);
.
.
.

c0=cep1(1,1:ff-2);
MFCCs=cep1(2:13,1:ff-2);
 


Wie gesagt, will die funktion mit z.B. "training('sounddatei1') aufrufen und als Ergebnis die MFCC-Matrix der Soundsequenz und deren c0 erhalten.
Könnt ihr mich da berichtigen oder zeigen, was ich bei der Funktuionsgestaltung falsch mache?
Danke im voraus!

MfG, AK.
Private Nachricht senden Benutzer-Profile anzeigen
 
muvik
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 27.11.07
Wohnort: Mannheim
Version: ---
     Beitrag Verfasst am: 31.01.2010, 13:44     Titel:
  Antworten mit Zitat      
Hi,

das, was du gepostet hast, sieht für mich richtig aus.
Bekommst du eine Fehlermeldung, oder was geht nicht richtig?

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

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 10.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.02.2010, 15:54     Titel:
  Antworten mit Zitat      
Vielen Dank muvik!
Aber nun hat sich das erledigt. Hab das auf etwas elegantere Art gelöst.
Jetzt habe ich aber noch ne Frage, aber leider ist es schon off-topic hier Sad
Ich habe nach Ausführung einer Anweisung Daten im Speicher.
Nun möchte ich diese dauerhaft speichern, ohne jedesmal die Anweisung erneut auszuführen.
Gibt es da eine Möglichkeit, die daten aus dem Speicher als feste werte zu speichern?

Danke im voraus!

AK
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.02.2010, 16:43     Titel:
  Antworten mit Zitat      
Hallo,

zur ursprünglichen Frage:

Zitat:
Operands to the || and && operators must be convertible to logical scalar values

hat seine Ursache nicht in Funktionen oder Skripten. Die Fehlermeldung besagt, dass rain und/oder humidity vektorwertig sind. Das ist bei || oder && nicht zulässig und (meiner Meinung nach) in einer if-Abfrage auch wenig sinnvoll. Wenn, dann müsste man all drumherum bauen.

Alternativen zu dauerhaft speichern:
- auf Festplatte: save
- so dass es beim nächsten Programmaufruf verfügbar ist: persistent.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
ibejustme
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 12.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.02.2010, 22:40     Titel:
  Antworten mit Zitat      
Hallo,

unter Vektor verstehe ich z.b.

Code:

humidity = [1 2 3];

rain = [1;2;3];
 


Wobei humidity ein Zeilenvektor und rain ein Spaltenvektor darstellt.
Da aber
Code:

humidity = 75;

rain = 1;
 


stellen sich beide Variablen nicht als Vektor dar bzw. sind meiner Meinung nach nicht vektorwertig und || bzw. && macht für mich durchaus Sinn.
Bitte um Berichtigung falls ich falsch liege Smile

Gruß & Danke für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.02.2010, 10:45     Titel:
  Antworten mit Zitat      
Hallo,

ich gebe dir da durchaus Recht. Allerdings ist meines Wissens die einzige Möglichkeit, diese Fehlermeldung zu erhalten, dass eben Vektoren (wie von dir beschrieben) beteiligt waren.

Was helfen würde: die komplette Funktion und den Funktionsaufruf zur Verfügung stellen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
pitaz
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 03.12.08
Wohnort: Zürich, Schweiz
Version: R2009a
     Beitrag Verfasst am: 13.01.2011, 16:47     Titel:
  Antworten mit Zitat      
Hi

Kann es sein, das in einer deiner Variablen manchmal nix drin sthet. wenn du nämlich leere vektoren hast, taucht das Problem auch auf.

Viele Grüsse, Phil
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 - 2025 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.