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

Optionale Speicherung von Klassen inkl. Dependent Properties

 

matlabix
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 19.01.16
Wohnort: ---
Version: 2015-b
     Beitrag Verfasst am: 24.03.2016, 11:04     Titel: Optionale Speicherung von Klassen inkl. Dependent Properties
  Antworten mit Zitat      
Guten Tag an Alle,

leider bin ich kein Informatiker und bekomme die Informationen aus diversen Threds, MatLab-Dokus und eigenen Versuchen mitlerweile nicht mehr sortiert und bitte deswegen um Hilfe:

Ausgangssituation:
Ich bastel mir ein OOP Auswertungstool von Zeitreihen. Dabei manipuliere und verrechne ich Daten zweier Jahre, die an ca. 300 Datenquellen erhoben wurden und zeitlich aufgelöst sind. Das Programm ist so ausgelegt, dass eine effiziente, individuelle Berichterstellung ermöglicht wird. Das erreiche ich gegenwärtig über eine große Anzahl von Dependent-Properties, die ja nur auf Anfrage berechnet werden. Das klappt bislang auch ausgeprochen gut.

Mein Problem:
Beim Prototyping werden die Testzeiten neuer, übergeordneter Klassen unerträglich lang. Mit übergeordnem Klassen meine ich Klassen, die aus diversen, konkret instanzierten Objekten Properties weiter nutzt um somit die Daten weiter zu verdichten - keine Super-, bzw. Elternklassen!

Meine Idee:
Ich würde gerne mit den "fertigen" Klassen bereits eine Vorberechnung starten und das gesamte, instanzierte Objekt inkl. aller durch das Objekt aufgerufener Objekte speichern, sodass ich zum Prototyping auf die gespeicherten Objekt zugreifen kann.

[b]Woran ich hänge:[/b]

- Bei einer simplen Speicherung von Objekten (z. B. durch save('bla.mat','objekt') ) werden leider keine Dependent-Properties gespeichert, somit habe ich leider nix gewonnen.
- Es scheint die Möglichkeit zu geben in jeder Klasse eine "saveobj" - "loadobj" -Mehtode zu implementieren. Allerdings wird mir der Sinn noch nicht wirklich klar...
- Das zu speichernde Objekt als Struct speichern. Allerdings verliere ich dabei die im Objekt aufgerufenen Fremdobjekte...
- Ein Verlust der "Berechnung-On-Demant" Funktion des Programms durch eine simple umdeklaration der Properties ist keine wirkliche Option

Was die Lösung sein könnte:
Ich habe das Gefühl, dass durch die saveobj-Methode in jeder Klasse eine individuelle Speicherung der Klasse ermöglicht wird. Vermutlich muss ich für meinen Fall eine jeweilige Speicherung als Struct vornehmen (bei vererbten Klassen kann man die ja irgendwie zu einergemeinsamen .mat Datei zusammenführen).

HAT JEMAND IDEEN, WIE ICH DA ZU EINER LÖSUNG KOMME?

Ein Code-Beispiel habe ich mir bislang gespart, weil ich glaube, dass ich eher ein Verständnissproblem habe. Sollte das mit Code aber verständlich sein, reiche gerne einen vereinfachten nach.

Schon mal vielen Dank für eure Hilfe und dran denken: Der dümmste Programmierer hat die dicksten Programme! (Meins ist riesig!)

Schöne Ostern!
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: 24.03.2016, 15:25     Titel: Re: Optionale Speicherung von Klassen inkl. Dependent Proper
  Antworten mit Zitat      
Hallo matlabix,

OOP in Matlab ist nicht für High-Perfomance-Computing gedacht. Aber was bedeutet "unerträglich lange"? Müssen die Daten in Echtzeit bearbeitet werden und es geht um Millisekunden? Oder legst Du nach dem Programmstart erstmal eine Kaffeepause ein?
Wo wird die Zeit genau verbracht? Was sagt der Profiler dazu? Vielleicht hast Du ja nur irgendwo eine Pre-allocation vergessen und das Erstellen harmloser Arrays geschieht mit iterativem Wachstum, was enorm viele Resourcen vergeudet.

Was genau bedeutet "riesig"? Manche User sind von Programmen mit 10'000 Zeilen schon beeindruckt, andere finden alles unterhalb von 200'000 Zeilen noch gut überschaubar.

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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 19.01.16
Wohnort: ---
Version: 2015-b
     Beitrag Verfasst am: 24.03.2016, 16:00     Titel:
  Antworten mit Zitat      
