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

Automatische Datenreduktion mit Schreiben in Vektoren

 

spcky
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 29.12.12
Wohnort: Siegen
Version: ---
     Beitrag Verfasst am: 29.12.2012, 18:16     Titel: Automatische Datenreduktion mit Schreiben in Vektoren
  Antworten mit Zitat      
Hallo zusammen,

ich benutze nun seit 5 Jahren wieder Matlab für meine experimentelle Abschlussarbeit. Leider ist die Bedienung noch recht schwer und ich habe fast alles vergessen. Einige Funktionen konnte ich mir schon mit Hilfe von google und der Forensuche zusammen "basteln", aber jetzt hänge ich fest.

Ich habe viele Vektoren unterschiedlicher Länge. Diese Vektoren bestehen aus Messdaten, die so aufgebaut sind:

1) Beliebig viele Einträge unter 1, die für mich unbrauchbar sind
2) relevante Messwerte über 1
3) unbrauchbare Daten unter 1
4) relevante Messwerte über 1
etc.

Mein Ziel ist es, die Intervalle mit den relevanten Messwerten automatisiert in neue Einzelvektoren eines structs schreiben zu lassen. Wie geht das? Es sind auch immer unterschiedlich viele Messwerte und relevante Intervalle pro Datenaufnahme.
Am liebsten hätte ich ein Script, dem ich lediglich den Messdatenvektor eingeben muss und das mir dann 1 bis n (je nach Anzahl der relevanten Intervalle) neue Vektoren ausspuckt, die dann zum Beispiel Intervall_i heißen.
Kann mir hier jemand weiterhelfen?

Vielen Dank!
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.12.2012, 20:03     Titel: Re: Automatische Datenreduktion mit Schreiben in Vektoren
  Antworten mit Zitat      
Hallo spcky,

Bitte nenne die Ergebnisse nicht Intervall_1, Intervall_2, ... Einen Index in den Namen zu packen erfordert zunächst Tricks beim Erstellen und später wieder ebensolche Tricks beim Benutzen. Es ist viel geschickter und naheliegender, einen Index als Index zu verwenden.

Ein Beispiel-Vektor wäre klarer als die Text-Beschreibung.
Es wäre u.a. auch praktisch zu wissen, was genau "ich habe viele Vektoren" bedeutet. Denn davon hängt ja auch die Lösung ab.

Die generelle Methode, um die Intervalle mit positiven Werten zu finden ist:
Code:
x = rand(1, 1000) - 0.2;  % Testdaten
positive = [false, (x >= 0), false];
startindex = strfind(positive, [false, true]) + 1;
endindex = strfind(positive, [true, false]);
Interval = cell(1, numel(startindex));
for ii = 1:numel(startindex)
  Interval{ii} = x(startindex(ii):endindex(ii));
end

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

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 29.12.12
Wohnort: Siegen
Version: ---
     Beitrag Verfasst am: 29.12.2012, 21:31     Titel:
  Antworten mit Zitat      
Hey Jan,

danke schonmal für deine Antwort, aber das ist glaube ich noch nicht ganz das, was ich brauche.

Also hier mal ein Beispielvektor:

