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

Messwerte verschiedener Tage bearbeiten

 

Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 18.07.2013, 09:46     Titel:
  Antworten mit Zitat      
ok unique hab ich garnicht gebraucht.
Code:
%% Einlesen
Files=dir('TH31*');
Data=cell(size(Files));
for l=1:size(Files,1)
[~,~ ,raw] = xlsread(Files(l).name);
Data{l}=nan(size(raw,1)-2,2);
for k=3:size(raw,1)
Data{l}(k-2,1)=datenum([raw{k,1},' ',raw{k,2}],'dd.mm.yyyy HH:MM:SS');
end
Data{l}(:,2)=cell2mat(raw(3:end,3));
end
clear Files raw k l

%%Verarbeiten
for k=1:size(Data,1)
ind=[0;find(diff(floor(Data{k}(:,1))))];
for l=2:size(ind,1)
    Data{k}(ind(l-1)+1:ind(l),3)=cumsum(Data{k}(ind(l-1)+1:ind(l),2))*0.12;
end
end
clear ind k l

das wäre mein vorschlag.
die clear befehle sind nur um den workspace sauber zu halten. sind aber nicht nötig und erschwären um notfall das debuggen da du die originalvektoren nichtmehr sihst.
Private Nachricht senden Benutzer-Profile anzeigen


BastiM
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 15.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2013, 13:16     Titel:
  Antworten mit Zitat      
So....
nach ein paar Tagen des Herumprobierens bin ich jetzt ein bisschen weiter gekommen....

1. Ich schaffe es jetzt, meine Messwerte einzulesen, zu verändern, den plot zu verändern,

2. Bedingungen werden erstellt, die die Messwerte erfüllen müssen, falls sie diese erfüllen wird mit der jeweiligen Auswahl dann weiter verfahren, wie folgt!

Grundsätzlich habe ich die Messwerte(Leistung über Zeit- mehrere Tage)
und Simulationsergebnisse (Leistung über Zeit, mehrere Tage)

Dies ergibt mir prinzipiell zwei Kurven, einmal Mess- einmal Simulationskurve:

nun soll die Simulationskurve so optimiert werden, dass beide Kurven gut zusammen passen==> nun habe ich hier (und in Fachbuch) gesucht was es denn da für Möglichkeiten gibt...
Es wird hier immer wieder der polyfit genannt, allerdings auch auf verschiedene Anwendungen (Polynom- Interpolation vs. Regression) siehe: http://matheplanet.com/default3.htm.....6cd%3D5%26ved%3D0CFEQFjAE
gestoßen....
Vielleicht kann mir jemand nochmal sagen, was er hier verwenden würde...ich verstehe den polyfit so, dass er die Methode der least squares verwendet, aber im endeffekt interpoliere ich meine kurve doch nur oder?

Kurz gesagt: was für eine Funktion würde man für mein Problem(Sim-kurve mit Mess- kurve optimieren) verwenden...

hier dann auch noch gleich mein bisheriger code dazu:

habe ein x- cell: 288x3
y- cell(origin- values): 288x3

hieraus soll er dann halt y_poly erstellen

Code:


Grad = 3;

for p=1:1:3
   
    for q=1:1:length(x_poly)
        Poly =polyfit(x_poly{p},y_origin{p},Grad);

        y_polyn{k}=polyval(Poly,x_poly{k});

    end
end

 



in den cells steht die uhrzeit als laufvariable respektive der leistung als y- Wert drinnen;

