Hallo Ich hab da ein kleines Problem,
da ich große Datenmengen verarbeiten muss würd ich meinen Programm code schneller machen. Leider weiß ich nicht genau wie. Könnt Ihr mir vlt. helfen.
dateien=uigetdir('',link); %Verzeichnis der Dateien durch eingabe des Benutzer bekommen
cd(dateien); %Dateien Auslesen
[stat,Text]=fileattrib('*.txt');
names={Text.Name}; %Die Namen der Dateien in eine "Tabelle" speichern wichtig für die Auswertung
x=1;
while(1)
File=names{x}; %Dateien einzeln nehmen
comma2point(File) %extra Funktion aus dem I-net gefischt und verändert Ersetzt die Kommas durch Punkte MATLAB braucht Punkte
Einlesen=dlmread(File,'\t',8,0); %Da die Dateien Einen Text Kopf und auch die Spalten Text enthalten und MATLAB nicht viel damit anfagen kann werden sie Rausgefilter (Nicht eingelesen)
Einlesen(:,6)=Einlesen(:,2).*Einlesen(:,3);
Einlesen(:,7)=Einlesen(:,4).*Einlesen(:,5);
y=2;
S1(1)=0; while(1)
S1(y)=(Einlesen(y,1)-Einlesen(y-1,1))*((Einlesen(y-1,6)+Einlesen(y,6))/2);
y=y+1;
if((y+1)>length(Einlesen(:,6))) ,break,end end
Sa(1)=0;
g=2;
while(1)
Sa(g)=Sa(g-1)+S1(g);
g=g+1;
if((g)>length(S1)) ,break,end end
S2(1)=0;
y=2;
while(1)
S2(y)=(Einlesen(y,1)-Einlesen(y-1,1))*((Einlesen(y-1,7)+Einlesen(y,7))/2);
y=y+1;
if((y+1)>length(Einlesen(:,6))) ,break,end end
Sb(1)=0;
g=2;
while(1)
Sb(g)=Sb(g-1)+S2(g);
g=g+1;
if((g)>length(S2)) ,break,end end
Ich weiß das man in Schleifen wenn der Vektor immer größer wird vorher die größe festlegen sollte. Da meine Datein aus übert 150.000 Zeilen besteht meckert mein Matlab rum und sagt mir out off Memory.
Das stellt ja so gesehen mein Integral da.
In der Ersten Schleife berechne ich die einzelnen abschnitte und in der zweiten Schleife Summiere ich sie auf.
Brauche halt den Verlauf des Integrals....
aber hab deines mal getestet funktioniert nur das die Klammer setzung nicht ganz richtig war
Zunächst würde ich auf alle Fälle das sinnlose "clear all" weglassen. Es ist ein ausgesprochener Nachteil auch alle geladenen Funktionen aus dem Speicher zu löschen, weil das Nachladen von der Festplatte zeitraubend ist. Welchen Zweck soll das haben? Es ist zwar unheimlich häufig zu Beginn von Programmen zu finden, trotzdem ist es nicht nützlich.
Die WHILE-Schleifen haben zwei ernste Bremser: 1. ist FOR hier wirklich schneller, 2. sind die Ausgaben nicht pre-alloziert. Das schrittweise Vergrößern eines Arrays ist aber sehr teuer.
Code:
S1 = zeros(1, size(Einlesen, 1)); % Pre-allocation!!! for y = 2:size(Einlesen, 1)
S1(y) = (Einlesen(y,1)-Einlesen(y-1,1))*((Einlesen(y-1,6)+Einlesen(y,6)) * 0.5);
end
vielleicht hattest du die erste 1 vergessen.
Dann wird eine quadratische Matrix erzeugt, und das wird bei 100000 Zeilen und 100000 Spalten dann schwierig.
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
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.