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

Subscript indices must either be real positive integers...

 

A346
Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 22.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2018, 15:22     Titel: Subscript indices must either be real positive integers...
  Antworten mit Zitat      
Ich habe folgendes Problem:

Zunächst der Code:
Code:

k=0;  
  switch CONF
     
      case 1
          k=3;
           while(WIND>=data(5,k))
               
           
           if(WIND==data(5,k))
               b=0;
               break;
           else
               b=1;
           end
            k=k+4;    
                 
           end
           k;
         
      case 2
          k=23;
           while(WIND>=data(5,k))
             
               if(WIND==data(5,k))
                  b=0;
              break;
              else b=1;
           end
                k=k+4;
           end
           k;
         
  end
 
if(b==0)
WIND_chart=data(5,k);                         <-----------------------Problem
else
 
WIND_chart_1=data(5,k-4);
WIND_chart_2=data(5,k);
end
 


Zur Erklärung:
data ist eine excel Tabelle, in der verschiedene Daten gespeichert sind.
Der Code läuft und macht genau das, was er soll.

Zum Problem:
Ich habe den Code in den App designer eigenfügt, da dieser ein Ergebnis liefert, welches nach drücken des Butons in einem schriftfeld angezeit werden soll.
Wenn ich alles mittel Callback eingefügt habe, und ich drücke auf run, dann kommt:
"Subscript indices must either be real positive integers or logicals."
Das Problem taucht dort auf, wo die Markierung ist.
k sind natürliche Zahlen zwischen 3 und 50, WIND_chart sind ganze Zahlen zwischen -20 und 20.

Wo kann das Problem liegen?


LG
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

was ist denn CONF?
Wenn CONF nicht 1 oder 2 ist, ist k = 0 - und das ist am Ende natürlich problematisch.
Verwende doch mal den Debugger, um den Code durchzugehen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 22.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.04.2018, 10:13     Titel:
  Antworten mit Zitat      
Hallo Harald,

CONF ist eine Eingabe, die der USER in der APP macht, die auschließlich die Werte 1 oder 2 annhemen kann. Er hat die Wahl zwischen 1 und 2 über ein Dropdown Sad

LG
A346
Private Nachricht senden Benutzer-Profile anzeigen
 
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.04.2018, 11:29     Titel:
  Antworten mit Zitat      
Hallo,

bist du sicher, dass die Auswahl als Double übergeben wird und nicht etwa als String?
Bitte nutze doch den Debugger.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 22.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.04.2018, 13:19     Titel:
  Antworten mit Zitat      
Hallo Harald,

mir fällt ein WIND_chart kann negative Werte annehmen. Aber das muss er auch, sonst verfehlt das Programm seinen Sinn. k ist in jedem Fall größer 0.
Könnte dieser Fehler am WIND_chart liegen ?



LG
A346
Private Nachricht senden Benutzer-Profile anzeigen
 
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.04.2018, 13:22     Titel:
  Antworten mit Zitat      
Hallo,

die Werte von WIND_chart sind dafür vollkommen egal, es geht um die Indizes.

Nun zum dritten Mal: bitte debuggen und überprüfen, was die Werte von CONF und k sind.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 22.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.04.2018, 15:06     Titel:
  Antworten mit Zitat      
Hallo Harald,

die Warnung mit dem index ließ sich beheben, indem ich statt k=0; k=1; schreibe.
Jetzt kommt nur noch "index exceeds matrix dimensions ", wenn ich im App designer den "Calculate Button" drücke.
Diese Fehler erscheinen im Command Window der externen Funktion OAT.m.
Code:

Error using test/CALCValueChanged (line 73)
Index exceeds matrix dimensions.

Error in
appdesigner.internal.service.AppManagementService/tryCallback (line
179)
                    callback(app);

Error in
matlab.apps.AppBase>@(source,event)tryCallback(appdesigner.internal.service.AppManagementService.instance(),app,callback,requiresEventData,event)
Error using matlab.ui.control.internal.controller.ComponentController/executeUserCallback (line 292)
Error while evaluating StateButton PrivateValueChangedFcn
 


Line 73 ist die line der callbackfunction im app designer.

Ich weiß nichts mit diesen Warnungen anzufangen, weil nirgends steht, auf welche stellen in meiner externen Funktion sich das bezieht.

LG
A346
Private Nachricht senden Benutzer-Profile anzeigen
 
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.04.2018, 15:23     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
die Warnung mit dem index ließ sich beheben, indem ich statt k=0; k=1; schreibe.

Also ist das Problem, dass die Cases in switch nicht zutreffen (siehe 12:29), denn sonst würde k ja sofort überschrieben und k=0 oder k=1 würde keinen Unterschied machen.

Zitat:
Diese Fehler erscheinen im Command Window der externen Funktion OAT.m.

Eine Funktion hat kein Command Window.

Zitat:
Line 73 ist die line der callbackfunction im app designer.

Und genau dort ist dann wohl das Problem. Was Zeile 73 bei dir ist, kann ich nicht erahnen.

Wenn du den Debugger verwendest (4. Versuch), solltest du die Probleme schnell identifizieren und dann vermutlich ebenso schnell lösen können.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 22.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.04.2018, 15:43     Titel:
  Antworten mit Zitat      
Hallo Harald,

line 73 ist nur der Aufruf der Funktion im App designer:
Code:

app.PTOW.Value = app.OAT(app.OAT.Value,app.WIND.Value,app.CONF.Value,app.AC.Value,app.AI.Value,app.RWYCOND.Value,app.QNH.Value)
 