Vektor_Gesamt:
0,0700000000000000
0,0800000000000000
0,0800000000000000
0,100000000000000
0,0900000000000000
0,0700000000000000
0,100000000000000
0,100000000000000
0,0900000000000000
0,110000000000000
0,120000000000000
0,120000000000000
0,0900000000000000
0,0900000000000000
0,100000000000000
0,130000000000000
0,150000000000000
0,100000000000000
0,100000000000000
0,120000000000000
0,140000000000000
0,140000000000000
0,0900000000000000
0,0700000000000000
0,0700000000000000
0,100000000000000
0,0900000000000000
0,0900000000000000
0,120000000000000
0,120000000000000
0,120000000000000
0,0900000000000000
0,0600000000000000
0,120000000000000
0,0600000000000000
0,0800000000000000
0,0900000000000000
0,0900000000000000
0,0700000000000000
0,0700000000000000
0,120000000000000
0,0900000000000000
0,100000000000000
0,130000000000000
0,100000000000000
0,110000000000000
0,0700000000000000
0,110000000000000
0,0700000000000000
0,100000000000000
0,0800000000000000
0,120000000000000
0,100000000000000
0,0900000000000000
0,130000000000000
0,0900000000000000
0,100000000000000
0,0700000000000000
0,0600000000000000
0,0700000000000000
0,120000000000000
0,110000000000000
0,100000000000000
0,110000000000000
0,0900000000000000
0,0900000000000000
0,0700000000000000
0,0800000000000000
0,0900000000000000
0,0700000000000000
0,0900000000000000
0,110000000000000
0,110000000000000
0,140000000000000
0,140000000000000
0,0700000000000000
0,120000000000000
0,0700000000000000
0,0800000000000000
0,110000000000000
0,0700000000000000
0,140000000000000
0,0900000000000000
0,120000000000000
0,0800000000000000
0,120000000000000
0,100000000000000
0,0800000000000000
0,0700000000000000
0,0600000000000000
0,110000000000000
0,0900000000000000
0,110000000000000
0,0900000000000000
0,110000000000000
0,100000000000000
0,120000000000000
0,120000000000000
0,0600000000000000
0,0900000000000000
0,0900000000000000
0,110000000000000
0,120000000000000
0,0900000000000000
0,110000000000000
0,0900000000000000
0,0700000000000000
0,0700000000000000
0,0800000000000000
0,0900000000000000
0,0900000000000000
0,110000000000000
0,100000000000000
0,0900000000000000
0,0900000000000000
0,0900000000000000
0,0900000000000000
0,0900000000000000
0,120000000000000
0,110000000000000
0,0800000000000000
0,0900000000000000
0,110000000000000
0,0900000000000000
0,110000000000000
0,150000000000000
0,0900000000000000
0,120000000000000
0,120000000000000
0,0700000000000000
0,0700000000000000
0,110000000000000
0,110000000000000
0,0800000000000000
0,110000000000000
0,100000000000000
0,0800000000000000
0,0900000000000000
0,110000000000000
0,100000000000000
0,160000000000000
0,0600000000000000
0,0900000000000000
0,110000000000000
0,0900000000000000
0,0800000000000000
0,100000000000000
0,0700000000000000
0,0700000000000000
0,110000000000000
0,0900000000000000
0,100000000000000
0,0900000000000000
0,120000000000000
0,0900000000000000
0,110000000000000
0,130000000000000
0,0900000000000000
0,0700000000000000
0,0700000000000000
0,0900000000000000
0,110000000000000
0,0700000000000000
0,100000000000000
0,0800000000000000
0,120000000000000
0,0800000000000000
0,0700000000000000
0,110000000000000
0,100000000000000
0,100000000000000
0,110000000000000
0,100000000000000
0,110000000000000
0,110000000000000
0,0800000000000000
0,0900000000000000
0,140000000000000
0,0900000000000000
0,0900000000000000
0,0900000000000000
0,0600000000000000
0,120000000000000
0,0500000000000000
0,100000000000000
0,0700000000000000
0,130000000000000
0,140000000000000
0,0900000000000000
0,0600000000000000
0,0700000000000000
0,120000000000000
0,110000000000000
0,0900000000000000
0,0900000000000000
0,110000000000000
0,0900000000000000
0,100000000000000
0,0900000000000000
0,100000000000000
0,100000000000000
0,110000000000000
0,0800000000000000
0,0700000000000000
0,0900000000000000
0,0900000000000000
0,0900000000000000
0,0700000000000000
0,0700000000000000
0,120000000000000
0,0600000000000000
0,0700000000000000
0,120000000000000
0,120000000000000
0,0700000000000000
0,0900000000000000
0,100000000000000
0,110000000000000
0,140000000000000
0,140000000000000
0,0700000000000000
0,0700000000000000
0,120000000000000
0,110000000000000
0,100000000000000
0,0900000000000000
0,120000000000000
0,0700000000000000
0,0900000000000000
0,130000000000000
0,100000000000000
0,100000000000000
0,0800000000000000
0,100000000000000
0,100000000000000
0,0900000000000000
0,100000000000000
0,0700000000000000
0,110000000000000
0,100000000000000
0,0800000000000000
0,120000000000000
0,0700000000000000
0,0900000000000000
0,100000000000000
0,120000000000000
0,0700000000000000
0,100000000000000
0,120000000000000
0,100000000000000
0,100000000000000
0,100000000000000
0,0700000000000000
0,110000000000000
0,100000000000000
0,100000000000000
0,0900000000000000
0,0900000000000000
0,110000000000000
0,0900000000000000
0,0800000000000000
0,100000000000000
0,0900000000000000
0,120000000000000
0,0700000000000000
0,0700000000000000
0,120000000000000
0,110000000000000
0,100000000000000
0,0900000000000000
0,100000000000000
0,0900000000000000
0,100000000000000
0,100000000000000
0,0900000000000000
0,110000000000000
0,290000000000000
0,300000000000000
40,2400000000000
48,9700000000000
50,6100000000000
52,3400000000000
52,8400000000000
52,7300000000000
52,6200000000000
52,2600000000000
51,9800000000000
51,8200000000000
51,5000000000000
51,4200000000000
51,1800000000000
51,0100000000000
50,9000000000000
50,8100000000000
50,7100000000000
50,7000000000000
50,6300000000000
50,5800000000000
50,5800000000000
50,5600000000000
50,4900000000000
50,5000000000000
50,4600000000000
50,4900000000000
50,4400000000000
50,5600000000000
50,4800000000000
0,100000000000000
0,0900000000000000
0,0900000000000000
0,0800000000000000
0,0900000000000000
0,0800000000000000
0,120000000000000
0,0600000000000000
0,0900000000000000
0,110000000000000
0,100000000000000
0,110000000000000
0,0900000000000000
0,120000000000000
0,120000000000000
0,110000000000000
0,110000000000000
0,150000000000000
0,0900000000000000
0,0900000000000000
0,0800000000000000
0,120000000000000
0,0900000000000000
0,0900000000000000
0,120000000000000
0,0700000000000000
0,0900000000000000
0,120000000000000
0,100000000000000
0,0900000000000000
0,120000000000000
0,0900000000000000
0,120000000000000
22,9300000000000
43,5600000000000
48,3900000000000
51,4600000000000
52,5300000000000
52,7800000000000
52,6900000000000
52,5400000000000
52,1600000000000
51,7300000000000
51,6600000000000
51,3500000000000
51,0900000000000
50,9500000000000
50,8700000000000
50,7300000000000
50,5800000000000
50,5700000000000
50,5400000000000
50,4900000000000
50,5400000000000
50,4900000000000
50,4000000000000
50,4100000000000
50,4600000000000
50,3700000000000
50,4200000000000
50,3900000000000
50,3700000000000
50,3700000000000
0,100000000000000
0,110000000000000
0,0800000000000000
0,110000000000000
0,0800000000000000
0,120000000000000
0,100000000000000
0,0900000000000000
0,140000000000000
0,0500000000000000
0,110000000000000
0,0900000000000000
0,0600000000000000
0,100000000000000
0,0900000000000000
0,0700000000000000
0,110000000000000
0,0500000000000000
0,0700000000000000
0,0900000000000000
0,0900000000000000
0,100000000000000
0,100000000000000
0,120000000000000
0,0800000000000000
0,0600000000000000
0,120000000000000
0,0900000000000000
0,120000000000000
0,0900000000000000
0,120000000000000
0,120000000000000
0,0700000000000000
0,670000000000000
32,5900000000000
46,7400000000000
50
52,1400000000000
52,7400000000000
52,7400000000000
52,5800000000000
52,2500000000000
51,9800000000000
51,6400000000000
51,5300000000000
51,2200000000000
50,9900000000000
50,7700000000000
50,6300000000000
50,6100000000000
50,5600000000000
50,5100000000000
50,4600000000000
50,4600000000000
50,4400000000000
50,3700000000000
50,3900000000000
50,4100000000000
50,4300000000000
50,3900000000000
50,3700000000000
50,3600000000000
50,3100000000000
0,100000000000000
0,120000000000000
0,110000000000000
0,0900000000000000
0,0800000000000000
0,0400000000000000
0,120000000000000
0,0900000000000000
0,120000000000000
0,0900000000000000
0,100000000000000
0,0700000000000000
0,110000000000000
0,100000000000000
0,100000000000000
0,0900000000000000
0,130000000000000
0,120000000000000
0,0600000000000000
0,100000000000000
0,0700000000000000
0,100000000000000
0,0900000000000000
0,120000000000000
0,0700000000000000
0,120000000000000
0,100000000000000
0,100000000000000
0,0900000000000000
0,100000000000000
0,0600000000000000
0,0800000000000000
0,0700000000000000
22,2600000000000
43,6700000000000
48,6800000000000
51,6900000000000
52,7600000000000
52,9100000000000
52,7900000000000
52,5600000000000
52,1200000000000
51,7300000000000
51,5500000000000
51,3100000000000
50,9400000000000
50,7800000000000
50,6900000000000
50,6800000000000
50,4800000000000
50,5100000000000
50,5100000000000
50,4900000000000
50,4400000000000
50,4600000000000
50,4200000000000
50,4800000000000
50,4100000000000
50,4500000000000
50,4200000000000
50,4400000000000
50,4400000000000
50,4400000000000
0,110000000000000
0,120000000000000
0,0700000000000000
0,100000000000000
0,0700000000000000
0,120000000000000
0,0900000000000000
0,0700000000000000
0,0700000000000000
0,0700000000000000
0,130000000000000
0,100000000000000
0,150000000000000
0,120000000000000
0,120000000000000
0,0600000000000000
0,140000000000000
0,0800000000000000
0,0900000000000000
0,0500000000000000
0,100000000000000
0,0600000000000000
0,0900000000000000
0,0600000000000000
0,100000000000000
0,110000000000000
0,0900000000000000
0,110000000000000
0,0900000000000000
0,110000000000000
0,110000000000000
0,120000000000000
0,0600000000000000
0,380000000000000
30,9100000000000
40,6600000000000
49,3600000000000
51,9800000000000
52,6400000000000
52,8700000000000
52,6700000000000
52,4100000000000
52,0200000000000
51,7100000000000
51,3600000000000
51,0500000000000
51,0100000000000
50,8100000000000
50,7300000000000
50,6800000000000
50,6300000000000
50,5200000000000
50,5400000000000
50,4300000000000
50,4400000000000
50,4000000000000
50,4400000000000
50,3700000000000
50,3900000000000
50,3700000000000
50,3900000000000
50,3300000000000
50,3800000000000
0,110000000000000
0,0900000000000000
0,0500000000000000
0,0700000000000000
0,0700000000000000
0,130000000000000
0,120000000000000
0,0700000000000000
0,100000000000000
0,100000000000000
0,120000000000000
0,0900000000000000
0,0400000000000000
0,0700000000000000
0,120000000000000
0,0800000000000000
0,100000000000000
0,110000000000000
0,100000000000000
0,0900000000000000
0,100000000000000

