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

Manueller Schleifendurchlauf per Button

 

severin
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 28.08.12
Wohnort: Leipzig
Version: ---
     Beitrag Verfasst am: 29.08.2012, 08:54     Titel: Manueller Schleifendurchlauf per Button
  Antworten mit Zitat      
Hallo und guten Morgen.

Ich bin Student der Angewandten Mathematik und arbeite derzeit an einem Projekt in Matlab. Leider hatte ich bislang nur ein Semester Matlab und in diesem war keine GUI Programmierung enthalten. Mein Professor wünscht sich nun allerdings ein paar kleine "Spielereien".

Ich habe mich bereits über mehrere Tage durchs Forum geforstet und konnte einiges selbst beheben, allerdings bin ich nun mit meinem Latein am Ende und hoffe, dass mir hier der ein oder andere einen Tipp geben kann.

Im Wesentlichen geht es um eine Berechnung des LR-Algorithmus. Dieser ist als reines Programm absolut funktionstüchtig. Nun wünscht sich mein Prof. allerdings eine Oberfläche, in der 3 Buttons zur Verfügung stehen.
Weiter, Ergebnis und Exit.

Der Ergebnis Button, sowie der Exit Button funktionieren ohne große Fehler. (Der Exit Button erzeugt einen Fehler, den ich sehr häufig im Netz gefunden habe. Ich konnte ihn allerdings ebenfalls nicht beheben, er ist aber auch so funktionstüchtig.)

Mein eigentliches Problem besteht darin, dass ich gern den "Weiter" Button klicken möchte, damit er einen weiteren Schleifendurchlauf erzeugt. Das Programm befindet sich im Anhang. Im Wesentlichen weiß ich, was ich eigentlich tun müsste(hoffe ich jedenfalls), kann es aber nicht implementieren, da mir die Ideen dazu fehlen.

Eine Matrix (A genannt) wird vorher über die Konsole manuell eingelesen.
Eigenartig ist dabei, das dies nur nach 3-4 Versuchen zu Beginn funktioniert. Sprich ich gebe sie ein und das Programm erzeugt einen Fehler, nehme ich eine weitere und danach wieder die alte, funktioniert das Programm.

Ich hoffe ich habe genug Details zusammengetragen, damit mir vielleicht jemand auf die Sprünge helfen kann Smile

Vielen Dank bereits im Voraus.


Die Ausgabe des "Weiter" Buttons soll im wesentlichen daraus bestehen:
Code:

    disp('-----------------')
    fprintf('Matrix Schritt: %d\n', t)
    disp('-----------------')
    A=R*L
 

Dieser befindet sich in der while-Schleife

lr.m
 Beschreibung:

Download
 Dateiname:  lr.m
 Dateigröße:  5.53 KB
 Heruntergeladen:  328 mal
lr.fig
 Beschreibung:

Download
 Dateiname:  lr.fig
 Dateigröße:  2.55 KB
 Heruntergeladen:  325 mal
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: 29.08.2012, 10:26     Titel: Re: Manueller Schleifendurchlauf per Button
  Antworten mit Zitat      
Hallo Severin,

Herzlich willkommen bei Matlab und im Forum!

Bitte poste immer die kompletten Fehlermeldungen, wenn Du im Forum über Fehler berichtest. Dann ist im Allg. ein Lösungsvorschlag viel einfacher. Fehlermeldungen sind immer ein Zeichen für ein ernstes Problem, und "funktioniert trotzdem" ist keine effiziente Programmier-Strategie.

Professoren wünschen sich niemals Spielereien, sondern immer nützliche Design-Features. ;-)

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 28.08.12
Wohnort: Leipzig
Version: ---
     Beitrag Verfasst am: 29.08.2012, 10:36     Titel:
  Antworten mit Zitat      
Hallo, danke für den Willkommens Gruß Smile

Dann fange ich doch direkt mal an. Der genaue Fehler, der beim klicken des Exit Buttons erscheint ist:

Code:

??? Error using ==> feval
Undefined function or method 'figure1_DeleteFcn' for input arguments of type 'double'.

Error in ==> gui_mainfcn at 96
        feval(varargin{:});

Error in ==> lr at 37
    gui_mainfcn(gui_State, varargin{:});

Error in ==> @(hObject,eventdata)lr('figure1_DeleteFcn',hObject,eventdata,guidata(hObject))

 
??? Error using ==> delete
Error while evaluating figure DeleteFcn
 


Weiterhin ist nach manueller Eingabe der Matrix und ausführung vom Button "Ergebnis" der Fehler:

Code:

??? Attempted to access Aalt(0,0); index must be a positive integer or logical.

Error in ==> lr>pushbutton1_Callback at 117
    err=abs(1-(Aalt(n,n)/A(n,n)));

Error in ==> gui_mainfcn at 96
        feval(varargin{:});

Error in ==> lr at 37
    gui_mainfcn(gui_State, varargin{:});

Error in ==> @(hObject,eventdata)lr('pushbutton1_Callback',hObject,eventdata,guidata(hObject))

 
??? Error while evaluating uicontrol Callback
 


