|
Subotai |

Forum-Anfänger
|
 |
Beiträge: 38
|
 |
|
 |
Anmeldedatum: 18.07.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 26.07.2013, 20:54
Titel: bsxfun mit for schleife
|
 |
Hallo,
ich habe mit bsxfun Probleme:
ich habe eine Spalte A, deren Werte mit mehren Intervallen (in B gegeben) verglichen werden soll.
Für jedes Intervall soll die Summe über die dazugehörigen Werte der Spalte gebildet werden.
ich bekomme zum einen nicht das raus was ich möchte; ich will für jedes der 10 Intervalle die Summe haben - bekomme aber immer nur den höchsten Wert des Intervalls (z.B. Intervall0:9 der Wert 9)
Auserdem wird folgender Fehler ausgegeben:
Index exceeds matrix dimensions.
Was kann ich dagegen machen?
Bin für jeden Rat dankbar
Viele Grüße
Subotai
|
|
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 26.07.2013, 21:15
Titel:
|
 |
hallo subotai
bitte benutze in zukumpft die code umgebeung. das macht das lesen einfacher.
hier wird c(i) nur die summe aus einem element von A übergeben und die summe von einem element ist natürlich das element selber.
warum benutz du bsxfun wenn du nur einzelne werte vergleichst und eine for schleife benutzt. bsxfun ist grade dafür da keine for schleife zu brauchen in deinem fall kannst du auch gleich
benutzen
wenn du die summe aus einem intervall meinst könntest du zb
oder so
wichtig ist aber das du dann mit i natürlich nicht bis zum letzten element käufst weil i+1 dann außerhalb liegt . darum bekommst du auch
"Index exceeds matrix dimensions. "
grüße winkow
_________________
richtig Fragen
|
|
|
Subotai |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 38
|
 |
|
 |
Anmeldedatum: 18.07.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.07.2013, 10:55
Titel:
|
 |
Hallo Winkow,
vielen Dank für Deine Antwort- Aber habe jetzt noch ein weiteres Problem.
A und B sind bei mir eigentlich Zeitangabe - A die Zeitspalte, B das Intervall in welche diese eingeteilt wird.
Wenn ich A und B also ändere, kommt der Fehler:
Subscript indices must either be real positive integers or logicals.
Das Datum habe ich mit datenum bereits umgeändert.
Aufgrund dieses Problems hatte ich versucht mit bsxfun zu arbeiten - damit lief es durch.
Könnte ich das Problem ohne Schleife nur mit bsxfun schreiben? Und wenn ja,wie? Ist das dann mit den apply Befehlen aus R vergleichbar?
Vielen Dank für Deine Hilfe
Viele Grüße
Subotai
PS ich habe den Code von Dir etwas geändert weil 2 Klammern fehlten und bei B brauchts das -1) um von 1:9 aufzusummieren:
(hoffe das der Code jetzt richtig dargestellt mit Firefox ging der Button nicht)
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 27.07.2013, 13:49
Titel:
|
 |
du summierst dann immer 1 element weniger falls das gewollt ist. andere möglichkeit wäre i gleich nur von 1 bis 9 laufen zu lassen. dein problem mit den "Subscript indices must either be real positive integers or logicals. !" kann ich nicht nachvollzihen da es in deinem beispiel nicht auftaucht oder? vieleicht giebst du nochmal das beispiel an. wenn du immer nur die summe über gleiche intervalle bilden willst würde das auch ganz einfach mit
und dann
gehen. oder können in b auch beliebige intervalle stehen ?
_________________
richtig Fragen
|
|
|
Subotai |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 38
|
 |
|
 |
Anmeldedatum: 18.07.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.07.2013, 14:20
Titel:
|
 |
