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

Konvertierungsproblem mit Set Methode / Conversion to double

 

Lloyd Blankfein
Forum-Century

Forum-Century



Beiträge: 149
Anmeldedatum: 23.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.02.2011, 15:36     Titel: Konvertierungsproblem mit Set Methode / Conversion to double
  Antworten mit Zitat      
Hallo zusammen, ich erhalte beim Aufruf einer Set Methode eine Fehlermeldung die ich nicht nachvollziehen kann. Anbei eine Kopie meines Command Windows:
>> Momentum=Model(data,init,mavg)

Momentum =

Model handle

Properties:
Timeseries: [5112x4 double]
Performance_Indicator: [0 1 1 0]
mAVGRoll: 10
Performance: []
mAVG: []

Methods, Events, Superclasses

>> CalcPerformance(Momentum)
??? Error using ==> set
Conversion to double from Model is not possible.

Error in ==> Model>Model.CalcPerformance at 36
set(obj,'Performance',y);

Ich erstelle ein Objekt der Klasse Model, dieses wird mit dem Konstruktor auch richtig initialisiert. Dann rufe ich die Funktion CalcPerformance auf welche die Set Methode für die Klassenvariable Performance aufruft. Hier kommt es zum Crash. Ich verstehe die Fehlermeldung nicht, da ich der Variablen keinen speziellen Datentyp zugewiesen habe.

Code:

classdef Model < handle
    properties
        Timeseries
        Performance_Indicator
        mAVGRoll%#workdays mAVG will hav
        Performance
        mAVG
    end
   
    methods
        %% Constructor
        %Data: Any Timeseries e.g. Estoxx50 (Date | PX_LAST | )
        %Performance_Indicator: An array with elements either 0 or 1; E.
        %g.Timeseries is a nx4 array and Performance_Indicator=[0,1,1,0],
        %means the Performance will be calculated for columns 1 and 2 of
        %Timeseries
        function obj=Model(Data, Performance_Indicator, mAVGRoll)
            obj.Timeseries = sort(Data,'descend');%Timeseries starts with newest date
            obj.Performance_Indicator=Performance_Indicator;
            obj.mAVGRoll=mAVGRoll;
            %obj.Performance=CalcPerformance(obj);
        end
        %% CalcPerformance
        function CalcPerformance(obj)
            m=1;
            y=obj.Timeseries(:,1);%Date column
            for j=2:size(obj.Performance_Indicator,2)%Column size
                if obj.Performance_Indicator(j)==1
                    m=m+1;
                    for i=1:size(obj.Timeseries)-1
                        y(i,m)=obj.Timeseries(i,j)/obj.Timeseries(i+1,j)-1;
                    end
                end
            end
            %set(obj.Performance,y);
            set(obj,'Performance',y);
        end
        %% Set Performance
        function set.Performance(obj,y)
            obj.Performance=y;
        end
        %% Get Performance
        function y=get.Performance(obj)
            y=obj.Performance;
        end
        %% Moving AVG
        function CalcMovingAVG(obj)
            obj.mAVG=obj.Performance(:,1);%Date column
            for j=2:size(obj.Performance_Indicator,2)%Column size
                for i=1:size(obj.Performance)-obj.mAVGRoll
                    for k=1:obj.mAVGRoll
                        obj.mAVG(i,j)=obj.mAVG(i,j)+obj.Performance(i+k,j);
                    end
                end
            end
        end
    end
   
end
 


 


Vielen Dank für eure Hilfe!
Philipp
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

wenn ich es richtig sehe, macht deine set-Methode nichts "besonderes".
Warum erstellst du eine eigene set-Methode?

Welchen Datentyp hat mavg beim Aufruf?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Lloyd Blankfein
Themenstarter

Forum-Century

Forum-Century



Beiträge: 149
Anmeldedatum: 23.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.02.2011, 16:18     Titel:
  Antworten mit Zitat      
Hallo Harald,

mavg kann ein Skalar = 1x1-Array oder ein nx1-Array sein. Momentan ist es ein 1x1-Array mit Wert=10.
Ich nutze die Set Methode um, der Klassenvariablen Performance einen Wert (einen Array, welchen ich zuvor mit CalcPerforrmance berechne) zuzuweisen.
Wenn das auch anders geht, gerne.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

mein Versuch wäre:

Aufruf:
Code:
CalcPerformance(obj);

Methode set.Performance auskommentieren

letzte Zeile von Methode CodePerformance:
Code:
obj.Performance = y;


Ansonsten hilft vielleicht Debuggen?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Lloyd Blankfein
Themenstarter

Forum-Century

Forum-Century



Beiträge: 149
Anmeldedatum: 23.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.02.2011, 16:44     Titel:
  Antworten mit Zitat      
Das war meine ursprüngliche Lösung. Die Klassenvariable verliert den Wert wieder sobald die Funktion Calc Performance verlassen wird.

Das mir dem debuggen ist in MatLab ja so ne Sache: In die Set Methode komme ich nicht rein, auch wenn ich schrittweise debugge.

Was besonders nervt ist, dass MatLab die Execution bei Auftreten eines Fehlers komplett abbricht und nicht im Debugfenster stehen bleibt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Lloyd Blankfein
Themenstarter

Forum-Century

Forum-Century



Beiträge: 149
Anmeldedatum: 23.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.02.2011, 17:03     Titel:
  Antworten mit Zitat      
Hallo Harald,

Kommando zurück!!! Very Happy

Ich hatte meine Klasse ürsprünglich nicht als "handle Klasse" deklariert.
Jetzt wo ich mit einer Referenz auf die Klassenvariable arbeite, "bleibt" der Wert nach verlassen der Funktion logischerweise erhalten.
Zuor hatte ich mmit einer "value Klasse" gearbeitet. Allerdings hätte ich dann eine Fehlermeldung (Hinweis das kein return value vorhanden ist) erwartet.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.02.2011, 18:03     Titel:
  Antworten mit Zitat      
Hallo,

das erklärt natürlich manches Wink

Eine Fehlermeldung gibt es nicht, weil ja nichts falsch ist. Wenn man in eine "normale" MATLAB-Funktion eine Variable hineinsteckt, erwartet man ja auch nicht, dass sie sich verändert. Aber ja, ich verstehe deinen Punkt.

Zum Thema Debuggen noch: Es gibt "Step" (F10) und "Step In" (F11). Wenn du also wissen möchtest, was in der set-Routine vorgehst, solltest du in der Zeile des Aufrufs "Step In" verwenden.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.