Hey Jan,

danke für die fixe Antwort!
Das mit dem "riesig" sollte selbstironisch meinen, dass ich mir ohne weiteres (bei gleicher Funktion) einige Zeilen Code sparen könnte...

nun zum wichtigen:
Es kommt bei dem Programm, sobald es denn fertig ist, nicht direkt auf die Geschweindigkeit an. Selbst wenn es eine Woche lang im Hintergrund läuft, wäre das kein Problem.
Was nach meiner Analyse sehr lange dauert, ist das extrahieren der Daten aus einer SQL-Datenbank und die Zeitreihenverrechnung (Synchronisierung der nicht äquidistanten Zeitreihen über MatLab-timeseries-Objekte, Filterung, Grenzwertkontrollen etc.). Besagte Zeitreihenverrechnungen treten derart häufig auf, dass ich ohnehin nur noch von Berechnungen "über Nacht" ausgehe. Und genau das ist mein Problem. Ich würde mir gerne z. B. ein Skript schreiben, dass mir einige Objekte inzanziert, "vorberechnet" und speichert, sodass ich am Folgetag nur noch mit gespeicherten Daten der benötigten ca. 240 Objekten arbeite.

Mein Problem ist der Punkt SPEICHERN der Objekte inkl. der "Dependent-Poperties"... einfach nur das Objekt speichern hilf mir da ja leider nicht ernsthaft weiter.

Und du hast recht, mit C++ wäre ich besser beraten... Wäre ich nur Informatiker.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

dependent - Properties werden nie abgespeichert, auch nicht wenn die Objekte im Workspace sind. Es wird bei jeder Abfrage (also z.B. auch bei der Anzeige im Command Window) die get-Methode aufgerufen. Warum sollte die Information also mit gespeichert werden, wenn sie ohnehin neu ausgewertet wird?

Wenn du die Eigenschaften abspeichern willst, dann stellt sich mir die Frage: warum müssen sie dependent sein?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabix
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 19.01.16
Wohnort: ---
Version: 2015-b
     Beitrag Verfasst am: 24.03.2016, 16:48     Titel:
  Antworten mit Zitat      
Hey Harald,

genau das ist das Problem: Wenn das Programm fertig ist, interessiert nur der auswertende Plot ganz bestimmter Variablen, die sich der Anwender aussuchen kann. Über den Aufbau mit get-Methoden wird also immer nur das absolut notwendige berechnet.

Bei meinem Weg dahin werde ich allerdings noch einige Test laufen lassen müssen, für die ich noch nicht weiß, welche Variablen wichtig sind. Und wie du schon sagst, ist die Berechnung über die jeweilige get-Methode bei jedem Aufruf der dependent properties (Attribute heißt das oder?) notwendig. Das führt dann direkt zu einer Stunde oder mehr Pause, was bei mehreren Tests, insbesondere im letzten Test-Schritt, der graphischen Darstellung ziemlich inakzeptabel ist.

Ich suche jetzt nach einer Möglichkeit das Programm an sich, sprich die get-Methoden, für die Testzwecke nicht ändern zu müssen, mir aber die ewige Neuberechnung zu sparen. -> mehr Tests möglich -> besseres Endergebnis.

Danke an dieser Stelle schon mal für das Interesse an diesem Thread Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.03.2016, 20:43     Titel:
  Antworten mit Zitat      
Hallo,

mit anderen Worten, der gleiche Code soll sich einmal so und einmal anders verhalten? Das dürfte schwierig werden.

Man könnte in den get-Methoden höchstens etwas einbauen wie eine interne Abfrage:
Code:
if (Testmodus)
% Daten laden
else
% Berechnungen
end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabix
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 19.01.16
Wohnort: ---
Version: 2015-b
     Beitrag Verfasst am: 29.03.2016, 08:35     Titel:
  Antworten mit Zitat      
Hey Harald,

das wäre in der Tat eine Variante. Ansonsten muss ich mir die Variablen, die ich speichern möchte, per zusätzlichem Skript rausholen. Ich werde mich aber nochmal dahinterklemmen, was das mit dem override der save-Funktion in den einzelnen Objekten auf sich hat. Es muss irgendwie eine elegantere Variante geben...

Code:


Besten Dank nochmal!
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.