Dankeschön;
Ist das Intervall z.B. 1:10, das andere 10: 20, dann muss ich, um nichts doppelt zu haben 1:9 machen und 10:19.
Die Idee hinter der eigentlichen Aufabe war:
ich mache über eine variable Zeitspanne (hier die Spalte time) fixe Intervalle (zb 10min), welche immer um 00:00 Uhr anfangen, ein paar Rechenoperationen über die Werte A;
Die Intervalle (zb 10min) sind fix, um sie über mehrer Tage vergleichen zu könnnen, aber die Elemente darin können varieren - wenn was nicht gemessen wurde
Beispiel:
so wie vorhin, nur das
Beispiel für die Spalte
time A
' 13:03:18' 33
' 13:03:33' 67
' 13:03:48' 36
' 13:04:03' 22
' 13:04:18' 25
' 13:04:33' 88
' 13:04:48' 122
Hier gilt: A ist variabel -sowohl wann es beginnt als auch wie groß es ist
die Intervallabstände von B dagegen sind fix
kann ich das dann mit reshape lösen?
Mir kommt es so vor als läge das Problem an der Konvertierung in datenum , aber das kann man doch nicht anders handeln?
Vielen Dank
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 27.07.2013, 15:17
Titel:
|
 |
was sind denn die zahlen hinter den uhrzeiten ? was haben die intervalle von 10 min mit den intervallen in B zu tun? das ist mir alles noch nicht ganz klar.
10 min sind im datenum format (1/86000)*60*10) wenn du also 10 min ab dem ersten zeitwert willst dann musst du so gucken. oder willst du den tag in 10 min abschnitte unterteilen und dann alle werte aufsummieren die jeweils im abschnitt liegen? und was willst du summieren? das ist mir noch nicht ganz klar. uhrzeiten addieren macht ja irgendwie keinen sinn.
_________________
richtig Fragen
|
|
|
Subotai |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 38
|
 |
|
 |
Anmeldedatum: 18.07.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.07.2013, 15:41
Titel:
|
 |
|
 |
|
Vielen Dank, einen Fehler hatte ich - aber laufen tut es dennoch nicht (es muss natürlich die Spalte D bei sum stehen und nicht die Spalte A)
ja ich will den Tag in je 10 Min Abschnitte untereilen
und dann in jeden die Summe von Spalte D bilden
Wichtig: die Messwerte können auch mal nicht um 00:00:00 anfangen, das macht nix, dann sind in dem ersten Abschnitt einfach ein paar weniger drin
Sum habe ich fürs Beispiel genommen da ich so Fehler schneller sehe als wenn ich mit Mean komme - das Ziel ist es 10 Minuten Mittel zu erstellen
Beispiel für die Tabelle; so liegt es im Rohzustand vor - in der Regel geht da immer über den gesamten Tag
time ist die Tageszeit, die in 10min Intervalle, mit dem Anfangspunkt 00:00:00 untergliedert werden soll
D ist die Spalte in der die Messwerte stehen
A bekommt man nach der numerischen Umwandlung des Datums
B ist das Zeitintervall 10min
time D
' 13:03:18' 33
' 13:03:33' 67
' 13:03:48' 36
' 13:04:03' 22
' 13:04:18' 25
' 13:04:33' 88
' 13:04:48' 122
Ich denke ich habe 2 mögliche Fehlerquellen
1. die numerische Schreibweise des Datums passt für den Index nicht
2. im Index habe ich die Abhängigkeit von D zur Tageszeit und somit indirekt zu B, nicht korrekt ausgedrückt
Viele Grüße
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 27.07.2013, 15:54
Titel:
|
 |
das ist jetzt das was ich bei dir verstanden hab soweit. kommt das hin ?
_________________
richtig Fragen
|
|
|
Subotai |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 38
|
 |
|
 |
Anmeldedatum: 18.07.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.07.2013, 16:18
Titel:
|
 |
