ich bin noch relativ unvertraut, was die Anwendung von Matlab angeht und hoffe, dass die Frage ncht schon gestellt wurde - finden konnte ich sie nicht.
Ich habe folgende Aufgabe zu lösen:
Bei einer Windgeschwindigkeitsmessung einer Windkraftanlage liegt eine nx2 matrix vor - 2 Spalten, n zeilen. Die erste Spalte enthält die Geschwindigkeit, die zweite die erbrachte Leistung der Anlage.
Generell wird die Leistung einer Windkraftanlage durch die Leistungskurve beschrieben, die seitens des Herstellers garantiert ist und messtechnisch erfasst wurde. Dieser liegt keine mathematische Funktion zugrunde sondern ist das resultat einer physikalischen Messung.
Nun möchte ich anhand dieser Messdaten die Kurve selbst zeichnen. Ich konnte heraus finden, dass matlab eine curve fitting toolbox anbietet - die ist allerdings kostenpflichtig, was mich als student abschreckt. Ich kann mir nicht vorstellen, dass für diese normale Aufgabe kein Standardbefehl zur Verfügung steht. Ich konnte Funktionen wie nlinfit, polyfit usw finden, aber was ich hierbei erhalten würde, wären funktionen, die meine Daten möglichst gut approximieren - soweit ich das verstanden habe. Allerdings kommen in der Datenreihe einige Werte doppelt vor, zb. einmal windgeschwindigkeit: 4.00 und Leistung 150, beim anderen mal Windgeschwindigkeit 4.00 und Leistung 147 /was eine exakte Lösung durch ein Gleichungssystem bereits ausschließt)
Ich möchte nach dem least square ansatz einfach eine kurve Zeichnen, die mit den Messdaten möglichst gut zusammen passt und eine gewisse Glättung der Datenwerte bietet. Sprich, es soll nicht jeder Datenwert durch die Kurve erfüllt werden, sondern eine Mittelung/Glättung erfolgen
wisst ihr, welche funktionen hierfür zur verfügung stehen?
Hallo,
also: eine Leistungskennline für WKA stellt ja die abgebene Leistung (P_el) über der Windgeschwindigkeit (v_w) dar. Befehle wie polyfit und lsqcurvefit helfen dir bestimmt weiter.
Ich habe mal ein Programm (in Labview) geschrieben, welches dir einige Approximationen von Leistungskennlinien für Windparks/WKA ermöglicht. Dabei müsstest du dich an das ISET/IWES in Kassel wenden. Das Programm liest die Daten aus einer Exceldatei ein und gibt dir die Kennlinie und die Parameter (für die Rekonstruktion) aus.
Falls du noch Fragen hast, kannst du dich nochmal melden, ggf. auch die Daten hochladen und ich würde die Approximation (nach LS) für dich vornehmen.
vg
Coja
Polyfit sucht soweit ich das verstanden habe eine polynomfunktion vom grad n, die die werte erfüllt. Ich hab jetzt ein file hoch geladen, was einen Teil der Messung darstellt. Die Geschwindigkeit 4.79 kommt hierbei zweimal mit unterschiedlichen leistungswerten vor. Das machte bisher Probleme, da keine Funktion zwei unterschiedliche Werte an der selben Stelle haben darf.
Ich weiß noch nicht, wie ich eine Art Glättung mit lsq hin bekommen kann. Danke auch für dein Angebot, mir die Daten auszuwerten. Da die Auswertung Teil meiner Aufgabe ist, muss ich sie selbst durchführen. Ich blick mich auch nicht ganz bei der Beschreibung der funktion lsqcurvefit durch - könntest du mir eventuell zeigen, wie ich diese passend auf meine Daten anwende?
Hallo,
also mit den paar Daten lohnt sich das nicht^^ Nicht einmal der prinzipieelle Ansatz. Falls du lsqcurvefit nutzen willst, so musst du eine Funktion vorgeben und lässt dir die Parameter dazu bestimmten.
Zum Beispiel:
P(v)=a*exp(b*v)-c
Um was für eine Anlage handelt es sich denn? E66? E70? E82?
vg
Coja
also im Grunde soll ich die gesamte Leistungskurve nachzeichnen.
Die Daten bilden nur einen Auszug, mit den ich mal algorithmen probieren kann.
Ich weiß eben im Grunde keine Funktion, deren Parameter ich bestimmen will, sondern hätte eigentlich eine aus diesen Daten eine neue Matrix, die die ermitteltete Leistungskurve von 0 bis 25 m/s in 0.1 m/s intervallen darstellt
also 251 zeilen, 2 spalten
Oder komm ich dabei nicht herum, das ganze mit einer Funktion zu approximieren, die ich dann wiederum auf Geschwindigkeitswerte anwenden kann, um so zu meiner Leistungskurve zu kommen.
Es handelt sich um eine E66, die Daten selbst sind aber nur exemplarisch, da ich Druck und Temperatur auch noch einrechnen und die Werte entsprechend korrigieren muss.
Später soll die Kurve mit einer Weibull verteilten Geschwindigkeitsverteilungsfunktion multipliziert werden, um den erwarteten Energieertrag zu ermitteln.
Hallo,
also wenn du dann die Weibullverteilung (kleiner Tipp: Befehl hist())
noch einbeziehen willst, dann müsstest du eigentlich immer auf alle Geschwindigkeitswerte interpolieren (ist aber wenn du es geschickt machts nicht erforderlich, weil du ja dein v-Werte schon vorgibst.
Ich hab dir mal eine Abbildung angeängt, wie das dann aussehen könnte (ist natürlich kopiergeschützt )
.
In dem angehängten m-File hab ich mal ein Fitting mit polyfit vorgenommen (nicht für Messdaten). ab Zeile 7000 wirds interessant.
vg
Coja
in dem m- file hast du mit polyfit eine polynomfunktion gefunden, die die Werte möglichst gut erfüllt, richtig? mit polyval hast du dann den wert von v mit hilfe der polynomfunktion ermittelt. Nun schwingt die funktion allerdings deutlich über. Ich bräuchte eine Funktion, die eher glättend wirkt, damit ich eine möglichst realistische Leistungskurve anhand der Messdaten erstelle.
In dem file, dass ich hoch geladen habe, sind die geschwindigkeiten von ca 3 bis 5 m/s, könntest du mir vielleicht zeigen, wie man hierfür eine entsprechende curve einpassen würde? beispielsweise in 0,1 m/s schritten von 3.0 bis 5.0 m/s?
Bei der Weibullverteilung bin ich mir auch noch nicht ganz sicher, mit welchen Parametern ich rechnen soll, bzw. ob ich die funktion selbst rein klopfen sollte. Die Daten hierfür würde ich vom Buch "Windkraftanlagen" von Erich Hau verwenden, sprich phi=1-e^-((v/A)^k) mit k=2, A weiß ich noch nicht so genau
Wichtiger wäre für mich erstmals die Leistungskurve zu erstellen - ich hoffe, dass das bald klappt! Bist du im Bereich Windkraft tätig, da du mit der Materie vertraut bist?
Als Alternative kann ich vielleicht noch die Verwendung von Splines vorschlagen. Daddurch wird das Überschwingen verhindert.
Code:
% Geschwindigkeiten
v =[3.16003.56003.88004.33004.89004.79004.73005.15004.79004.41004.18004.87003.94004.31004.47003.89003.70003.29002.86004.24004.88005.36005.00003.59003.7700];
p = [22.400031.200041.400062.7000105.200092.800081.6000114.600081.000061.100049.400084.500036.100050.400058.600037.100028.200015.50008.400052.100084.5000118.500088.200023.700027.5000];
v = v';p = p';
% Vektor mit Stützstellen
b = 2.5:0.5:5.5;
% Parameteranpassung
phi = spline(b,eye(length(b)),v);
par = phi'\p;
% Ausgabe
k = spline(b,par,2.5:0.01:5.5);
plot(v,p,'+');
hold on;plot(2.5:0.01:5.5,k,'r');
title('Approximation durch Splines');
Hallo Thomas,
Erich Hau ist sehr gut für den Einstieg.
Zum einen könntest du die Spline-Funktion nutzen, zum anderen auch eine Weibullverteilung mit einem Vorfaktor (um die Leistungskennlinie darzustellen, da eine Verteilungsfunktion die Fläche 1 hat). Das klappt bei Messdaten meistens sehr gut. Dafür musst du aber auf die Funktion lsqcurvefit zurrückgreifen. Mit Hilfe dieser Funktion kannst du auch die Parameter für die Wind-Weibullverteilung ermitteln, also A und k. Falls du das vorhast solltest du dir aus deinen Windgeschwindigkeiten ein Histogramm erstellen zum Beispiel so:
Wenn du nun noch eine Normierung(Gesamtfläche 1) vornimmst, hast du die Weibullverteilung für den Standort. Um mit lsqcurvefit bzw. lsqnonlin nun die Parameter zu bestimmen empfehle ich dir den Befehl
ich möchte eine Weibullverteilung vorgeben, da die Messwerte nun in den Sommermonaten gesammelt wurden, die nicht wirklich für das gesamte Jahr repräsentativ sind.
ich hab jetzt die spline funktion an den ganzen datenpoll angewandt und bin dabei wieder auf das Problem gestoßen, dass die Funktion sehr wellig ist.
Wisst ihr eventuell, wie ich das unterbinden kann?
anbei hab ich die figure angehängt. Blau ist die Sollkennlinie, Grün die Messpunkte und Rot die KL, die durch splines ermittelt wurde. Die reale Kennlinie kann nicht derartige zacken haben.. , ich habs dann bei 17m/s abgeschnitten, da die Messdaten danach völlig verkehrt interpretiert wurden. Näheres siehe pic.
wie hast du denn die Sollkennlinie bestimmt? Oder war die vorgegeben? Die Splineapproximation kannst du durch die Stützstellen verändern. Je näher die Stützstellen anneinander sind desto "zackiger" wird die Kurve. Die Stützstellen müssen auch nicht äquidistant sein. Da wo du wenig Messpunkte hast sollte der Abstand größer sein.
Erhöhe erst mal den Abstand zwischen den Stützstellen, dann wird die Kurve gleichmäßiger.
Hallo,
das sind aber immer noch recht wenig Messwerte (15min oder 10min Mittelwerte?). Du könntest ja die Ausreißer Datenpunkte löschen, vll war die Anlage oder die Messung dort defekt oder der Wind hat sehr schnell gedreht.
Die beste Möglichkeit eine schöne Kurve zu bekommen sehe ich jedoch darin, wenn du die Leistungswerte für ein bestimmtes Intervall (also von 0 bis 1m/s, von 1 bis 2m/s, usw.) mittelst und diese Kurve dann durch ein Polynom oder eine Splinefunktion approximierst. Das sieht schön aus und liefert dazu noch gute Werte
vg
Coja
Nur die Ausreißer sollte ich noch eliminieren. Ja, die blaue KL ist vorgegeben, die Rote wurde mit splines ermittelt, und die schwarze ist die, auf die auch noch die glättung angewandt wurde.
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.