aktuell liefert mir die ausgabe noch die Fehlermeldung: Error using polyfit (line 4Cool
X and Y vectors must be the same size.
hier is wohl noch n Schleifenfehler versteckt , da bin ich aber dran...

Danke schon mal!

LG Basti
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 22.07.2013, 13:43     Titel:
  Antworten mit Zitat      
wie wie die fehlermeldung schon sagt sind deine vektoren nicht gleich lang.
Zitat:
habe ein x- cell: 288x3
y- cell(origin- values): 288x3
stimmt also denke ich nicht. das kannst du mit hilfe des debugger aber leicht rausfinden.
Zitat:
ich verstehe den polyfit so, dass er die Methode der least squares verwendet, aber im endeffekt interpoliere ich meine kurve doch nur oder?
ersteres jahr. zweites nein. interpolieren würde zb mit interp1 gehen.
weitere möglichkeiten zum curvefitten wären zb
Code:
wenn aber deine daten die form eines polinoms haben kannst du ruig polyfit nehmen.
kleines beispiel:
Code:
Grad = 3;
x=-10:0.1:10;
y=x.^3-2*x.^2+5*x-7;

for p=1:1:3
    x_poly{p}=x;
    y_origin{p}=y+rand(1,201)*100
    for k=1:1:length(x_poly)
        Poly =polyfit(x_poly{p},y_origin{p},Grad);

        y_polyn{k}=polyval(Poly,x_poly{k});

    end
end
figure(1)
plot(x_poly{1},y_polyn{1},'r')
hold on
plot(x_poly{p},y_origin{p},'b')

ein beispiel zu lsqcurvefit hab ich hier schonmal gegeben:http://www.gomatlab.de/bilden-einer.....ighlight,lsqcurvefit.html
p.s.
kleine anmerkung. bei fehlern immer code posten mit dem man den fehler reproduzieren kann. dein code ist nicht lauffähig. und der fehler liegt im vektor das weis ich aber nur aus der fehlermeldung. anmerkung nummer 2: Poly ist bereits ein matlab interner befehl und sollte nicht als variablen namen dienen.
grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
BastiM
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 15.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2013, 13:53     Titel:
  Antworten mit Zitat      
ja, das ist so eine sache mit den lauffähigen codes...
müsste dann wohl den ganzen code posten(u. die excel- dateien die ich da schon per xlsread eingebaut hab...)
Code:


cd('C:\Users\Basti\Dropbox\Master Thesis - EEG Abschaltung.Kaskade\Bauer Anlage CSV Dateien');
[Dateiname,Pfad] = uigetfile('.xlsx');


% ref=fullfile(Pfad,Dateiname);
%  Data{:} = xlsread(ref);
%  
%  Data(:,1) = datestr (Data(:,1),'dd.mm.yyyy');

[data ,textdata] =xlsread(Dateiname);
[dim_l,dim_k]=size(data);
for i=1:1:dim_l
Data{i,1}=textdata{i,1};
Data{i,2}=data(i,2);
end


[dim_i,dim_k]=size(Data);



for i=1:1:dim_i

Data{i,3}=(Data{i,2}*(5/60));
end

a=1; b= 1;

for i=1:1:dim_i
   if i==1
    energie (b,1)=Data{i,3};
   b=b+1;
   else
       
    if strcmp (Data{i,1},Data{i-1,1}) ==1 && i~=dim_i
       
        energie (b,1)=Data{i,3};
       
        b=b+1;
       
    elseif strcmp (Data{i,1},Data{i-1,1}) ==0 || i==dim_i
%        
%         energie(b+1,1)=Data{i,4};
%        
        Sigi {a,2} = sum(energie);
       
        Sigi {a,1} = Data{i-4,1};
       
        a=a+1;
        b=1; energie =0;
    end
   end
end


for i=1:1:length(Sigi)
    Sigi_spezifisch {i,1} = Sigi{i,1};
   Sigi_spezifisch {i,2} = (Sigi{i,2}/41.62);
end

    l=1;

for i=1:1:length(Sigi_spezifisch)


   
    if Sigi_spezifisch {i,2} <= 3.0
   
    schlechterTag {l,1} = Sigi_spezifisch{i,1};
    schlechterTag {l,2} = Sigi_spezifisch{i,2};
   
    l=l+1;
   
    end
   
end


% [Dateiname,Pfad] = uigetfile('.xlsx');
%
%
% % ref=fullfile(Pfad,Dateiname);
% %  Data{:} = xlsread(ref);
% %  
% %  Data(:,1) = datestr (Data(:,1),'dd.mm.yyyy');
%
% [data ,textdata] =xlsread(Dateiname);
% [dim_l,dim_k]=size(data);
% for i=1:1:dim_l
% Data{i,1}=textdata{i,1};
% Data{i,2}=data(i,2);
% end


cd('C:\Users\Basti\Dropbox\Master Thesis - EEG Abschaltung.Kaskade\Netzanalysen');

[Dateiname,Pfad] = uigetfile('.xlsx');


% ref=fullfile(Pfad,Dateiname);
%  Data{:} = xlsread(ref);
%  
%  Data(:,1) = datestr (Data(:,1),'dd.mm.yyyy');

[data ,textdata1] =xlsread(Dateiname);
[dim_l,dim_k]=size(data);
for i=1:1:dim_l
THs{i,1}=textdata1{i,1};
THs{i,2}=textdata1(i,4);
end

for i=1:1:length(schlechterTag)
   
    for k=1:1:length(THs)
       
    if schlechterTag{i,1} == THs {k,1};
       
       
       
   Schwacheinspeisung {i,1} = THs{k,1};
   Schwacheinspeisung {i,2} = THs {i,2};
   
    end
   
  end
end
%  
%
cd('C:\Users\Basti\Dropbox\Master Thesis - EEG Abschaltung.Kaskade\Netzanalysen');

[Dateiname,Pfad] = uigetfile('.xlsx');

[data2 ,textdata2] =xlsread(Dateiname);
[dim_l,dim_k]=size(data);
for i=1:1:dim_l
Messwerte{i,1}=textdata2{i,1};
Messwerte{i,2}=textdata2{i,2};
Messwerte{i,3}=data2(i,1);
end

[dim_i,dim_z]=size(Messwerte);

n=1;

for i=1:1:length(Schwacheinspeisung)

for k=1:1:dim_i
    if Schwacheinspeisung{i,1} == Messwerte {k,1}
   
        x_poly {n,i} = Messwerte {k,2};
       
        y_origin {n,i} = Messwerte {k,3};
       
        n=n+1;
           end
   
end
 n=1;
end


% Grad = 3;
%
% for p=1:1:3
%    
%     for q=1:1:length(x_poly)
%         Poly(q,p) =polyfit(x_poly{q,p},y_origin{q,p},Grad);
%
%         y_polyn{k}=polyval(Poly,x_poly{k});
%
%     end
% end


 




in deinem beispiel hattest du jetzt schon eine funktion angegeben, hab ich aber bei meinen messwerten nicht wirklich....

ich glaub eher das problem liegt nicht an den ungleichen vektoren (x_poly; y_origin) sondern dass ich sie falsch abtaste mit der schleife....
bzw. was speichert er denn in Poly genau ab, wenn ich das mit einfachen beispielen versuche, und am Grad drehe, stehen einmal zwei zahlen drinnen, manchmal fünf, je nachdem...

ich glaube er hat hier noch ein problem die beiden cell- arrays in ein verhältnis zu bringen, kann das sein?

Bauer_PV_Anlage_webbox_2.xls
 Beschreibung:

Download
 Dateiname:  Bauer_PV_Anlage_webbox_2.xls
 Dateigröße:  395.5 KB
 Heruntergeladen:  561 mal
THs_gesammelt.xls
 Beschreibung:

Download
 Dateiname:  THs_gesammelt.xls
 Dateigröße:  660 KB
 Heruntergeladen:  1804 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 22.07.2013, 13:56     Titel:
  Antworten mit Zitat      
Zitat:
ich glaub eher das problem liegt nicht an den ungleichen vektoren (x_poly; y_origin)

das glaube ich doch Smile setz mal den debugger vor polyfit und guck dir die beiden matritzen mal an:)
und zur lauffähigkeit. da ich ja bei uigetfile selber auswählen muss welche datei du da zu öffnen hast kann ich das so auch nicht laufen lassen Smile
kleiner tipp. bei größeren projekten solltest du kommentare dazu schreiben damit du selber in 3 wochen noch weist was du machen musst und was der code macht.
edit:
dein code siht jetzt aber anders aus als der den du oben gepostest hast.
hier benutzt du bei polyfit eine 2 dimensionale cell. oben nicht.
Private Nachricht senden Benutzer-Profile anzeigen
 
