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

komplexe Werte in Funktionen auslagern :/

 

iDexter
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 14.06.16
Wohnort: NRW
Version: R2016a
     Beitrag Verfasst am: 08.07.2017, 13:51     Titel: komplexe Werte in Funktionen auslagern :/
  Antworten mit Zitat      
Hallo zusammen

da ich nun aus einem Komplexen Programm, eine etwas übersichtlichere Programmierung und das mit Hilfe von Funktionen umsetzen soll, habe ich trotzdem noch ein paar Probleme Confused

Eine erste Statistik_Function habe ich schon erstellt die auch funktioniert.
Code:
function [m1_mean, m1_mean2, m1_var, m1_std, m1_var_2, m1_std_2,m2_mean, m2_mean2, m2_var, m2_std, m2_var_2, m2_std_2] = statistic_function(m1,m1_sum(v+1,:),m1_sum,m1_sum2,m2_sum,m2_sum2,N,m1);

         m1_mean = m1_sum./N;
         m1_mean2 = m1_sum2./N;
         m1_var = m1_mean2 - m1_mean.^2;
         m1_std = sqrt(m1_var);
         m1_var_2 = mean(m1_mean2) - mean(m1_mean).^2;
         m1_std_2 = sqrt(m1_var_2);
         
         m2_mean = m2_sum./N;
         m2_mean2 = m2_sum2./N;
         m2_var = m2_mean2 - m2_mean.^2;
         m2_std = sqrt(m2_var);
         m2_var_2 = mean(m2_mean2) - mean(m2_mean).^2;
         m2_std_2 = sqrt(m2_var_2);
         
         m1_sum(v+1,:) = m1_sum(v+1,:) + m1;
         
end


Weiter wollte ich aber noch in diese Function weitere Berechnung integrieren, wie folgende dinge:

Code:
v=floor(q/N);
     w=0:Ns-1;
       
        U=fft(m(1,:))/Ns;
        m1 = m(1,:)- (U(2)*exp(1i*2*pi*w/Ns)+ U(Ns)*exp(-1i*2*pi*w/Ns));

        [b]m1_sum(v+1,:)[/b] = m1_sum(v+1,:) + m1;
        m1_sum2(v+1,:) = m1_sum2(v+1,:) + m1.^2;
        m1_min(v+1,:) = min([m1_min(v+1,:) ; m1]);
        m1_max(v+1,:) = max([m1_max(v+1,:) ; m1]);


Leider habe ich bisher mehr kopfschmerzen als Erfolge Rolling Eyes

Matlab kann zum Beispiel mit der folgenden Variable nichts anfangen: "m1_sum(v+1,Smile " ! Sehr warscheinlich wegen den ganzen Klammern dazwischen, denkt die Funktion das es mehrere Variablen sind. Aber wie kriege ich das so umgesetzt das dies aus wirklich als Rückgabewert in der Funktion erkannt wird Sad . Wäre euch wirklich sehr dankbar wenn jemand dazu einen Tip hat :/

Viele Grüße

iDexter
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.07.2017, 14:09     Titel: Re: komplexe Werte in Funktionen auslagern :/
  Antworten mit Zitat      
Hallo iDexter,

Zitat:
da ich nun aus einem Komplexen Programm, eine etwas übersichtlichere Programmierung und das mit Hilfe von Funktionen umsetzen soll, habe ich trotzdem noch ein paar Probleme :?

Vielleicht beziehst Du Dich hier auf andere Threads von Dir. Denke daran, dass die Leser in diesem Forum eine Menge anderer Threads lesen und wohl keine Ahnung haben, wovon Du hier sprichst.

Zitat:
Eine erste Statistik_Function habe ich schon erstellt die auch funktioniert.
Code:
function [m1_mean, m1_mean2, m1_var, m1_std, m1_var_2, m1_std_2,m2_mean, m2_mean2, m2_var, m2_std, m2_var_2, m2_std_2] = statistic_function(m1,m1_sum(v+1,:),m1_sum,m1_sum2,m2_sum,m2_sum2,N,m1);
 

Ich glaube nicht, dass das funktioniert. Hier befindet sich ein Ausdruck in den Input-Argumenten: "m1_sum(v+1,:)". Inputs müssen aber die Namen von Variablen sein. Folglich stoppt der Code hier mit einer Fehlermeldung und es ist unklar, wieso Du meinst, dass er läuft.

