Fehler beim Plotten von Daten in neueren Matlab Versionen
gast123
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 30.10.2013, 10:57
Titel: Fehler beim Plotten von Daten in neueren Matlab Versionen
Hi,
ich verwende einen in 2006 geschriebenen Matlab Code zum Fitten von exp. Daten, der in Matlab 2007 ohne Fehlermeldung funktioniert, aber nicht in Matlab 2009 and neueren Versionen. Vermutlich hat sich zwischenzeitlich etwas in der Laufzeitumgebung und den GUIs geändert. Ich komme allerdings nicht dahinter, was es ist. Ich denke es hat etwas mit der Art und Weise zu tun, wie man Structs definiert und verwendet.
Folgenden Fehler erhalte ich:
"Illegal right hand side in assignment. Too many elements."
der Code ist so nicht reproduzierbar, da schon nicht klar ist, was Fit() ist.
Damit ist es auch schwierig, hier weiterzuhelfen.
In welcher Zeile tritt das Problem denn genau auf?
Grüße,
Harald
gast123
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 30.10.2013, 13:43
Titel:
Hallo,
ja, der gesamte Code in meinem Frontend umfasst 1000 Zeilen und hierbei werden auch wiederum andere Funktionen aufgerufen. Deshalb nur dieser kleine Ausschnitt.
Fit() ist eine Funktion der Signatur [coeffizients, fitdata] = fit(function, p_vector, xvalues, yvalues, lbound, ubound, weight, options).
das @ deutet auf Objektorientierung hin. Kopiere doch bitte mal die komplette Fehlermeldung, also inklusive Stack Trace.
Mit R2008a wurden die Möglichkeiten zur objektorientierten Programmierung in MATLAB grundlegend überarbeitet. Es ist durchaus möglich, dass dir das Probleme bereitet.
Allerdings habe ich mich vor 5 Jahren das letzte Mal mit dieser Problematik beschäftigt und habe das nicht mehr wirklich in Erinnerung. Den Code nicht vor sich zu haben macht es auch nicht wirklich leichter ;)
Falls der Autor des Programms dich also nicht unterstützen kann, wäre meine Empfehlung, beim Technischen Support von MathWorks nachzufragen.
Grüße,
Harald
gast123
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 01.11.2013, 21:28
Titel:
Hallo,
der Hinweis ist schon mal gut! Mit RMatlab2009a funktioniert das Programm nämlich nicht mehr. In 2007 aber schon. Eine 2008er Version liegt mir leider nicht vor, aber es könnte durchaus sein, dass genau mit dieser Version (möglicherweise wegen der überarbeiteten Objektorientierung) der Fehler aufzutreten beginnt.
Der Autor des Codes ist leider nicht mehr zu kontaktieren (wurde 2006 geschrieben) und die Dokumentation ist auch sehr dürftig.
Hier die komplette Fehlermeldung:
??? Illegal right hand side in assignment. Too many elements.
Error in ==> Frontend>do_fit at 749
[handles.fitfunctions{fitfunction_index}.param_vector, handles.data_fit, exitflag, output] = ...
Error in ==> Frontend>fit_button_Callback at 673
do_fit(hObject, handles);
Error in ==> gui_mainfcn at 96
feval(varargin{:});
Error in ==> Frontend at 42
gui_mainfcn(gui_State, varargin{:});
??? Error while evaluating uicontrol Callback
Wie komme ich an die Stack Trace? Ich konnte nur mittels "lasterror" Informationen zum letzten Fehler erlangen:
mit Stack Trace meinte ich die Fehlerkette wie von dir beschrieben.
Bitte jetzt dasselbe auch nochmal für den Fehler, den du erhalten hast, wenn du die linke Seite durch output = ... ersetzt.
Desweiteren sollte es bei dir ein Verzeichnis @Fit geben, und in diesem Verzeichnis eine minsearchbnd_res.m . Öffne diese Datei mal und schaue, was Code Analyzer dazu sagt (das grüne/orange/rote Quadrat rechts oben im Editor).
Zudem kannst du mit dem Debugger und "Step In" versuchen herauszufinden, wo genau der Fehler auftritt. Soll heißen: wird die minsearchbnd_res noch durchlaufen und tritt der Fehler erst auf, wenn MATLAB versucht, aus dieser Funktion zurückzuspringen, oder tritt er tatsächlich schon beim Aufruf auf?
Am besten wäre natürlich, wenn du das gesamte Projekt zur Verfügung stellen könntest, aber ich vermute mal, dass das nicht möglich sein wird.
Grüße,
Harald
gast123
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 02.11.2013, 13:01
Titel:
Hallo,
wenn ich das durch output = ... ersetze, dann erhalte ich folgende stack trace:
??? Attempt to reference field of non-structure array.
Error in ==> Frontend>do_fit at 754
set(info_handles.fit_info_functioncalls, 'String', output.funcCount);
Error in ==> Frontend>fit_button_Callback at 673
do_fit(hObject, handles);
Error in ==> gui_mainfcn at 96
feval(varargin{:});
Error in ==> Frontend at 42
gui_mainfcn(gui_State, varargin{:});
??? Error while evaluating uicontrol Callback
In meinem Verzeichnis/Ordner gibt es eine Fit.m und in dieser wiederum eine Funktion
na, da ist doch eine entscheidende Information: wenn du output =... schreibst, kommt es erst später zu einem Fehler, weil natürlich output jetzt eine andere Bedeutung hat.
Bitte setze einen Haltepunkt in Zeile 749 und versuche Aufrufe wie:
Das entscheidende ist, ob es damit in Zeile 749 zu Fehlern kommt. Folgefehler durch die Abänderung sind erst mal Nebensache.
Du arbeitest ja mit einer GUI. Ist wirklich sichergestellt, dass genau dieselben Abläufe unter 2006 funktioniert haben und jetzt nicht mehr?
Grüße,
Harald
gast123
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 02.11.2013, 14:00
Titel:
Ergänzend zu deiner Frage von vorhin zum Debugging: Ich habe jetzt mal Haltepunkte in die Fehlerzeile und davor gesetzt. Wenn ich dann "Step In" verwende, wird zunächst die Variable fitmethod im Workspace hinzugefügt, und beim nächsten "Step In" wird dann die Fit.m aufgerufen und ich lande in einer Zeile innerhalb der Funktion, die minsearchbnd_res verwendet.
gast123
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 02.11.2013, 14:09
Titel:
Ja, der Code ist 2006 geschrieben worden und in Matlab 2007 funktioniert dies. Ich verwende genau den gleichen Ordner mit all den Programmen.
Ich habe jetzt mal deine zwei Vorschläge für den Output umgesetzt, und es hat sich etwas getan!!!
Erster Vorschlag führt zu einer neuen Fehlerkette:
??? Undefined variable "output" or class "output.funcCount".
Error in ==> Frontend>do_fit at 759
set(info_handles.fit_info_functioncalls, 'String', output.funcCount);
Error in ==> Frontend>fit_button_Callback at 673
do_fit(hObject, handles);
Error in ==> gui_mainfcn at 96
feval(varargin{:});
Error in ==> Frontend at 42
gui_mainfcn(gui_State, varargin{:});
??? Error while evaluating uicontrol Callback
Zweiter Vorschlag produziert keine Fehler mehr und es wird tatsächlich etwas gefittet!
Was ist nun passiert? Liegts an diesem komischen "Doppel-Struct"?
Was ist nun passiert? Liegts an diesem komischen "Doppel-Struct"?
Schwer zu sagen, was da nun genau dahintersteckt, aber anscheinend schon.
Schau dir doch mal an, wo das in dem GUI-Code noch auftaucht, und versuche es ggf. durch etwas "ähnliches" zu ersetzen. Ich gehe ja mal nicht davon aus, dass der Autor des Programms das da zum Spaß reingeschrieben hat.
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.