goMatlab - Mein MATLAB Forum

Mein MATLAB Forum

 
Login  | Registrieren
Bücher:


Fachkräfte:
Testingenieur (w/m) Testframework für Simulink-basierte Echtzeitanwendungen
Pflege des MATLAB/Simulink-Testframeworks, Spezifizieren von Testkriterien, Testfällen und Testszenarien
dSPACE GmbH - Paderborn

Softwareentwickler MATLAB/Simulink (w/m)
Erarbeitung von Lösungen im Bereich der Schnittstelle zum Simulink-Modell und der Benutzeroberfläche von TargetLink
dSPACE GmbH - Paderborn

Testingenieur (w/m) Konfigurationswerkzeuge für Echtzeitsysteme
Einbinden von Simulink®-Simulationsmodellen, Verteilung der Simulationsmodelle auf Multicore- und Multiprozessorsysteme
dSPACE GmbH - Paderborn

Senior Software-Ingenieur/in Automotive
Entwicklung und Modellierung neuer Kundenfunktionen
ESG Elektroniksystem- und Logistik-GmbH - München

Ingenieur modellbasierte Entwicklung/Embedded Programmierung (w/m)
Organisation und Durchführung von Projekten, Koordination und Umsetzung von Entwicklungsaufgaben
dSPACE GmbH - Paderborn

weitere Angebote

Partner:




Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Dem Constructor Referenzen von anderen Objekten übergeben

 

Milo
Forum-Anfänger
Forum-Anfänger

Beiträge: 14
Anmeldedatum: 19.03.09
Wohnort: KA
Version: ---
     Beitrag Verfasst am: 24.08.2011, 11:46     Titel: Dem Constructor Referenzen von anderen Objekten übergeben
  Antworten mit Zitat      
Hallo,

ich habe hier Matlab2007b (RedHat) und versuche mich gerade ein wenig in die OOP von Matlab einzuarbeiten. Hierzu habe ich mir die Einführung angesehen. Mein erster Versuch war soweit auch zielführend. Ich habe eine Klasse für 3D-Punkte erstellt und der eine Methode zur Bestimmung des Abstandes zu einem weiteren Punkt gegeben:

Code:

classdef SpatialPoint
    properties
        x
        y
        z
        id  
    end
    methods
        function obj=SpatialPoint(ID, X, Y, Z)
            obj.id = ID;
            obj.x = X;
            obj.y = Y;
            obj.z = Z;
        end
       
        function dist=getDistance(this, point2)
            dist = sqrt( (this.x-point2.x)^2 + (this.y-point2.y)^2 + (this.z-point2.z)^2 );
        end
    end
end
 


Hiermit kann ich nun folgendes machen:
Code:

>> p=SpatialPoint(1, 10, 20, 30);
>> q=SpatialPoint(2, 10, 40, 30);
>> p.getDistance(q)

ans =

    20
 

Das funktioniert soweit.

Nun habe ich eine weitere Klasse definiert, die zum Instanziieren zwei Punktobjekte (f1 und f2) benötigt.

Code:

classdef SpatialEllipse
    properties
        f1
        f2
        plane
        a  
        id  
    end
    methods
        function obj=SpatialEllipse(id, f1, f2, plane, a)
            obj.id = id;
            obj.f1 = f1;
            obj.f2 = f2;
            obj.plane = plane;
            obj.a  = a;
        end

    end
end


mit diesem konnte ich dann meine beiden Punktreferenzen übergeben und ein Ellipsenobjekt erzeugen:

Code:
ellipse=SpatialEllipse(1, p, q, 5, 4)


... das ganze funktioniert jedoch nur solange, bis ich Matlab einmal neu gestartet habe. Wenn ich jetzt versuche, die Instanz zu erzeugen, erhalte ich eine Fehlermeldung:

Zitat:
??? Maximum recursion limit of 500 reached. Use set(0,'RecursionLimit',N)
to change the limit. Be aware that exceeding your available stack space can
crash MATLAB and/or your computer.

Error in ==> SpatialEllipse


Durch was wird diese Rekursion denn ausgelöst? An der Klasse habe ich nichts geändert. Werden die Klassen, die man erzeugt, noch woanders vorgehalten? Im Moment speichere ich sie in einem Unterverzeichnis von meinem Arbeitsverzeichnis. Ich frage deshalb, weil ich manchmal das Gefühl habe, dass Änderungen an den Klassen nicht direkt verfügbar sind sondern erst nach einem Neustart von Matlab. Gibts hier ggf. einen Befehl, den Klassen-Cache - sofern vorhanden - zu leeren?

