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

curve fit

 

Christian1985
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 25.08.10
Wohnort: Wien
Version: ---
     Beitrag Verfasst am: 25.08.2010, 11:27     Titel: curve fit
  Antworten mit Zitat      
Hallo Leute!

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?

Vielen Dank, liebe Grüße Christian
Private Nachricht senden Benutzer-Profile anzeigen


Coja
Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 20.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2010, 11:47     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Christian1985
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 25.08.10
Wohnort: Wien
Version: ---
     Beitrag Verfasst am: 25.08.2010, 12:04     Titel:
  Antworten mit Zitat      
Vielen Dank für deine Antwort,

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?

thx, lg Christian

lk_enercon.txt
 Beschreibung:

Download
 Dateiname:  lk_enercon.txt
 Dateigröße:  269 Bytes
 Heruntergeladen:  580 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Coja
Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 20.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2010, 12:38     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Christian1985
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 25.08.10
Wohnort: Wien
Version: ---
     Beitrag Verfasst am: 25.08.2010, 12:54     Titel:
  Antworten mit Zitat      
Die Daten werden noch um einiges mehr Smile

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.

Lg
Private Nachricht senden Benutzer-Profile anzeigen
 
Coja
Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 20.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2010, 13:26     Titel:
  Antworten mit Zitat      
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 Wink )
.
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

Christian1984_Abb.jpg
 Beschreibung:

Download
 Dateiname:  Christian1984_Abb.jpg
 Dateigröße:  52.15 KB
 Heruntergeladen:  1155 mal
Christian1984_Polyfir.m
 Beschreibung:

Download
 Dateiname:  Christian1984_Polyfir.m
 Dateigröße:  116.43 KB
 Heruntergeladen:  607 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Christian1985
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 25.08.10
Wohnort: Wien
Version: ---
     Beitrag Verfasst am: 26.08.2010, 02:31     Titel:
  Antworten mit Zitat      
Danke für dein Beispiel 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?

Gute Nacht und liebe Grüße Christian
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.08.2010, 07:04     Titel:
  Antworten mit Zitat      
Als Alternative kann ich vielleicht noch die Verwendung von Splines vorschlagen. Daddurch wird das Überschwingen verhindert.

Code:

% Geschwindigkeiten
v =[3.1600    3.5600    3.8800    4.3300    4.8900    4.7900    4.7300    5.1500    4.7900    4.4100    4.1800    4.8700    3.9400    4.3100    4.4700    3.8900    3.7000    3.2900    2.8600    4.2400    4.8800    5.3600    5.0000    3.5900    3.7700];

p = [   22.4000   31.2000   41.4000   62.7000  105.2000   92.8000   81.6000  114.6000   81.0000   61.1000   49.4000   84.5000   36.1000  50.4000   58.6000   37.1000   28.2000   15.5000    8.4000   52.1000 84.5000  118.5000   88.2000   23.7000   27.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');

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Christian1985
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 25.08.10
Wohnort: Wien
Version: ---
     Beitrag Verfasst am: 26.08.2010, 10:27     Titel:
  Antworten mit Zitat      
Super, das schaut schon echt gut aus!

Vielen Dank für eure Unterstützung! Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Coja
Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 20.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.08.2010, 12:58     Titel:
  Antworten mit Zitat      
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:
Code:

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
Code:
Da du damit die Werte der Häufigkeitsverteilung erhälst.
Versuch mal dein Glück Wink
vg
Coja
Private Nachricht senden Benutzer-Profile anzeigen
 
Christian1985
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 25.08.10
Wohnort: Wien
Version: ---
     Beitrag Verfasst am: 26.08.2010, 18:05     Titel:
  Antworten mit Zitat      
danke für die infos!

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.

was sagt ihr dazu?

Lg Christian

curvefit.jpg
 Beschreibung:

Download
 Dateiname:  curvefit.jpg
 Dateigröße:  61.96 KB
 Heruntergeladen:  1023 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.08.2010, 18:29     Titel:
  Antworten mit Zitat      
Hallo,

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.

viele Grüße
Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Coja
Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 20.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.08.2010, 21:06     Titel:
  Antworten mit Zitat      
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 Wink
vg
Coja
Private Nachricht senden Benutzer-Profile anzeigen
 
Christian1985
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 25.08.10
Wohnort: Wien
Version: ---
     Beitrag Verfasst am: 27.08.2010, 09:50     Titel:
  Antworten mit Zitat      
Hoi!

die Erhöhung der Abstände in den Splines hat schon mal gut geholfen!

ich hab mir jetzt noch eine Art Glättungsfunktion gebaut, mit der die Approximierte Kurve schon wesentlich besser aussieht.

Der Code sieht wie folgt aus:

Code:

k = spline(c,par,c)'
l=k
n=length(k)
for i=4:(n-3)
    l(i,1)=(k(i-3,1)+k(i-2,1)+k(i-1,1)+k(i,1)+k(i+1,1)+k(i+2,1)+k(i+3,1))/7
end


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.

VG Christian

Auswertung_1.jpg
 Beschreibung:

Download
 Dateiname:  Auswertung_1.jpg
 Dateigröße:  48.87 KB
 Heruntergeladen:  1040 mal
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.