Zitat:
Leider habe ich bisher mehr kopfschmerzen als Erfolge :roll:

Das kenne ich. Nachdem ich nun schon seit einighen Jahrzehnten programmiere, kann ich Dir eine gute Methode verraten, was man da macht:
Computer aus. Hinsetzen. Kaffee trinken. Kuchen ist auch gut. Oder einen Apfel.

Im ernst, ich will Dich hier nicht veralbern. Programming-Life-Balance...

Zitat:
Matlab kann zum Beispiel mit der folgenden Variable nichts anfangen: "m1_sum(v+1,:) "

Wann immer Du im Forum einen Error beschreibst, poste die komplete Fehlermeldung und nicht eine zusammengefasste Nacherzählung dessen, was Du von dem Fehler verstanden hast. Denn wenn Du die Meldung ganz verstanden hättest, könntest Du sie in den allermeisten Fällen auch selbst lösen.

Ich rate mal, dass "m1_sum(v+1,:)" in der Meldung vorkommt, dass sich das aber auf die Definition der Funktion bezieht (siehe oben) und nicht auf die Zeile, die Du meinst.

Zitat:
Sehr warscheinlich wegen den ganzen Klammern dazwischen, denkt die Funktion das es mehrere Variablen sind.

Nein, das ist nicht wahrscheinlich, sondern frei geraten. Raten bringt bei Matlab nichts. Stattdessen ist das gründliche Lesen der Fehlermeldung und der Dokumentation erforderlich, und dann zum Glück auch hilfreich.

Zitat:
Aber wie kriege ich das so umgesetzt das dies aus wirklich als Rückgabewert in der Funktion erkannt wird

Ich weiß nicht, was das bedeutet. Bereinige zuerst mal das oben genannte Problem und poste dann den gesamten (relevanten) Code sowie die Fehlermeldung, falls noch eine auftritt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
iDexter
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 14.06.16
Wohnort: NRW
Version: R2016a
     Beitrag Verfasst am: 08.07.2017, 14:45     Titel: komplexe Werte in Funktionen auslagern :/
  Antworten mit Zitat      
Also dann versuche ich mich da noch was ausführlicher auszudrücken.

Die Funktion sieht im Moment wie folgt aus:

Code:


function [m1_mean, m1_mean2, m1_var, m1_std, m1_var_2, m1_std_2,m2_mean, m2_mean2, m2_var, m2_std, m2_var_2, m2_std_2,m1_sum(v+1,:)] = statistic_function(v,m1_sum,m1_sum2,m2_sum,m2_sum2,N,m1);

         v=floor(q/N);

         m1_mean = m1_sum./N;
         m1_mean2 = m1_sum2./N;
         m1_var = m1_mean2 - m1_mean.^2;
         m1_std = sqrt(m1_var);
         m1_var_2 = mean(m1_mean2) - mean(m1_mean).^2;
         m1_std_2 = sqrt(m1_var_2);
         
         m2_mean = m2_sum./N;
         m2_mean2 = m2_sum2./N;
         m2_var = m2_mean2 - m2_mean.^2;
         m2_std = sqrt(m2_var);
         m2_var_2 = mean(m2_mean2) - mean(m2_mean).^2;
         m2_std_2 = sqrt(m2_var_2);
         
       
         m1_sum(v+1,:) = m1_sum(v+1,:) + m1;
         
end
 


Der folgende Code zeigt das Hauptprogramm

Code:
while(EOF ~= true)
   
    [EOF,In,i]=ReadMeasurementsFunction(FileName);
   
    m= In(:,1:2^15/Ns:end);  % subsampling to Ns samples per period
    m(1,:) =200.*m(1,:);     % voltage correction
    %v=0;
    if( i >= Einschwing);
        q = i- Einschwing;
%         if (q -l*N == 0)
%             v=v+1;
%             end
%         end

     v=floor(q/N);
     w=0:Ns-1;
       
        U=fft(m(1,:))/Ns;
        m1 = m(1,:)- (U(2)*exp(1i*2*pi*w/Ns)+ U(Ns)*exp(-1i*2*pi*w/Ns));

       
        [m1_mean, m1_mean2, m1_var, m1_std, m1_var_2, m1_std_2,m2_mean, m2_mean2, m2_var, m2_std, m2_var_2, m2_std_2,m1_sum(v+1,:)] = statistic_function(v,m1_sum,m1_sum2,m2_sum,m2_sum2,N,m1);