Gebe ich allerdings die Matrix erneut ein, funktioniert es, allerdings auch nicht immer oO
Private Nachricht senden Benutzer-Profile anzeigen
 
Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 29.08.2012, 13:16     Titel:
  Antworten mit Zitat      
Also die zweite Fehlermeldung ist eindeutig :

Code:
??? Attempted to access Aalt(0,0); index must be a positive integer or logical.


wenn du bei dir eine Matrix mit der Größe 0 hast dann ist bei dir

Code:
n=size(A,1);        %Gibt Zeilenanzahl an


n=0;

nachdem bei Matlab der erste Wert in einer Matrix bei 1,1 steht (Gegensatz z.B.: bei C# Matrix (Array) 0,0) kann Matlab auf diese stelle nicht zugreifen.
Private Nachricht senden Benutzer-Profile anzeigen
 
severin
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 28.08.12
Wohnort: Leipzig
Version: ---
     Beitrag Verfasst am: 29.08.2012, 14:29     Titel:
  Antworten mit Zitat      
Das verstehe ich schon. Aber ich deklariere doch eine Matrix A,bevor ich das Programm ausführe. Die Matrix ist auch aufrufbar. Er übernimmt diese allerdings nicht von beginn an in die lr.fig. Erst nachdem ich eine weitere Matrix eingebe lässt sich das Programm ausführen.
Ich stehe halt bei diesem Fehler auf dem Schlauch :/
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: 29.08.2012, 16:21     Titel:
  Antworten mit Zitat      
Hallo severin,

In solchen Fällen ist der Debugger eine sehr gute Hilfe. Entweder lasse Matlab beim Auftreten eines Fehlers stoppen, so dass du Dir die Werte der Variablen anzeigen lassen kannst - dazu im CommandWindow eingeben:
[code]dbstop if error[code]
Oder setze einen Breakpoint an den Anfang deines Programms und gehe dann Zeile für Zeile durch den Code um zu sehen, was genau wo passsiert.
Mit etwas Übung wird das Debuggen dann schnell zur sher handlichen und nützlichen Hilfe beim Programmieren.

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 28.08.12
Wohnort: Leipzig
Version: ---
     Beitrag Verfasst am: 29.08.2012, 16:34     Titel:
  Antworten mit Zitat      
Ok danke für den Hinweis. Damit habe ich ein Problem schonmal behoben bekommen. Ich setzte A einfach direkt im Command Window als globale Variable und danach erzeuge ich meine Matrix. Gibt es dafür vielleicht noch eine Möglichkeit dies mit ins Programm zu integrieren, damit ich sie nicht jedesmal beim Programmstart global setzen muss?

Der Fehler im Exit lautet im aktuellen Fall übrigenns:
Code:

Allerdings wird er mir in der gui_mainfcn.m angezeigt :/

Gruß Patrick
Private Nachricht senden Benutzer-Profile anzeigen
 
Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 29.08.2012, 20:52     Titel:
  Antworten mit Zitat      
Hey,
Zitat:

Code:

??? Error using ==> feval
Undefined function or method 'figure1_DeleteFcn' for input arguments of type 'double'.

Error in ==> gui_mainfcn at 96
        feval(varargin{:});

Error in ==> lr at 37
    gui_mainfcn(gui_State, varargin{:});

Error in ==> @(hObject,eventdata)lr('figure1_DeleteFcn',hObject,eventdata,guidata(hObject))

 
??? Error using ==> delete
Error while evaluating figure DeleteFcn
 



ist eigentlich ganz einfach. Du hast sicherlich im GUIDE eine figure1_DeleteFcn definiert, die du im m-File aber wieder gelöscht hast. Das geht natürlich nicht und führt beim schließen der GUI zu der Fehlermeldung...

Warum lässt du nicht einfach den User in deiner GUI eine Matrix definieren? Alles was du im Command Window machen kannst kannst du auch in deiner GUI. Alternativ kannst du natürlich den User im Command Window eine Variable definieren lassen die du mit deiner GUI öffnen kannst.
z.B.
Code:

A % ist deine Variable im Matlab WB
% dann einfach im Command Window
lr(A);
% in deiner Opening fcn  eingeben (vor guidata)
handles.A = varargin{1};

% in deinen Callbacks kannste dann mit
A = handles.A; % oder gleich mit handles.A rechnen
 

Globale Variablen würde ich immer vermeiden...

Greetings
Private Nachricht senden Benutzer-Profile anzeigen
 
severin
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 28.08.12
Wohnort: Leipzig
Version: ---
     Beitrag Verfasst am: 30.08.2012, 13:16     Titel:
  Antworten mit Zitat      
Hallo.
Danke Marco für den Hinweis, jetzt funktioniert der Exit Button. Habe die gui einfach neu erstellt. Ich glaube ich erinnere mich auch noch daran wie ich den Tag des Mainframes geändert habe, darin lag wohl der Fehler. Jedenfalls funktioniert es nun Wink

Jetzt sitze ich leider aber immernoch qualmend über dem Problem des manuellen Schleifendurchlaufes Sad
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 - 2025 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.