BastiM
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 15.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2013, 14:11     Titel:
  Antworten mit Zitat      
Ok, würde ich gerne aber auch die Debug- Option hab ich bisher noch nicht verwendet...
Private Nachricht senden Benutzer-Profile anzeigen
 
BastiM
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 15.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2013, 14:16     Titel:
  Antworten mit Zitat      
Winkow hat Folgendes geschrieben:
Zitat:
ich glaub eher das problem liegt nicht an den ungleichen vektoren (x_poly; y_origin)

das glaube ich doch Smile setz mal den debugger vor polyfit und guck dir die beiden matritzen mal an:)
und zur lauffähigkeit. da ich ja bei uigetfile selber auswählen muss welche datei du da zu öffnen hast kann ich das so auch nicht laufen lassen Smile
kleiner tipp. bei größeren projekten solltest du kommentare dazu schreiben damit du selber in 3 wochen noch weist was du machen musst und was der code macht.
edit:
dein code siht jetzt aber anders aus als der den du oben gepostest hast.
hier benutzt du bei polyfit eine 2 dimensionale cell. oben nicht.


ja, hab in der zwischenzeit das ganze ein wenig verändert, ohne das es natürlich läuft bisher Smile....

beim uigetfile müsste man den pfad noch aktualisieren, das stimmt...