Habe ihn vorher nicht gepostet, da er recht lang ist Wink

Dieser Vektor soll nun so aufgeteilt werden, dass ich hinterher neue Vektoren habe, die so aussehen sollen:

Vektor 1)
40,2400000000000
48,9700000000000
50,6100000000000
52,3400000000000
52,8400000000000
52,7300000000000
52,6200000000000
52,2600000000000
51,9800000000000
51,8200000000000
51,5000000000000
51,4200000000000
51,1800000000000
51,0100000000000
50,9000000000000
50,8100000000000
50,7100000000000
50,7000000000000
50,6300000000000
50,5800000000000
50,5800000000000
50,5600000000000
50,4900000000000
50,5000000000000
50,4600000000000
50,4900000000000
50,4400000000000
50,5600000000000
50,4800000000000

Vektor 2)
22,9300000000000
43,5600000000000
48,3900000000000
51,4600000000000
52,5300000000000
52,7800000000000
52,6900000000000
52,5400000000000
52,1600000000000
51,7300000000000
51,6600000000000
51,3500000000000
51,0900000000000
50,9500000000000
50,8700000000000
50,7300000000000
50,5800000000000
50,5700000000000
50,5400000000000
50,4900000000000
50,5400000000000
50,4900000000000
50,4000000000000
50,4100000000000
50,4600000000000
50,3700000000000
50,4200000000000
50,3900000000000
50,3700000000000
50,3700000000000