Dankeschön, aber nicht wirklich
so wie ich das sehe, teilst du
in der Zeile den Zeitvektor der Spalte time durch einen fixen wert
und genau das darf ich nicht machen - weil der in meinen vielen files nicht immer zur selben Zeit startet und auch nicht immer gleich lang ist
Eigentlich ist das ein Vergleich von einem 144 Elemente Vektor und dem Zeitvektor time - darum auch meine 2.for schleife
c wenn in Datum umgewandelt - würde so aussehen
00:00:00 Sum1
00:10:00 Sum2
00:20:00 Sum3
00:30:00 Sum4
....
23:50:00 sum144
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 27.07.2013, 16:25
Titel:
|
 |
Zitat: |
in der Zeile den Zeitvektor der Spalte time durch einen fixen wert |
ja ich teile den tag in 10 min schritte.
wenn du natrülich 10 min ab dem ersten wert willst ist das was anderes. sonst ist es das was ich geschrieben hab. wobei bei einem noch ein <= hin sollte um alle werte zu berücksichtigen. ich kann mich natürlich irren aber ich denke es ist das was du meinst. vieleicht guckst nochmal genau drüber.
_________________
richtig Fragen
|
|
|
Subotai |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 38
|
 |
|
 |
Anmeldedatum: 18.07.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.07.2013, 16:56
Titel:
|
 |
genau das ist das Problem, der Tagesvektor time darf nicht einfach so geteilt werden, sondern muss verglichen werden
Darum habe ich es auch mit der bsxfun Konstruktion versucht
in meinen ursprünglichen Beispiel hatte er meine Intervalle korrekt genommen und soweit ich das sehe auch korrekt verglichen, aber eben immer den ersten Wert geschrieben anstelle über das Intervall,
setze ich in mein 1 Beispiel nun deine Intervalle ein:
Der Fehler
Index exceeds matrix dimensions.
erscheint
Setze ich
anstelle d ein, so läuft es korrekt durch, aber gibt wie bereits besprochen den 1 Wert des Intervall an- weil ich kein Intervall angegeben habe
Viele Grüße
|
|
|
Subotai |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 38
|
 |
|
 |
Anmeldedatum: 18.07.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.07.2013, 21:09
Titel:
|
 |
Nachtrag:
Das Beispiel läuft jetzt perfekt durch, nochmals vielen Dank!
Aber setze ich nun meine richtigen Werte ein, dann kommt der folgende Fehler:
Attempted to access D(735236); index must be a positive integer or logical.
Kann dies am Datumsformat liegen?
Viele Grüße
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 28.07.2013, 01:35
Titel:
|
 |
ka kann ich nicht sagen. gieb mal ein minimal beispiel das den fehler reproduziert. ich bin immernoch der meinung das meins oben das ist was du suchst. 144 10 min einträge über den tag sonst versteh ich dich immernoch falsch. dann solltest du noch einmal ein einfaches beispiel geben mit gegebenen eingags daten und gewünschten ausgangs daten.
grüße
_________________
richtig Fragen
|
|
|
Subotai |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 38
|
 |
|
 |
Anmeldedatum: 18.07.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.07.2013, 12:01
Titel:
|
 |
Hallo,
sorry, Du hattest recht; Ich habe mich nur von einem abweichenden Resultat aus Excel für die Summe aus dem Konzept bringen lassen.
Aber vorhin mir in Excel viele 10min Intervalle ausgeben lassen.
Kann es sein, dass Excel bei Sum im andere Resultate wie Matlab liefert? Hier in für den letzten Wert: Matlab 48.795 und Excel 48.705, die anderen Werte schwanken auch -aber nicht immer gleich stark. So um 1% Abweichung.
Nochmals vielen Dank für Deine Hilfe und Geduld.
Viele Grüße
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 28.07.2013, 13:53
Titel:
|
 |
summen werden gleich gebildet denke ich. wenn dann liegts an den intervallen. bei simpler addition sollte excel nichts falsch machen
wie ich bereits sagte hab ich oben bei mir ein >= vergessen. das führt dazu das wenn ein wert genau auf der intervall grenze liegt er nicht berücksichtigt wird. deswegen wäre
besser als das was ich oben hatte.
_________________
richtig Fragen
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|