kommentare werde ich anfügen!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 22.07.2013, 14:17     Titel:
  Antworten mit Zitat      
du musst nur auf den strich vor deiner code zeile klicken um die haltemarke zu setzen. steht aber auch in der doc. wie man den debugger benutzt solltest du dir mal angucken. programmieren ohne debugger ist bei größeren projekten ehr schlecht..
Private Nachricht senden Benutzer-Profile anzeigen
 
BastiM
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 15.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2013, 14:28     Titel:
  Antworten mit Zitat      
ok, soweit mit den breakpoints hatte ich das schon, aber wenn ich "run" mache läuft das programm eben bis zum ersten break- point
dann "continue" clicken, bis zum weiten break- point, und danach kommt auc hwieder gleicher fehler

X and Y vectors must be the same size.

Ich meinte wie kann ich mir da die Matrizen ansehen wie Du gesagt hast...
also um da evlt. den Fehler zu erkennen....

Ich check grad immer noch nicht wirklich mit welcher schleife ich die polyfit aufbaun muss

hab x- cell( 3 Spalten, n- Zeilen(hier genau 288) und genauso y- cell( 3 Spalten, n- Zeilen(hier genau 288)

...da komm ich grad nicht wirklich dahinter...

Sorry, sind für Profis Anfängerfragen, aber manchmal steht man viel. auch einfach aufm Schlauch...
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 22.07.2013, 14:30     Titel:
  Antworten mit Zitat      
wenn er anhällt guckst du dir im workspace die variablen an.
Private Nachricht senden Benutzer-Profile anzeigen
 
BastiM
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 15.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2013, 14:37     Titel:
  Antworten mit Zitat      
genau!

und da tut sich eben gar nix bei meinen zwei polyfit- X und Y- Variablen- Matrizen

sind beide (in dem FAll jetzt) 288x3 cell arrays....

darum meinte ich vorher, dass ich die polyfit funktion einfach nicht richtig anwende...

sonst müsste ich ja beim debuggen sehen, dass er irgendwann die beiden X,Y so verändert dass sie tatsächlich gleich sind.....
hab jetzt drei breakpoints gesetzt, und bis zur Fehlermeldung ändern sich X,Y nicht....
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 22.07.2013, 14:43     Titel:
  Antworten mit Zitat      
du hast also ein 288*3 cell array? was ist denn in den cells drin. einzelne werte? (keine gute datenstruktur dann ^^ dafür sind matritzen da) dann entwerder x_poly{:,p} oder vorher nochmal den weg über cell2mat gehen. sonst bekommt er nähmlich als eingabe 288 matritzen und nicht einen einzelnen vektor. ich bin davon ausgegangen das du eine 1x3 cell hast mit jeweils einer 1x288 matrix darin.
Private Nachricht senden Benutzer-Profile anzeigen
 
BastiM
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 15.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2013, 15:30     Titel:
  Antworten mit Zitat      
nee, keine chance, funzt gerade nicht....
um mich da jetzt mal langsam ranzutesten....

der plant ist, ich versuch polyfit erstmal mit einzelnen nx1 arrays....

dh. ich müsste jetzt meinen cell-array als double konvertieren....
aber wie???

meine versuche bisher!

mach ich mit :

Code:


for i=1:1:288
x_test(i,1) = str2double(x_poly{i,1});
end

 


er macht aber aus dem string kein double sondern als ergebnis hab ich jetzt NaN in meinem x_test- vektor

cell2mat liefert mir folgendes....

Code:

Cell contents reference from a non-cell array object.

Error in cell2mat (line 37)
    if isnumeric(c{1}) || ischar(c{1}) || islogical(c{1}) || isstruct(c{1})


 


ich glaub ich werd langsam verrückt hier!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 22.07.2013, 15:39     Titel:
  Antworten mit Zitat      
hast du etwa strings in deinen cells? wenn ja soltest du nochmal am daten einlese vorgang arbeiten. messwerte sollten als double in einer matrix sein. bei mehreren verschiedenen messwert gruppen kann man die matritzen dann zur übersichtlichkeit in einer cell speichern.
Private Nachricht senden Benutzer-Profile anzeigen
 
BastiM
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 15.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2013, 08:48     Titel:
  Antworten mit Zitat      
So, ich bins nochmal!

also, ich habe jetzt dieses komische Polyfit- Problem nochmal versucht....

wenn ich mir selber einfache double arrays baue(einmal n x- double für die Zeit, y- double für die Leistung z.B.) dann funktioniert das ganze einwandfrei!!!

So, nun hab ich aber, wie bereits oben geschildert:

einen 288x3 cell- array(ich hoffe man sagt das jetzt so, für mich siehts aus wie ne matrix, is aber anscheinend keine) in dem die x- Werte (5- Minuten Zeitschritte 00:05:00 ; 00:10:00 etc.) als String gespeichert sind


einen 288x3 cell- array für die y- Werte, nachdem es ein cell Array ist vermutlich auch als string oder?

So, logischerweise kann Mr. polyfit nur mit numerischen zahlen auf der x/ y- Achse arbeiten, darum sollte ich jetzt meinen Cell- Array in einen double array convertieren....

Soweit so gut, aber der Weg dahin klappt einfach noch nicht so ganz


Erstens hab ich versucht, für die y- Werte:

Code:

for i=1:1:288
y_test(i,1) = str2double(y_poly{i,1});%y- poly ist hier mein cell- array, erste spalte
end
 


macht er, ohne meckern, stehen halt dann im double array nur NaN's drinnen

alternativ diesen befehl:

Code:

for i=1:1:288
 y_test(i,1) = cell2mat(y_origin{i,1}); %auch wieder für die erste spalte mal als test
 end
 


auch kein Ergebnis

beim x- cell Array folgendes Probiert:


Code:

for i=1:1:288
c(i,1) =datenum(x_poly{i,1}, 'HH:MM:SS');  % datum in ein numerical convertieren
plot(c,b);              % hier wollt ich versuchen ob das ganze plotfähig ist
hold on;
datetick('x','HH:MM:SS')
end
%%%Ergebnis: er erstellt nich mal den c- Vektor...
 


Wo kann hier noch ein Fehler liegen?
Also wenn möglich würde ich schon gerne meine Struktur (nx3 array, halt dann als double- beibehalten)

Wenn das behoben ist kommt das nächste Problem, den Polyfit mit einem anderen array als nx1 zu erstellen(das hat ja bereits geklappt...)

Ok, ist soweit klar geworden wo das Problem liegt?

Merci!
Basti
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3  Weiter

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.