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

Allgemeiner Script-Teil auslagern?

 

DonCorleone
Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 19.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2015, 17:01     Titel: Allgemeiner Script-Teil auslagern?
  Antworten mit Zitat      
Hallo!

Ich bräuchte mal eure Expertise bezüglich meines matlab-Codes.
Ich habe mehrere Scripte die alle jeweils einen identischen Teil im Code enthalten. Dieser Code-Teil steckt immer in einer For-Schleife mit dem Index i. Jetzt dachte ich mir, dass man diesen Teil in eine externe Datei ("moments.m") als Funktion auslagern könnte:

Code:

function [moments] = moments(conc)
     
    % NaCl moments
    % ---------------------------------------------------------------------
    % ---------------------------------------------------------------------
    % if vector 'conc' contains 'NaN', set them zero
    conc(isnan(conc)) = 0;
    % 10s intervalls
    dt = 10;    
   
    % in case of fluorometer provide no data, just calculate and display
    % the moments of the remaining data
    if i ~= 5 & i ~= 6
        % µ0
        moments(1,i) = sum(conc)*dt; % [mmol*s/L]
     
        % µ1/µ0
        moments(2,i) = sum(conc.*seconds)/sum(conc); % [s]        

        % µ2c/µ0
        tmean = moments(1,i)/moments(2,i);
        moments(3,i) = sum(((seconds.*tmean).^2).*conc)*dt;        
        moments(3,i) = moments(3,i)/moments(1,i); % [s^2/m^2]

        % display moments for each measuring point
        disp('Tracer: NaCl')        
        disp(sprintf('µ0: %d',moments(1,i)))
        disp(sprintf('µ10: %d',moments(2,i)))    
        disp(sprintf('µ2c/µ0: %d',moments(3,i)))
        disp(sprintf('\n'))
    else
        disp('Tracer: NaCl')                
        disp('NO DATA')    
        disp(sprintf('\n'))        
    end

end
 


Aufrufen wollte ich das im jeweiligen script dann so:

Code:
[moments,ura_moments,peakdiff] = moments(conc,ura_conc)



Nur irgendwie funktioniert das nicht so recht... Die Fehlermeldung die ich bekomme ist folgende:

"Subscript indices must either be real positive integers or logicals."

Das heißt ja, dass er scheinbar nicht versteht, dass ich einen Teil einer For-Schleife in eine Function gepackt habe.

Wie behebe ich nun dieses Problem? Würde mich über Tipps freuen! Danke!
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: 27.08.2015, 17:20     Titel:
  Antworten mit Zitat      
Hallo,

Wenn eine Variable moments existiert, dann hat sie Priorität über der Funktion moments. Mit anderen Worten: man sollte zumindest innerhalb eines Projekts unterschiedliche Namen für Variablen und Funktionen verwenden.

Zudem versuchst du die Funktion mit zwei Argumenten aufzurufen und vier zurückzuholen, sie nimmt aber nur eines entgegen und gibt eines zurück.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 27.08.2015, 17:21     Titel:
  Antworten mit Zitat      
punkt 1: dein funktionsaufruf passt überhaupt nicht zur funktionsdefinition. anzahl der argumente stimmt nicht überein.
punkt 2. es wird irgendein i überprüft das aber garnicht existiert.
punkt 3. es wird mir irgendwas multipliziert das seconds heist. auch da erschliest sich mir nicht was das sein soll.

außerdem glaube ich nicht das das die vollständige fehlermeldung ist.
grüße
_________________

richtig Fragen
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.