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

Script erzeugt Fehlermeldung bei Vektor-Umwandlung

 

Matlab_User85
Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 03.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2014, 13:42     Titel: Script erzeugt Fehlermeldung bei Vektor-Umwandlung
  Antworten mit Zitat      
Hallo zusammen,

im Rahmen einer Messwertanalyse bekommen ich jede 200ms Werte in mehreren Vektoren zur Verfügung gestellt. Diese liegen im Workspace vor:

Code:

P_L1_0ms        %  z.B. 14:15:00 Uhr    volle Sekunde
P_L1_200ms     %  z.B. 14:15:00 Uhr +200ms später
P_L1_400ms     %  z.B. 14:15:00 Uhr +400ms später
P_L1_600ms     %  z.B. 14:15:00 Uhr +600ms später
P_L1_800ms     %  z.B. 14:15:00 Uhr +800ms später
 


Um diese einzelnen Vektoren zu einem gemeinsamen Vektor zusammenzuführen, sowie fehlende Werte zu erkennen und zeitlich korrigieren zu können, wird ebenfalls eine Zählvariable mitgeschrieben welche auch auf dem Workspace vorliegt:

Code:

Zaehler_0ms
Zaehler_200ms
Zaehler_400ms
Zaehler_600ms
Zaehler_800ms
 


Jedem Wert wird also eine Zahl zugeordnet.
Die Zahl ändert sich analog zu den Messwerten jede 200ms.
Das von mir geschriebene Skript hierzu lautet:

Code:

A = [P_L1_0ms, P_L1_200ms, P_L1_400ms, P_L1_600ms, P_L1_800ms] ;
A=A' ;
P_L1_mess=A(:) ;

B = [Zaehler_0ms, Zaehler_200ms, Zaehler_400ms, Zaehler_600ms, Zaehler_800ms] ;
B=B' ;
v_kontroll=B(:) ;

log=v_kontroll>0 ;
P_L1_mess=P_L1_mess(log) ;
v_kontroll=v_kontroll(log) ;

v_soll=[1:max(v_kontroll)] ;
[c,k]=setdiff(v_soll, v_kontroll) ;
P_L1(1:length(P_L1_mess))=NaN ;
P_L1(v_kontroll)=P_L1_mess ;                           % Zeile 16
clear A B c k log v_kontroll v_soll P_L1_mess ;
 


Das Skript funktioniert auch bei Vektoren mit ungefähr 300 Einträgen.


Jedoch bei vorliegenden Vektoren mit 14700 Einträgen wird ein Fehler erzeugt:

Code:

Subscript indices must either be real positive integers or logicals.

Error in Wirkleistung_L1_einlesen (line 16)
P_L1(v_kontroll)=P_L1_mess ;

Error in run (line 63)
evalin('caller', [script ';']);
 


Weiß jemand von euch vielleicht wo das Problem liegt?

Vielen Dank schonmal für eure Hilfe.
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 02.12.2014, 14:45     Titel:
  Antworten mit Zitat      
Es dürfte so sein, dass v_kontroll nicht ganzzahlig ist. Am Besten mal in der Zeile davor ausgeben.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.12.2014, 14:53     Titel:
  Antworten mit Zitat      
Hallo,

es kann z.B. sein, dass v_kontroll leer ist.

Setze mal
Code:

dann siehst du selbst, wo das Problem liegt.

Ich würde Variablen übrigens nicht log nennen, da das die Funktion für den Logarithmus ist und diese somit überlagert wird.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 03.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2014, 14:56     Titel:
  Antworten mit Zitat      
Andreas Goser hat Folgendes geschrieben:
Es dürfte so sein, dass v_kontroll nicht ganzzahlig ist. Am Besten mal in der Zeile davor ausgeben.

Andreas


Habe v_kontroll davor mal ausgegeben und reingeschaut.



Code:

41931  % Komponente 41759 des Vektors v_kontroll
41932  %Komponente 41760 ...
41933
41934
41935
41936
41937
41938
41939
41940
41941
41942
41943                       % Komponenete 41771
41944,0100000000     % Komponente 41772...
41945,0100000000
41946,0100000000
41947,0100000000
41948,0100000000
41949,0100000000
41950,0100000000
 


Hier wird es mit ,01 angezeigt. Matlab zeigt mir die Komponente 41772
folgendermaßen an:
4.1944e+04

Das wird wohl der Fehler sein oder?
Wie bekomme ich denn für alle Komponenten des Vektors v_kontroll eine Zahlendarstellung (ganze Zahl) wie bei den ersten Einträgen wie oben?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

du kannst natürlich runden (round).

Ich würde aber schon überprüfen, was die Ursache des Problems ist.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 03.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2014, 15:01     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

es kann z.B. sein, dass v_kontroll leer ist.

Setze mal
Code:

dann siehst du selbst, wo das Problem liegt.

Ich würde Variablen übrigens nicht log nennen, da das die Funktion für den Logarithmus ist und diese somit überlagert wird.

Grüße,
Harald


Habe ebend mal
Code:

drüberlaufen lassen. Das Problem liegt in der vorletzten Zeile, also Zeile 16 aus dem Code zu anfang.
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlab_User85
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 03.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2014, 15:03     Titel:
  Antworten mit Zitat      
Habe auch bereits alle Befehle einzeln der Reihe nach ausgeführt.
Es wird alles richtig umgesetzt.
Nur die Zuweisung aus Zeile 16 erzeugt den Fehler.
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlab_User85
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 03.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2014, 15:27     Titel:
  Antworten mit Zitat      
habe den Fehler gefunden. Die Zählvariable aus des vorgelagerten csv-Datei wird immer beim Sprung der Zählvariablen von 41943 auf 41944 ungenau.

In der csv-Datei steht dann nämlich 41944,01 statt 41944.
Also durch Runden wird das Problem somit gelöst.
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.