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

Integral, Max berechnung + Speicherung in Excel

 

TomLustig

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.05.2013, 16:55     Titel: Integral, Max berechnung + Speicherung in Excel
  Antworten mit Zitat      
Hallo zusammen,

Ich habe mind. 1000 Dateien mit Messwerten, von denen ich jeweils das Integral und das Maximum bestimmen will.

Ist es möglich, eine Funktion zu schreiben, die diese beiden Werte aus einer Datei berechnet bzw ausliest und in eine Exceltabelle schreibt? Also einen Wert zu berechnen und zu exportieren habe ich hinbekommen, aber nicht so eine Schleife mit der Speicherung von allen Dateien aus einem Ordner in eine Exceltabelle (3 Spalten: Name der Datei, Integral,Maximumwert). Kann mir jemand sagen, wie ich dies programmeren kann?

Viele Grüße
Tom


Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 15.05.2013, 21:05     Titel: Re: Integral, Max berechnung + Speicherung in Excel
  Antworten mit Zitat      
TomLustig hat Folgendes geschrieben:
Hallo zusammen,

Ich habe mind. 1000 Dateien mit Messwerten, von denen ich jeweils das Integral und das Maximum bestimmen will.

Ist es möglich, eine Funktion zu schreiben, die diese beiden Werte aus einer Datei berechnet bzw ausliest und in eine Exceltabelle schreibt? Also einen Wert zu berechnen und zu exportieren habe ich hinbekommen, aber nicht so eine Schleife mit der Speicherung von allen Dateien aus einem Ordner in eine Exceltabelle (3 Spalten: Name der Datei, Integral,Maximumwert). Kann mir jemand sagen, wie ich dies programmeren kann?

Viele Grüße
Tom


Zerlege das Problem doch erstmal in kleine Unterprobleme und dann frage gezielt nach an den Stellen, an denen du selber nicht weiterkommst.

1. einlesen einer einzelnen Datei aus Ordner
2. Bestimmen von Dateiname, Integral und Maximum und Speichern in Matrix.
3. einlesen aller Dateien aus einem bestimmten Ordner und durchführen von 2. für jede Datei => fortlaufende Matrix
4. schreiben der Ergebnismatrix in Excel.
_________________

LG
Martina

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.05.2013, 22:36     Titel:
  Antworten mit Zitat      
ich wollte, dass ihr von der Gesamtaufgabe einen Überblick bekommt.

Ich arbeite noch nicht lange mit Matlab und bis auf das Einlesen und Darstellen und einmalige Exportieren in eine Exceltabelle habe ich keine Ahnung, wie ich das anstellen soll...

Generell möchte ich aus einer Datei nur den Max- und den Mittelwert haben.
(Wie bestimme ich den Mittelwert? Einfach SUM/Anzahl?)

Problem dabei, ich möchte das nicht manuell mit jeder Datei machen.
Eine Datei besteht aus 2 Spalten a 1,8Millionenwerten. sonst würde ich sie ja alle einlesen und insgesamt berechnen lassen.
 
RiFLoK
Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 26.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2013, 00:31     Titel:
  Antworten mit Zitat      
Hi Tom.

Sagen wir, die Matrix A hat 2 spalten und 1.8 mio zeilen.
Code:
mittelwert = mean(A); %liefert die Mittelwerte der einzelnen Spalten
summe = sum(A); %liefert die Summe der einzelnen Spalten.
maxi = max(A); %liefert das Maximum der einzelnen Spalten.

So far, Tobi
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: 16.05.2013, 09:19     Titel:
  Antworten mit Zitat      
Hallo TomLustig,

Ein gewisser Überblick über die Gesamt-Aufgabe ist zwar oft hilfreich, aber im Forum werden solche umfassenden Gesamtaufgaben sehr wahrscheinlich nicht gelöst.

Das Einlesen einer Menge von Dateien läuft z.B. so:
Code:
List = dir('D:\FolderName');
Name = {List(~[List.isdir]).name};
for iName = 1:length(Name)
  data = lade(Name{iName})  ... wie auch immer
end

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
TomLustig

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2013, 11:03     Titel:
  Antworten mit Zitat      
Danke für die Hilfe, aber soweit war ich schon Smile

Mein Script sieht zur Zeit so aus:

Code:
close all;
clear all;
akt_verzeichnis = pwd;
% Verzeichnis wahlen
path_messwerte = 'C:\Messwerte';
cd( path_messwerte );
% Initialisierung Variablen
dateiliste = ls;
SP_ges = [];
% Schleife um mehrere Dateien einzulesen
for i = 6:9
    load(dateiliste(i,:),'-mat','*');
    SP = Daten(:,[1,2]);
    SP_ges = [SP_ges;SP];
     datestr(Daten(1,1))
end;
%Filterung
gefiltert=sgolayfilt(SP_ges(:,[2]),3,171);
%Berechnungen
mittelwert = mean(gefiltert)  %liefert die Mittelwerte
summe = sum(gefiltert)        %liefert die Summe
maxi = max(gefiltert)           %liefert das Maximum
 

Nun ist die Frage, wie kann ich die 3 errechneten Werte automatisch in eine Exceltabelle schreiben lassen?
Am besten, wenn ich die nächsten 4 Dateien einlese, dass er diese Werte in der gleichen Exceltabelle unter den zuvor berechneten Werten einträgt

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
 
TomLustig

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2013, 11:33     Titel:
  Antworten mit Zitat      
d = {'Mittwelwert'; mittelwert};
e = {'Summe'; summe};
f = {'Maximalwert'; maxi};
xlswrite('Mittelwert.xls', d);
xlswrite('Summe.xls', e);
xlswrite('Maximalwert.xls', f);