Mein Verständisproblem ist folgendes:
wenn er mir sagt das Problem liegt hier in 73 ohne verweis, wo das Problem in der Funktion selber liegt, dann kann das Problem überall liegen oder ?

Wie genau funktioniert das debuggen ?
Ich dachte Debuggen ist, wenn man Breakpoint setzt und dann immer auf Run drückt und guckt, was er bisdahin macht und ob er einen Fehler ausgibt. Ist das so richtig?
Das habe ich gemacht und dann sagt er immer "not enough input arguments".
Dann rufe ich die Funktion immer mit entsprechenden Eingaben im command window auf und gucke, was rauskommt bis zu einem bestimmten Punkt. Und er macht alles, wie er es machen soll und es kommen auch keine Fehler.
Gibt es eine andere Möglicheit des Debuggens ?

LG
A346
Private Nachricht senden Benutzer-Profile anzeigen
 
A346
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 22.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.04.2018, 15:55     Titel:
  Antworten mit Zitat      
Hallo,

habe nun festgestellt, dass man bei run auch Werte für die Eingabevariablen angeben kann und dann bei run die funktion immer mit diesen Werten gespeist wird.
Das habe ich nun mit Breakpoints an allen kritischen Stellen gemacht und mir fällt nichts auf, was nicht so sein sollte Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
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.04.2018, 15:56     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
wenn er mir sagt das Problem liegt hier in 73 ohne verweis, wo das Problem in der Funktion selber liegt, dann kann das Problem überall liegen oder ?

Nein, es liegt in dieser Zeile. Im Aufruf der Funktion, nicht der Funktion an sich.

Der Teil app.OAT(app.OAT.Value legt nahe, dass OAT sowohl eine Funktion als auch eine Komponente in der App ist. Das ist sehr ungünstig und evtl. Ursache des Fehlers.

Zitat:
Das habe ich gemacht und dann sagt er immer "not enough input arguments".

Dann verwendest du den Debugger falsch. Du setzt den Haltepunkt schon in der App??

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 22.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.04.2018, 16:02     Titel:
  Antworten mit Zitat      
Hallo,
Zitat:

Der Teil app.OAT(app.OAT.Value legt nahe, dass OAT sowohl eine Funktion als auch eine Komponente in der App ist. Das ist sehr ungünstig und evtl. Ursache des Fehlers.


Da hast du Recht, das werde ich mal versuchen.

Zitat:

Dann verwendest du den Debugger falsch. Du setzt den Haltepunkt schon in der App??

Ich habe den Debugger tatsächlich nicht in der App, sondern in der Funktion verwendet. Der Grund dafür ist, dass ich an dem App code bisher nichts geändert habe, außer die Callback Funktion einzufügen und deshalb davon ausging, dass im Rest kein Fehler sein kann.
Der gesamte restliche App Code wurde automatisch generiert, indem ich die Penals und Dropdowns, etc. per Mausklick eingefügt habe.

LG
A346
Private Nachricht senden Benutzer-Profile anzeigen
 
A346
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 22.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.04.2018, 16:16     Titel:
  Antworten mit Zitat      
Hallo,

ich glaube dein Tipp, die Variable umzubenennen war sehr gut !

Jetzt ist nur noch das Problem:
"Too many output argument"

Das liegt daran, dass meine Funktion nicht nur einen Wert berechnet sondern sehr viele, ich das Ergebnis jedoch aber in nur einem Textfeld anzeigen möchte laut der Callbackfunktion.

Was nicht funktioniert ist, überall ein ; hinzusetzen. Die Funktion gibt zwar dann nur noch einen Wert aus, aber das gefällt dem App Designer trotzdem nicht.
Was ich gerne machen würde ist:
Die Funktion gibt einen Vektor mit 5 Elemten aus und diese 5 Elemente sollen in der app auf 5 verschieden Textfelder verteilt werden.
Ist das möglich ?

LG A346
Private Nachricht senden Benutzer-Profile anzeigen
 
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.04.2018, 16:27     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Das liegt daran, dass meine Funktion nicht nur einen Wert berechnet sondern sehr viele, ich das Ergebnis jedoch aber in nur einem Textfeld anzeigen möchte

In der Regel eigentlich genau umgekehrt. Du forderst mehr Rückgabeargumente zurück als die Funktion zurückgibt. Bitte gewöhne dir an, gleich den relevanten Code zu posten - hier: Funktionsaufruf und Deklarationszeile der Funktion.

Zitat:
Was nicht funktioniert ist, überall ein ; hinzusetzen.

Was soll das denn nun heißen?! Du meinst vermutlich an alle Zeilenenden, aber was soll das bringen?

Zitat:
Die Funktion gibt einen Vektor mit 5 Elemten aus und diese 5 Elemente sollen in der app auf 5 verschieden Textfelder verteilt werden.
Ist das möglich ?

Ja. Elemente extrahieren und jeweils den Textfeldern zuweisen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 22.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.04.2018, 16:48     Titel:
  Antworten mit Zitat      
Hallo Harald,

Zitat:

Bitte gewöhne dir an, gleich den relevanten Code zu posten - hier: Funktionsaufruf und Deklarationszeile der Funktion.



Tut mir leid, das werde ich Zukunft beachten.
Mein Fehler war folgender:
Code:

function [] = Untitled(A,B)
 

Ich habe, wenn ich Funktionen schreibe die eckigen Klammern nach "function" immer leer gelassen. Aber die App braucht dort eine Information, sonst weiß sie nicht, was sie machen soll. Das wusste ich nicht und du konntest es mir schlecht sagen, weil ich dir keinen Code schickte Sad

LG
A346
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.