Sollte ich mein Problem unzureichend beschrieben haben, bitte kurz Bescheid geben; ansonsten freue ich mich über einen Hinweis zur Problembewältigung! Wink

Schöne Grüße
Milo
_________________

Die Geodäten - Portal für Vermesser und Geoinformatiker || Freie Ausgleichungssoftware
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister
Forum-Meister

Beiträge: 5343
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ---
     Beitrag Verfasst am: 24.08.2011, 14:07     Titel:
  Antworten mit Zitat      
Hallo,

der Debugger sollte helfen, das Problem zu lösen.

Im übrigen wurde die Objektorientierte Programming in MATLAB mit 2008a grundlegend überarbeitet und verbessert; ich empfehle also den Umstieg auf eine neuere Version von MATLAB.

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

Forum-Anfänger
Forum-Anfänger

Beiträge: 14
Anmeldedatum: 19.03.09
Wohnort: KA
Version: ---
     Beitrag Verfasst am: 24.08.2011, 15:47     Titel:
  Antworten mit Zitat      
Hallo Harald,

Harald hat Folgendes geschrieben:
der Debugger sollte helfen, das Problem zu lösen.


Mein gezeigter Quellcode ist/war vollständig. Ich kann nicht erkenne, wie er mir weiterhelfen könnte.

Harald hat Folgendes geschrieben:
Objektorientierte Programming in MATLAB mit 2008a grundlegend überarbeitet


Ich habe diesen Beitrag gefunden, wo das selbe Problem beschrieben wird. Eine Lösung für Matlab 2007 scheint es demnach nicht zu geben bzw. die dort präsentierte finde ich eher umständlich.

Wobei ich mich frage, warum es funktioniert, solange ich Matlab nicht Neustarte...

Schöne Grüße
Milo
_________________

Die Geodäten - Portal für Vermesser und Geoinformatiker || Freie Ausgleichungssoftware
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister
Forum-Meister

Beiträge: 5343
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ---
     Beitrag Verfasst am: 24.08.2011, 17:57     Titel:
  Antworten mit Zitat      
Hallo,

das Verwenden des Debuggers hat nichts mit Vollständigkeit des Codes zu tun. Er ermöglicht dir nur, an bestimmten Stellen des Codes anzuhalten und nachzuvollziehen, was gerade vor sich geht.

Das mit dem Neustart ist mir allerdings auch schleierhaft. Vor allem: wie soll sich ein Neustart von MATLAB von einem kompletten Neustart des Rechners (so wie ich dich verstehe, geht es dann wieder?) unterscheiden?

Zusatz: ich habe es eben mit 2009a versucht (p=q=1) und hatte auch nach Neustart von MATLAB keine Probleme.

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

Forum-Anfänger
Forum-Anfänger

Beiträge: 14
Anmeldedatum: 19.03.09
Wohnort: KA
Version: ---
     Beitrag Verfasst am: 25.08.2011, 08:14     Titel:
  Antworten mit Zitat      
Hallo,

beim Neustart haben wir uns ggf. falsch verstanden. Wenn die Klasse in der Matlab-Instanz aufrufe, in der ich sie erstellt habe, funktioniert sie. Wenn ich Matlab zwischenzeitlich aus und wieder an mache, bekomme ich diese Fehlermeldung. Der Rechner (ein Server) wird hierzu nicht neugestartet.

Wenn Du p=q=1 setzt, funktioniert es. Instanzen mit primitiven Instanzvariablen gehen; Probleme machen nur (selbsterstellte) Objekte. Das scheint aber wirklich an der Version von Matlab zu liegen, wie der verlinkte Beitrag in meinem letzten Posting zumindest suggeriert.

Gruß Milo
_________________

Die Geodäten - Portal für Vermesser und Geoinformatiker || Freie Ausgleichungssoftware
Private Nachricht senden Benutzer-Profile anzeigen
 
Milo
Themenstarter

Forum-Anfänger
Forum-Anfänger

Beiträge: 14
Anmeldedatum: 19.03.09
Wohnort: KA
Version: ---
     Beitrag Verfasst am: 08.09.2011, 11:11     Titel:
  Antworten mit Zitat      
... in Matlab 2011 ist das genannte Problem nicht mehr vorhanden. Ursache war demnach wohl wirklich die Matlab-Version.

Schöne Grüße
_________________

Die Geodäten - Portal für Vermesser und Geoinformatiker || Freie Ausgleichungssoftware
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Options and Permissions
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2012 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.