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

Rückgabewert einer Klassenmethode

 

Marc

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2012, 09:39     Titel: Rückgabewert einer Klassenmethode
  Antworten mit Zitat      
Guten Morgen zusammen,

ich versuche mich gerade an der Klassenerstellung in Matlab. Da ich aus dem C-Bereich komme, ist die Matlab-Syntax noch sehr befremdlich für mich - versuche mich gerade etwas einzuarbeiten, aber auch Ergebnisse zu liefern.
Nach einigen weiteren _Herausvorderungen_, versuche ich gerade beim Aufruf einer function eines Klassenobjekts einen Rückgabewert zu erhalten.

Klasse:

Code:

classdef cBattery
   
    properties(SetAccess = private)
        % Speichergröße der Batterie in kWh (normiert)
        capacity
       
        % Wirkungsgrade
        % Laden
        etaIn = 0.9
        % Entladen
        etaOut = 0.9
       
        soc
    end    
   
    methods
        function B = cBattery(capacity, etaIn, etaOut)
            B.capacity = capacity;
            B.etaIn = etaIn;
            B.etaOut = etaOut;
           
            B.soc = 0;
        end
       
       
        %function [full, powerRet] = charge(B, powerIn, SOCmax)
        function full = charge(B, powerIn, SOCmax)
            powerRet = 0;
            full = 0;
           
            % Prüfen wie viel in Batterie geladen werden kann
            if(powerIn * B.etaIn < B.capacity * SOCmax - B.soc)
                %Wenn Batterie über gebügend Aufnahmekapazität verfügt, lade den gesamten Überschuss in die Batterie
                B.soc = B.soc + powerIn * B.etaIn;
            else
                %
            end  
        end
    end
   
end
 


Aufruf sieht so aus:

Code:

a = B.charge(19, 1);
B.soc
 


Das Objekt existiert. Eigentlich will ich mittels der charge-Methode zwei Werte zurückgeben. Um meinem Problem auf den Grund zu gehen, habe ich jetzt vorläufig auf eine Variable reduziert. Aber selbst die kommt nicht aus meiner Funktion zurück.

Statt dessen bekomme ich den Fehler:

Code:

??? Error using ==> charge
Too many output arguments.

Error in ==> TestSite at 3
a = B.charge(19, 1);
 


Ich stehe nun vor einem Rätsel, auch wenn ich annehme, dass der Fehler wohl recht lächerlich sein wird.

Für eure Hilfe möchte ich mich schon mal im Voraus bedanken.


Grüße
Marc


MatLabNooB
Forum-Guru

Forum-Guru


Beiträge: 262
Anmeldedatum: 27.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2012, 09:59     Titel:
  Antworten mit Zitat      
Hi,
hatte keine Probleme die von dir angesprochenen Operationen auszuführen:
Code:
B = cBattery(1, 0.9, 0.9)

B =

  cBattery

  Properties:
    capacity: 1
       etaIn: 0.9000
      etaOut: 0.9000
         soc: 0

  Methods

>> full = charge(B, 19, 1)

full =

     0

>> B.soc

ans =

     0


sieht für mich so aus, als hättest du den aufruf B = cBattery(1, 0.9, 0.9) noch mit den 2 Outputs gemacht?

gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Marc

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2012, 10:42     Titel:
  Antworten mit Zitat      
Hi MatLabNooB,

danke für deine schnelle Antwort.

Jetzt funktioniert es bei mir auch. Ich hatte den Workspace nicht geleert und scheinbar wird ein vorhandenes Objekt bei erneuter Instanziierung nicht überschrieben.
Ein clear hat das Problem beseitigt.

Das muss ich mir unbedingt merken: Arbeitsspeicher immer von Hand löschen.


Grüße
Marc
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 21.03.2012, 11:25     Titel:
  Antworten mit Zitat      
Marc hat Folgendes geschrieben:
Hi MatLabNooB,

danke für deine schnelle Antwort.

Jetzt funktioniert es bei mir auch. Ich hatte den Workspace nicht geleert und scheinbar wird ein vorhandenes Objekt bei erneuter Instanziierung nicht überschrieben.
Ein clear hat das Problem beseitigt.

Das muss ich mir unbedingt merken: Arbeitsspeicher immer von Hand löschen.


Grüße
Marc


Yepp das ist wichtig. Objekt zuvor zu zerstören. Wird im Matlab nicht automatisch beim Kompilieren aus dem Speicher entfernt. Destruktor muss manuell ausgeführt werden.
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.