Vektor 3)
32,5900000000000
46,7400000000000
50
52,1400000000000
52,7400000000000
52,7400000000000
52,5800000000000
52,2500000000000
51,9800000000000
51,6400000000000
51,5300000000000
51,2200000000000
50,9900000000000
50,7700000000000
50,6300000000000
50,6100000000000
50,5600000000000
50,5100000000000
50,4600000000000
50,4600000000000
50,4400000000000
50,3700000000000
50,3900000000000
50,4100000000000
50,4300000000000
50,3900000000000
50,3700000000000
50,3600000000000
50,3100000000000

Vektor 4 und 5 entsprechend.

Es geht darum, dass ich den Vektor_Gesamt durch eine Funktion XX laufen lasse, die mir daraus die Vektoren 1 bis 5 erstellt.
Sprich, ich will in Matlab folgendes eingeben:

XX(Vektor_Gesamt)

und Matlab soll mir meine Einzelvektoren ausspucken.

Von der Art Vektor_Gesamt habe ich mehrere Vektoren, die alle vom Aufbau her gleich sind. Lediglich die Anzahl der Einträge, sowie Position und Länge der Intervalle, die später in den Vektoren i bis n landen sollen, variiert.
Danach will ich noch die ersten und letzten 3 Einträge der neu erzeugten Vektoren löschen lassen, aber das kriege ich mit einer for-Schleife hin.
Ich habe auch schon überlegt, ob ich statt den ganzen Vektoren nicht eine Matrix nutze, aber das Problem ist, dass hier die Anzahl der Zeilen pro Spalte unterschiedlich lang sein können. Dann müsste ich mit Nullen füllen, was ich aber auch nicht gebrauchen kann Sad