%         m1_sum(v+1,Smile = m1_sum(v+1,Smile + m1;
        m1_sum2(v+1,:) = m1_sum2(v+1,:) + m1.^2;
        m1_min(v+1,:) = min([m1_min(v+1,:) ; m1]);
        m1_max(v+1,:) = max([m1_max(v+1,:) ; m1]);

        I=fft(m(2,:))/Ns;
             
        m2_sum(v+1,:) = m2_sum(v+1,:) + m(2,:);
        m2_sum2(v+1,:) = m2_sum2(v+1,:) + m(2,:).^2;
        m2_min(v+1,:) = min([m2_min(v+1,:) ; m(2,:)]);
        m2_max(v+1,:) = max([m2_max(v+1,:) ; m(2,:)]);
                       
    end
end

Hier sollen später die einzelnen Berechnung in die Funktion ausgelagert werden, sprich: m1_sum2/m1_min/m1_max/m2_sum/m2_sum2 usw.

Wie sc hon oben beschrieben kriege ich aber folgende komplexe Ausdrückew nicht in die Funktion umgesetzt: m1_sum(v+1,Smile=

Als Fehlermeldung spuckt Matlab mir folgendes aus:


Error: File: statistic_function.m Line: 7 Column: 125
Unbalanced or unexpected parenthesis or bracket.

Error in measurements_heater_20170630 (line 61)
[m1_mean, m1_mean2, m1_var, m1_std, m1_var_2, m1_std_2,m2_mean, m2_mean2, m2_var, m2_std, m2_var_2,
m2_std_2,m1_sum(v+1,Smile] = statistic_function(v,m1_sum,m1_sum2,m2_sum,m2_sum2,N,m1);
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 10.07.2017, 12:31     Titel: Re: komplexe Werte in Funktionen auslagern :/
  Antworten mit Zitat      
Hallo iDexter,

Hast du Dir die Mühe gemacht meine Nachricht oder die Fehlermeldung von Matlab zu lesen? Beides wäre eine gute Idee.

Zitat:
kriege ich aber folgende komplexe Ausdrücke nicht in die Funktion umgesetzt: m1_sum(v+1,:)=

Da der gezeigte Code nicht korrekt ist, ist nicht klar, was er erreichen soll. Man müsste schon raten um den Zweck von invalider Syntax herauszubekommen. Bitte erkläre deshalb in solchen Fällen, was Du als Ergebnis möchtest.

Zitat:
function [m1_mean, m1_mean2, m1_var, m1_std, m1_var_2, m1_std_2,m2_mean, m2_mean2, m2_var, m2_std, m2_var_2, m2_std_2,m1_sum(v+1,:)] = statistic_function(v,m1_sum,m1_sum2,m2_sum,m2_sum2,N,m1);


Hier erscheint "m1_sum(v+1,:)" als Output-Argument. Man kann aber keine Ausdrücke als Output verwenden, sondern nur Variablen. Ich rate mal, Du meinst etwas wie:
Code:
function [m1_mean, m1_mean2, m1_var, m1_std, m1_var_2, m1_std_2,m2_mean, m2_mean2, m2_var, m2_std, m2_var_2, m2_std_2, m1_sum_v1] = ...
   statistic_function(v,m1_sum,m1_sum2,m2_sum,m2_sum2,N,m1);
   ... (Hier kommt Dein Code)
   m1_sum_v1 = m1_sum(v+1,:);
end


Schau Dir nochmal die Dokumentation zum Thema Funktionen an. Suche mit docsearch nach "functions". Dort wird erklärt, wie die Inputs einer Funktion aussehen müssen.

Wenn das Problem behoben ist, wirst Du wahrscheinlich die nächsten Fehler bekommen, dass "q" in der Unterfunktion nicht definiert ist.

Der Code ist sehr unübersichtlich. Statt Indices in the Variablen-Namen "m1" und "m2" zu verstecken, wären mehrdimensionale Arrays or Cell Arrays viel praktischer, da für m1 und m2 praktisch das gleiche berechnet wird.

Gruß, Jan
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.