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

Schleifenproblem

 

smaica
Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.11.2012, 12:14     Titel: Schleifenproblem
  Antworten mit Zitat      
Hallo,

ich habe eine function, die ich innerhalb einer Schleife aufrufe. Außerhalb der Schleife habe ich einen Index "Anfangindex" deklariert mit

Code:
Anfangindex(Beginn)=0;


sobei "Beginn" eine Zahl ist, die eingelesen wird.

Nun habe ich in der function die Befehle:


Code:
blabla...

Zeitreihe(1+Anfangindex(1,i):Anfangindex(1,i)+numel(ZeitreiheMonat{1,i}),1)=ZeitreiheMonat{1,i};
 
Anfangindex(1,i+1)=Anfangindex(1,i)+numel(ZeitreiheMonat{1,i})


end


wobei in ZeitreiheMonat{1,i} für jedes i ein Zeilenvektor steht mit für jedes i unterschiedlicher Länge.

Wenn ich nun das Programm starte habe ich als Fehlermeldung:


Index exceeds matrix dimensions.

Error in daten_gesamt (line 36)
Zeitreihe(1+Anfangindex(1,i):Anfangindex(1,i)+numel(ZeitreiheMonat{1,i}),1)=ZeitreiheMonat{1,i};

Anfangindex scheint sich nicht so zu verhalten wie ich das gerne hätte. Ich hätte gerne, dass Anfangindex für jedes i jeweils eine Zahl enthält, die der Summe der Einträge in den Vektoren "ZeitreiheMonat" entspricht, so dass ZeitreiheMonat für jeden Monat untereinander"gehängt" wird.

Was mache ich falsch?

MfG
smaica
Private Nachricht senden Benutzer-Profile anzeigen


Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 26.11.2012, 12:51     Titel:
  Antworten mit Zitat      
Könntest du mal einen gekürzten Beispielvektor von 'ZeitreiheMonat' posten?

Zitat:
Anfangindex scheint sich nicht so zu verhalten wie ich das gerne hätte. Ich hätte gerne, dass Anfangindex für jedes i jeweils eine Zahl enthält, die der Summe der Einträge in den Vektoren "ZeitreiheMonat" entspricht, so dass ZeitreiheMonat für jeden Monat untereinander"gehängt" wird.


Code:

Zeitreihe =[];ZeitreiheMonat = {[1,2,3,4],[20,30,40],[100,110,120,130,140]};
Anfangindex =0;
for i = 1:length(ZeitreiheMonat)
    Zeitreihe(1+Anfangindex(1,i):Anfangindex(1,i)+numel(ZeitreiheMonat{1,i}),1)=ZeitreiheMonat{1,i};
    Anfangindex(1,i+1)=Anfangindex(1,i)+numel(ZeitreiheMonat{1,i}) ;
end
 

Macht bei mir das, was ich meine, aus deinem kryptischen Schachtelsatz entnehmen zu können. Die Vektoren werden einfach untereinander gehängt.
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
mora
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 02.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2012, 12:11     Titel:
  Antworten mit Zitat      
moin leute,

ich habe mehrere mat-dateien. diese sollen nacheinander nach den zwei höchsten peaks durchsucht werden, woraus dann der mittelwert gebildet wird (das funktioniert). anschließend sollen diese werte fortlaufend in spalte A in eine excel geschrieben werden.
hier kommen zwei probleme auf. das eine ist, dass das schreiben der excel nur fehlerhaft funktioniert. das zweite, was bei mir auch viel mehr fragen aufwirft, dass für B(siehe code) viel mehr und zudem falsche werte eingelesen werden, die gar nicht in der entsprechenden datei vorkommen. ich weiß einfach nicht wo der fehler liegt und wo matlab diese werte hernimmt.

Code:
clc
clear all

Quellordner='Pfad';
A=dir(Quellordner);
files=(A.name)

for D=1:length(A);
    % einlesen der Dateien
    File= [Quellordner '\' A(D,1).name];
   

%Absolutwerte bilden
B=abs(File)
%Werte nach Größe ordnen
[sortedValues,sortIndex] = sort(B(:),'descend');    

maxIndex = sortIndex(1:2);                           % Get a linear index into A of the 15 largest values

sortedValues = unique(B(:));                         % Unique sorted values
maxValues = sortedValues(end-1:end);                 % Get the 2 largest values
%maxIndex = ismember(A,maxValues);                   % Get a logical index of all values
                                                     %   equal to the 5 largest values
                                                     
%Mittelwert bilden
C=(sum(maxValues))/2

newData1 = C;
data=newData1;
clear newData1
clear B


%Tabelle anlegen
    for i=1:1:numel(files)
    xlswrite('Dateiname.xls', data,  1, ['A' num2str(i)]);
    end
end


für B erhalte ich

B =

Columns 1 through 21

69 58 92 68 97 116 101 110 92 77 111 114 97 119 105 101 116 122 92 84 101

Columns 22 through 32

115 116 92 49 48 48 107 72 122 92 46


Eine beispieldatei ist angehängt.

Grüße
Mora

tv11.TXT
 Beschreibung:
testdatei ist hier nur als .txt- liegt aber mit gleichen werten als mat vor

Download
 Dateiname:  tv11.TXT
 Dateigröße:  83 Bytes
 Heruntergeladen:  324 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.12.2012, 12:19     Titel:
  Antworten mit Zitat      
Hallo,

du gibst ja nur den Dateinamen an, liest die Datei aber nicht ein. Du musst die Daten dann (im Falle von .mat-Dateien) schon noch mit load importieren.

File ist ein String, und wenn du darauf Arithmetik ausführst, wird nach der ASCII-Tabelle umgewandelt.
Code:


Da der Code so bei mir nicht ausführbar ist, kann ich nur fragen: was bedeutet
Zitat:
dass das schreiben der excel nur fehlerhaft funktioniert

Wird nicht geschrieben? Das falsche? Das richtige, aber an die falsche Stelle?
Aus Performancegründen würde ich es vermeiden, xlswrite in einer Schleife zu verwenden. Stattdessen sollte man die Ausgabe in MATLAB zusammenfügen und dann mit einem Befehl schreiben.

Grüße,
Harald

P.S.: Wenn es keinen klaren Bezug zur ursprünglichen Frage gibt, bitte ein neues Thema aufmachen.
Private Nachricht senden Benutzer-Profile anzeigen
 
mora
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 02.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2012, 12:26     Titel:
  Antworten mit Zitat      
p.s....wurde eledigt
-->
http://www.gomatlab.de/schleifenpro.....den-von-peaks-t26690.html
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.