Danke für die Hilfe!

Edit: Ach ja, ganz vergessen, ich habe momentan etwa 20 bis 30 Vektoren, die ich auf diese Weise umwandeln will, es könnten aber im Laufe meiner Arbeit noch mehr werden, dass kann ich noch nicht sagen.
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: 30.12.2012, 17:30     Titel:
  Antworten mit Zitat      
Hallo spcky,

Ich finde die geposteten Daten sehr unpraktisch und kaum benutzbar. Einerseits trägt die große Menge an Daten nicht zur Klärung des Problems bei, sondern vertopft eigentlich nur das Display, andererseits kann ich die Daten auch nicht per Copy&Paste zum Probieren verwenden, da sie keine valide Matlab-Syntax haben, z.B. auch Kommas statt Dezimalpunkte. Die gigantische Menge an insignifikanten Nullen ist offensichtlich überflüssig, oder?

Zitat:
aber das ist glaube ich noch nicht ganz das, was ich brauche.

Und nun wäre es praktisch, wenn Du dies genau erklärst. Soweit ich sehe, macht mein geposteter Code nämlich genau das, was Du beschreibst, bis auf den Tippfehler, dass "(x >= 0)" eigentlich "(x >= 1)" heißen soll.
Wo liegt also der Unterschied zwischen meinem Lösungsvorschlag, der die Vektoren in ein Cell-Array schreibt, und Deinen Vorstellungen? Ist meine Warnung vor der Benutzung von nummerierten Variablen-Namen angekommen?

Es ist immer schwierig zu unterscheiden, welche Informationen zur Lösung eines Problems notwendig sind, und welche nur ablenken. Im Allgemeinen enthält aber genau diese Unterscheidung bereits alles, was zur Lösung benötigt wird.

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

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 29.12.12
Wohnort: Siegen
Version: ---
     Beitrag Verfasst am: 04.01.2013, 18:01     Titel:
  Antworten mit Zitat      
Hallo Jan,

erstmal Danke, dass du dich in die Sache reinhängst. Melde mich erst jetzt wieder, weil ich die letzten Tage krank war Sad
Hatte auch bedenken, die lange "Zahlenschlange" zu posten, habe ich auch nur gemacht, um das Problem mit einem tatsächlichen Beispiel-Vektor zu beschreiben.
Wenn ich dein Skript richtig verstehe, erstellt es zunächst einen Vektor positive mit 1en, da wo im Beispielvektor Werte über 1 stehen, umrandet von jeweils einer 0 zu Beginn und zuletzt. Hier verstehe ich nicht den Zweck der zusätzlichen Nullen.
Dann wird strartindex definiert und zu einem Vektor mit den Positionen der 1en im Vektor positive + 1, bzw. + der Anzahl der Stellen, die ich zu Beginn eines relevanten Zahlenintervalls abschneiden möchte.
endindex analog dazu, nur mit den Endpositionen der Intervalle.
Interval wird danach als cell-Matrix mit Anzahl der Spalten entsprechend der Anzahl der Intervalle vordefiniert.
Die for-Schleife soll diese nun mit den entsprechenden tatsächlichen Werten füllen. Ansich leuchtet mir das ein, aber Matlab spuckt mir auch den Fehler aus:

Index exceeds matrix dimensions.

Zitat:
Error in intervall (line 7)
Interval{ii} = x(startindex(ii):endindex(ii));


Wenn ich meinen Beispielvektor einsetze kommt ein anderer Fehler:
Zitat:

Error using horzcat
Dimensions of matrices being concatenated are not consistent.

Error in intervall (line 2)
positive = [false, (x >= 1), false];