Bekomme ich 3 Exceltabellen mit dem gewünschten Wert.
Problem dabei, er überspeichert die jedesmal und schreibt den nächsten Wert nicht darunter!!
Ist das möglich, das er für die nächste eingelesene Datei den Wert darunter schreibt?
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 16.05.2013, 12:50     Titel:
  Antworten mit Zitat      
TomLustig hat Folgendes geschrieben:

Bekomme ich 3 Exceltabellen mit dem gewünschten Wert.
Problem dabei, er überspeichert die jedesmal und schreibt den nächsten Wert nicht darunter!!
Ist das möglich, das er für die nächste eingelesene Datei den Wert darunter schreibt?


Ja, indem du einfach EIN Cellarray erzeugst, mit allen Einträgen.

Code:

close all;
%clear all; --> bitte nicht nutzen - das ist zu "brutal"
ExcellStr = [];

akt_verzeichnis = pwd;
% Verzeichnis wahlen
path_messwerte = 'C:\Messwerte';
cd( path_messwerte );
% Initialisierung Variablen
dateiliste = ls;
SP_ges = [];
% Schleife um mehrere Dateien einzulesen
for iDat = 6:9 %--> nicht i nutzen, das ist die imaginäre Einheit!
    load(dateiliste(iDat ,Smile,'-mat','*');
    SP = Daten(:,[1,2]);
    SP_ges = [SP_ges;SP];
    datestr(Daten(1,1)) %--> wohin soll das geschrieben werden? derzeit überflüssig

%Filterung
    gefiltert=sgolayfilt(SP_ges(:,[2]),3,171);

%Berechnungen
    ExcellStr{2,1} = 'Mittwelwert', mean(gefiltert) ;%liefert die Mittelwerte
    ExcellStr{3,1} = 'Summe', sum(gefiltert);%liefert die Summe
    ExcellStr{4,1} = 'Maximalwert';

    Spalte = iDat+1;
    ExcellStr{1,Spalte} = dateiliste(iDat);
    ExcellStr{2,Spalte} = mean(gefiltert); %liefert die Mittelwerte
    ExcellStr{3,Spalte} = sum(gefiltert);   %liefert die Summe
    ExcellStr{4,Spalte} = max(gefiltert);   %liefert das Maximum
end;

xlswrite('Ergebnisse.xls', ExcellStr );
 

_________________

LG
Martina

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2013, 13:54     Titel:
  Antworten mit Zitat      
klasse, er macht das, was ich will.... Wink

ein problem tritt dennoch auf:
ich kann aufgrund der datenmengen nur 3 dateien einlesen und diese berechnen lassen. er speichert auch schön die werte in die exceltabelle.
wenn ich dann die nächsten 3 dateien einlese und berechnen lasse schreibt er dann er die werte 4,5 und 6 und die davorrigen werte stehen nicht mehr in der tabelle Sad
scheinbar löscht matlab den speicher um wieder speicherplatz zu haben und löscht dabei das Cellarray. Evil or Very Mad
wie kann ich dies umgehen?
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 16.05.2013, 16:52     Titel:
  Antworten mit Zitat      
Hallo TomLustig,

Zitat:
ich kann aufgrund der datenmengen nur 3 dateien einlesen und diese berechnen lassen.

Bist du da sicher? Handelt es sich wirklich um Files im Gigabyte Bereich? Ansonsten wären solche Vermutungen nicht naheliegend.

Zitat:
scheinbar löscht matlab den speicher um wieder speicherplatz zu haben...

Matlab löscht nicht eigenmächtig irgendwelchen Speicher, weil es sich dann besser fühlt. Ohne ausdrücklichen Befehl macht Matlab gar nichts.
Bitte poste also den relevanten Abschnitt deines codes, so dass wir finden können, welche Befehle das von dir beobachtete Verhalten verursachen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
TomLustig

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2013, 17:35     Titel:
  Antworten mit Zitat      
eine Datei ist ca. 70mb groß mit 15x1,8Millionen werten. deswegen steigt matlab unter win7 32bit schnell aus.
ich weiß das matlab icht selbstständig was löscht, aber wenn die daten nach und nach berechnen lasse, sind die werte aus den vorhergehenden berechnungen weg Exclamation

Code:

close all;
akt_verzeichnis = pwd;

% Verzeichnis wahlen
path_messwerte = 'C:\BA\Messwerte';
cd( path_messwerte );
% Initialisierung Variablen
dateiliste = ls;
SP_ges = [];
ExcellStr = [];
% Schleife um mehrere Dateien einzulesen
for iDat = 1:2
load(dateiliste(iDat ,:),'-mat','*');
SP = Daten(:,2);
SP_ges = [SP_ges;SP];
datestr(Daten(1,1)) %Anzeige des Datums+Uhrzeit

%Filterung der Messwerte
gefiltert=sgolayfilt(SP_ges(:,[2]),3,171);

%Berechnungen
ExcellStr{2,1} = 'Mittwelwert', mean(gefiltert);%liefert die Mittelwerte
%ExcellStr{3,1} = 'Summe', sum(gefiltert);%liefert die Summe
ExcellStr{4,1} = 'Maximalwert', max(gefiltert);%liefert den Maximalwert

Spalte = iDat+1;
ExcellStr{1,Spalte} = dateiliste(iDat);
ExcellStr{2,Spalte} = mean(gefiltert); %liefert die Mittelwerte
%ExcellStr{3,Spalte} = sum(gefiltert); %liefert die Summe
ExcellStr{4,Spalte} = max(gefiltert); %liefert das Maximum
end;

xlswrite('Ergebnisse.xls', ExcellStr);

 
 
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.