Verfasst am: 23.02.2011, 15:36
Titel: Konvertierungsproblem mit Set Methode / Conversion to double
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)
>> 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.Timeseriesis 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 functionset.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
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 ;)
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.
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 ;)
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.
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 ;)
Einstellungen und Berechtigungen
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
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.