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

Fehler beim Plotten von Daten in neueren Matlab Versionen

 

gast123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.10.2013, 10:57     Titel: Fehler beim Plotten von Daten in neueren Matlab Versionen
  Antworten mit Zitat      
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."


Dieser bezieht sich auf folgende Codezeilen:

Code:
fitmethods = Fit();
fitmethod = fitmethods{2}.func;
[handles.fitfunctions{fitfunction_index}.param_vector, handles.data_fit,        
exitflag, output] = ...fitmethod((@(A,z)fitfunction(const,A,z)), fitparams, xdata,
ydata, lb_vector, ub_vector, weightdata ,options);



Danke!


Harald
Forum-Meister

Forum-Meister


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

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
Private Nachricht senden Benutzer-Profile anzeigen
 
gast123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.10.2013, 13:43     Titel:
  Antworten mit Zitat      
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).

Der Fehler tritt auf in

Code:

[handles.fitfunctions{fitfunction_index}.param_vector, handles.data_fit,        
exitflag, output] = ...fitmethod((@(A,z)fitfunction(const,A,z)), fitparams, xdata,
ydata, lb_vector, ub_vector, weightdata ,options);


Ich finde es seltsam, dass es in Matlab 2007 funktioniert, in neueren Versionen aber nicht.
 
Harald
Forum-Meister

Forum-Meister


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

das Problem ist nur, dass es schwierig ist zu erkennen, was dieser Ausschnitt überhaupt macht, da er ja von anderem Code abhängt.

Insbesondere interessant wäre: was ist der Wert von fitmethod in dieser Zeile?

Ist der Zeilenumbruch im Programm korrekt, d.h. kein Zeilenumbruch außer wo angegeben?
Code:
[handles.fitfunctions{fitfunction_index}.param_vector, handles.data_fit, exitflag, output] = ... <Zeilenumbruch>
fitmethod((@(A,z)fitfunction(const,A,z)), fitparams, xdata, ydata, lb_vector, ub_vector, weightdata ,options);


Wird der Code jeweils unter demselben Betriebssystem ausgeführt?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.10.2013, 18:05     Titel:
  Antworten mit Zitat      
Hallo,

der Zeilenumbruch ist im Code wo er sein muss!

Inwiefern kann es mit dem Betriebssystem zusammenhängen?
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Inwiefern kann es mit dem Betriebssystem zusammenhängen?

Bei unterschiedlichen Betriebssystemen gibt es manchmal Probleme mit Zeilenumbrüchen oder anderen Sonderzeichen.

Bitte die Frage nach fitmethod beantworten.

Setz auch mal einen Haltepunkt in die Zeile und versuche, ob derselbe Aufruf klappt, wenn du die linke Seite durch
Code:

ersetzt. Versuche dann, dich dem tatsächlichen Aufruf "anzunähern" um zu sehen, woran es genau liegt.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.10.2013, 10:20     Titel:
  Antworten mit Zitat      
Hallo,

ich habe einen Haltepunkt in die Zeile gesetzt. Als Wert wird mir im Workspace für fitmethod "@Fit/minsearchbnd_res" angezeigt.

xdata, ydata und weightdata sind 170x1 doubles, fitparams, ub_vector und lb_vector 1x25 doubles.

Wenn ich die linke Seite nur durch
Code:
ersetze, erhalte ich weiterhin eine Fehlermeldung, allerdings eine andere:

"Attempt to reference field of non-structure array."

Dieser Fehler bleibt auch bestehen, wenn ich nach und nach mich dem tatsächlichen Aufruf annähere.
 
Harald
Forum-Meister

Forum-Meister


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

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
Private Nachricht senden Benutzer-Profile anzeigen
 
gast123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2013, 21:28     Titel:
  Antworten mit Zitat      
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:


message: 'Error while evaluating uicontrol Callback'
identifier: 'MATLAB:tooManyRightElements'
stack: [0x1 struct]



vg
 
Harald
Forum-Meister

Forum-Meister


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

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
Private Nachricht senden Benutzer-Profile anzeigen
 
gast123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2013, 13:01     Titel:
  Antworten mit Zitat      
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
Code:
function [coeffizients, fitdata, exitflag, output] = minsearchbnd_res(func, p_vector, xvalues, yvalues, lbound, ubound, weight, options)
Vor Aufrufen dieser Funktion werden noch folgende Structs definiert:
Code:

 % Bounded fit with method taken from www.mathworks.com
     minsrchbnd_res.name       = 'fminsearch (bound, weighted)';
     minsrchbnd_res.func       = @minsearchbnd_res;
     minsrchbnd_res.bounds     = 1;
     minsrchbnd_res.weight     = 1;


Ist es das, was du meinst oder sollte es tatsächlich noch eine minsearchbnd_res.m geben?

vg
 
Harald
Forum-Meister

Forum-Meister


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

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:
Code:
[a, b, c, d] = ...

Code:
[a, handles.data_fit, exitflag, output] = ...


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
Private Nachricht senden Benutzer-Profile anzeigen
 
gast123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2013, 14:00     Titel:
  Antworten mit Zitat      
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: ---
     Beitrag Verfasst am: 02.11.2013, 14:09     Titel:
  Antworten mit Zitat      
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"?
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.