Dein Skript habe ich folgendermaßen als Funktion implementiert:

function interval = intervall(x)
positive = [false, (x >= 1), false];
startindex = strfind(positive, [false, true]) + 3;
endindex = strfind(positive, [true, false]) -2;
Interval = cell(1, numel(startindex));
for ii = 1:numel(startindex)
Interval{ii} = x(startindex(ii):endindex(ii));
end


Sorry nochmal wegen dem langen Post. Deine Lösung macht rein von der Logik her doch Sinn, das habe ich vor ein paar Tagen leider noch nicht erkannt. Aber blöderweise kriege ich diese Fehlermeldungen Sad

Edit: Ah, Fehler entdeckt, ich arbeite mit stehenden Vektoren, also transponieren und schon müsste es funktionieren Wink

Nochmal Edit: Sooooo, ich habe noch ein bisschen rumgebastelt und jetzt müsste es funktionieren Smile

Habe das Skript nun in dieser Form als Funktion (für alle, die auf der Suche nach der Lösung für ein ähnliches Problem sind):

Zitat:
function Interval = intervall(x)
a=transpose(x);
positive = [false, (a >= 1), false];
startindex = strfind(positive, [false, true]) + 3;
endindex = strfind(positive, [true, false]) -2;
Interval = cell(1, numel(startindex));
for ii = 1:numel(startindex)
Interval{ii} = a(startindex(ii):endindex(ii));
end


Danke Jan für deine Hilfe!!!! Smile
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: 04.01.2013, 19:02     Titel:
  Antworten mit Zitat      
Hallo spcky,

Mein Script sucht die Stellen, an denen auf eine Null eine Nicht-Null folgt, oder auf eine Nicht-Null eine Null.
Wenn der Vektor aber mit einer Nicht-Null beginnt oder endet, wird dies nicht registriert. Deshalb hänge ich eine zusätzliche Null an den Anfang und ans Ende.

Zitat:
Index exceeds matrix dimensions.
Error in intervall (line 7)
Interval{ii} = x(startindex(ii):endindex(ii));

Du verwendest auch anders als in meinem Code "startindex = strfind(positive, [false, true]) + 3". Falls die Orginal-Daten z.B. [3] sind, und "positive" dann der Vektor [0,1,0], ist der "startindex" gleich 1. 1+3=4, aber die Orginal-Daten besitzen kein 4. Element.
Wieso setzt Du also +3 und -2 in den Start- und End-Indizes? Ich hatte +1 und 0, aber leider war das ein Bug und es hätte 0 und -1 sein sollen.

"[false, (x >= 1), false]" erzeugt dann einen Fehler, wenn x ein Spaltenvektor ist, wie Du schon festgestellt hast. Dann kann man dies nämlich nicht horizontal aneinander hängen, da in einer Matrix alle Spalten die gleiche Länge besitzen müssen. Bei einem Zeilenvektor klappt dies aber wiederum. Eine Lösung ist x als Zeile zu konvertieren:
Code:
x = reshape(x, 1, []);

Nun akzeptiert das Programm Zeilen- und Spalten-Vektoren.

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

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 29.12.12
Wohnort: Siegen
Version: ---
     Beitrag Verfasst am: 04.01.2013, 19:28     Titel:
  Antworten mit Zitat      
Hi Jan,

danke für den reshape-Tip, habe ich gerade implementiert.

Ich starte erst beim 3. Wert des Intervalls, bzw. beende es 2 Werte früher, weil bei den Messdaten in den Anfangs- und Endbereichen noch Werte sind, die nicht repräsentativ für den Versuch sind.
Man kann das als Anfahrts- bzw. Auslauframpe sehen, in denen die Anlage zwar läuft, aber noch nicht im eigentlichen Versuchs-, bzw. Betriebsbereich.
Würde ich diese Werte mit in meine Berechnungen einbeziehen, würden sie das Ergebnis verfälschen und ich hätte einen zu niedrigen Durchschnittswert (den ich aus den neu erzeugten Intervallen berechne), bzw. eine zu große Standardabweichung.
Meine Intervalle haben auch immer um die 30 Werte, mal ein paar mehr, mal ein paar weniger, von daher wird der Fall nicht auftreten, dass die Indizes in nicht-existenten Bereichen liegen. Aber sonst könnte ich das cell-Array natürlich nicht auf diese Weise erstellen lassen, bzw. müsste eine Prüfung einbauen.

Danke nochmal!
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.