Degradation bei festem Ziel < Sonstiges < Hochschule < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 11:13 Mo 15.03.2010 | Autor: | Hanlif |
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Guten Tag zusammen,
es geht um die regelmäßige Alterung von Solarzellen. Die meisten Hersteller garantieren, dass die Module nach 25 Jahren Betriebsdauer noch 80% ihrer Nennleistung erbringen - bei anderen sind es 75%, bei wieder anderen 80% nach 20 Jahren usw.
Ich möchte nun gern die regelmäßige jährliche Degradation errechnen, die bei festen Zielwerten (z.B. 85% des Ausgangswertes bei 22 Operationen) notwendig ist. Sicher gibt es eine einfache Formel dafür?
Mein Ziel ist es, einen einfachen kostenlosen Alterungsrechner (Javascript) für Solarmodule (für Interessierte: www.sonnenstrom-rechner.de) ins Netz zu stellen, anhand dessen die Solardach-Besitzer mit wenigen Eingaben Soll und Ist ihres Solarertrags vergleichen können.
Vielen Dank im Voraus!
Hanlif
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 13:20 Mo 15.03.2010 | Autor: | leduart |
Hallo
Für eine Formel müsste man nicht nur die Garantiezeit kennen, sondern die Art der Degratation, also ist sie linear oder exponentiell (oder noch was anderes.) Dazu müsste man mindestens ein oder 2 Zwischenwerte kennen. also Leistung etwa nach 5 und 10 Jahren. Ich denke, es wird eher ein exponentieller Abfall sein.
Wenn das der Fall ist, ist die Nennleistung [mm] N(t)=N_0*e^{-\alpha*t}
[/mm]
alpha bestimmt man dann aus [mm] ln(N(t1)/N_0)=-\alpha*t1
[/mm]
im Beispiel nach 20Jahren 80% also t1=20y
[mm] N(20y)/N_0=0.8 \alpha=-ln(0.8)/20=0.01116
[/mm]
Damit hättest du nach 7 Jahren [mm] N(7y)=100%*e^{-0.01116*7}=92.5%
[/mm]
Aber ob das exponentiell ist ist natürlich nicht klar!
Hast du ausser den 20y bzw. 25y irgend einen weiteren Wert?
Wenn es linear abfällt hast du einfach jedes Jahr dieselbe Degradiereun also etwa in 20 Jahren 20% in 1 Jahr 1% in 7Jahren 7% also noch 93% für das Beispiel
Gruss leduart
Gruss leduart
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 14:39 Mo 15.03.2010 | Autor: | Hanlif |
Danke für die Antwort, Leduart,
sieht so aus, als hätte ich meine Frage etwas verständlicher formulieren können, entschuldige.
Anfangswert ist 100% der Nennleistung.
Die chemische Rekombination der Kristalle in der Solarzelle geschieht nach gleichbleibenden prozentualen Raten.
Im ersten Jahr gehen also z.B. 0,355% von 100% verloren, macht 99,645%.
Im zweiten Jahr gehen dann 0,355% von 99,645% verloren - usw.
I.d.R. liegt die Garantie bei 80% auf 25 Jahre, aber eben nicht immer. Dauer und Zielwert sollten die User daher frei eingeben können.
Zwischenwerte gibt es leider nicht - genau die möchte ich am Ende errechnen: Damit der Solardach-Betreiber den jeweils aktuellen Stand seiner Anlage mit der rechnerisch aus der Herstellergarantie zu erwartenden Leistung vergleichen kann.
Jetzt müsste ich nur noch deine schöne Formel auf die Grundrechenarten meiner beschränkten Javascript-Kenntnisse herunterbrechen ...
In der Art von: Garantiejahre = t
Zielwert = x% (wird beides vom User eingegeben)
a = Alterungsrate
formelformelformel (t,x) = a
Alter der Anlage (Bezugsjahr) = b (wird vom User eingegeben)
Soll-Leistung = s
formelformelformel (a,b) = s
Sorry für mein Laien-Kauderwelsch, aber besser kann ich im Moment nicht ausdrücken, was ich meine ...
Ob so etwas geht? Hast du evtl. eine Idee dazu?
Danke noch einmal!
Farlif
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 15:28 Mo 15.03.2010 | Autor: | leduart |
Hallo
Was du schilderst ist genau ein exponentieller Abfall der Leistung, also das was ich geschrieben habe.
Eingaber Dauer t in Jahren, Ziel in Prozent x
daraus berechnest du wie ich geschrieben habe [mm] \alpha=\bruch{ln(x/100)}{t}
[/mm]
Alter der Anlage b in Jahren
dann ist deine Formel: Nennleistung bei b: [mm] N=100*e^{-\alpha*b}
[/mm]
die Funktionen kennt java alle. (ln könnte auch log heissen, das musst du nachsehen)
Wenn du die % pro Jahr ausrechnen willst, die nenn ich a,
Dann hast du [mm] (1-a/100)^t=x [/mm] und damit
[mm] a=(1-x^{\bruch{1}{t}})*100
[/mm]
Wenn du a hast kannst du mit [mm] N=(1-a)^b [/mm] die nennleistung nach b Jahren ausrechnen.
Alles einfache java Formeln.
Überprüf deine Programmierung jeweils, indem du für b=t einsetzt da sollte x rauskommen.
wenn du t/2 einsetzt sollte [mm] \wurzel{x}*10 [/mm] rauskommen.
Beispiel Garantiezeit t=25 Ziel 75% gesucht nach b=8y
Erster Weg: [mm] \alpha=ln(0,75)/25=-0.0115
[/mm]
[mm] N(8y)=100%*e^{-0.0115*8}=91,2%
[/mm]
2. Weg:
[mm] a=(1-0.75^{0.04})*100=(1-0.98856)*100=1.14%
[/mm]
[mm] N(8y)=(1-0.0114)^8*100%=91.2%
[/mm]
Versuch selbst die Proben.
Gruss leduart
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 16:20 Mo 15.03.2010 | Autor: | Hanlif |
Danke, Leduart,
ich versuch's zwar nur in Javascript, nicht in Java (soweit kann ich das alles gar nicht), aber egal: Du hast mir auf jeden Fall sehr geholfen!
Und: Tolles Forum! :)
Beste Grüße,
Hanlif
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 12:44 Mi 17.03.2010 | Autor: | Hanlif |
Hallo Leduart,
danke nochmal. Ich habe die beiden Formeln der ersten N-Berechnung jetzt in Javascript umgesetzt, step by step, damit jeder Fehler sofort erkennbar ist. Aber es kommt ein falsches Ergebnis heraus.
Wenn du mal schauen wollen würdest?
function calcAge()
{
var gY = parseFloat(document.forms.alterungswert.garantyear.value);
//gY holt das Garantiejahr t, hier 25
var gP = parseFloat (document.forms.alterungswert.garantpercent.value);
//gP holt die Garantieprozente x, hier 80
var gL1 = gP/100
//Erste Formel: Term in der Klammer überm Bruchstrich
var gL = Math.log(gL1);
//gL für den Logarithmus überm Bruchstrich
var gL2 = gL/gY;
//gL2 für den Bruch insgesamt
var rV = parseFloat(document.forms.alterungswert.alter.options[document.forms.alterungswert.alter.selectedIndex].text);
//rV returnValue holt das Alter in Jahren, das b im Exponent der zweiten Formel
var gL3 = -gL2
//Zweite Formel: gl3 ist das negative Alpha im Exponent
var gA = rV*gL3
//gA ist der Exponent insgesamt
var gA2 = Math.exp(gA);
//Eulersche Zahl mit Exponent
var gA3 = gA2*100;
//gA3 ist die garantierte Alterung der zweiten Formel insgesamt, N
return gA3;
//hierbei sollte jetzt bei 20 Jahren so etwas wie rund 83,651 herauskommen. Leider kommt aber rund 119,554 heraus. Habe ich mich geirrt? Etwas falsch gemacht? Ist die Formel noch nicht perfekt, rechnet sie etwas anderes aus?
}
Dank und Grüße,
Farlif
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 13:35 Mi 17.03.2010 | Autor: | Hanlif |
Da die obige Formel hochzählte statt runter, habe ich das Programm mal intuitiv die Jahreszahl mit -1 multiplizieren lassen. Ich könnte es nicht erklären, aber jetzt stimmen die Ergebnisse.
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 15:23 Mi 17.03.2010 | Autor: | leduart |
Hallo
die Zeile
var gL3 = -gL2
ist falsch
gL2ist schon das negative [mm] \alpha
[/mm]
denn log(0.8)<0 alle logarithmen von Zahlen kleiner 1 sind negativ.
Deshalb ist dann dein Ergebnis richtig, wenn du negative Zeiten einsetzt.
also einfach nur var gA = rV*gL2
setzen und dein programm sollte richtig laufen.
Gruss leduart
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 16:12 Do 18.03.2010 | Autor: | Hanlif |
Ah, gut dass wir darüber gesprochen haben! Wieder was dazu gelernt :-D
Danke!
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 17:25 Fr 19.03.2010 | Autor: | Hanlif |
Hallo, vielen Dank,
ich entschuldige mich, wenn ich hier etwas falsch mache - ich habe eine ähnliche Frage schon einmal gestellt, die ist aber zeitlich abgelaufen.
Mir liegt die Frage aber doch auf der Seele, das sie sehr wichtig für meinen Rechner ist. Es geht um die "Prozent pro Jahr" aus der letzten Antwort.
Prozent pro Jahr - ich habe das so verstanden, dass die Formel die jährliche Degradationsrate bezeichnet.
Davon ist in meinem Programm nun Einiges abhängig.
Deshalb habe ich die zweite Formel, die nach a aufgelöst wird (die erste hat Leduart mir ja dankenswerterweise erläutert), wieder in Javascript umgesetzt, step by step.
Aber ich bekomme dabei Werte heraus, die so nicht sein können.
Habe ich es falsch umgesetzt? Dreimal kontrolliert.
Oder bezeichnet das a der Formel doch etwas anderes?
Bitte, ich würde mich über Hilfe wirklich freuen.
var gY1 = parseFloat(document.forms.alterungswert.garantyear.value);
//holt die Garantiedauer t in Jahren
var degR1 = 1/gY1;
//bildet den Exponenten 1/t in der Formel ab
var gP = parseFloat(document.forms.alterungswert.garantpercent.value);
//holt denn garantierten Prozentsatz x
var degR2 = Math.pow(gP,degR1);
//bildet den Subtrahenden in der Klammer ab
var degR3 = 1-degR2;
//bildet die Subtraktion in der Klammer insgesamt ab
var degR = 100*degR3;
//multipliziert mit 100 und komplettiert die Gleichung
return degR;
Aber nun bekomme ich Werte z.B. für 80%/25J. von 19,158.
Das kann ja nicht die jährliche Degradation sein. Was habe ich also falsch verstanden?
Vielen Dank für die Hilfe!!
Grüße
Hanlif
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 20:18 Fr 19.03.2010 | Autor: | leduart |
Hallo
ich kenn mich mit javaskript nicht aus.
kann Math.pow(gP,degR1) denn mit gebrochen hochzahlen umgehen?
Bau hinter jedem Befehl ein print ein, und lass dir die Werte ausgeben.
wenn du 25 jahre eingibst, muss degR1=0.04 sein
Math.pow(gP,degR1)=0.991114
jetzt denk ich, ich hab den Fehler! die 80% hast du wohl als 80 eingegeben, die müssen aber als 80/100=0.8 drin sein
also den Eingabewert noch durch 100 teilen.
und schliesslich
degR=0.8886
Es lohnt sich immer Zwischenergebnisse von so nem Miniprogramm im Taschenrechner auszurechnen und beim Programmieren auszudrucken. (Am Ende natürlich die printbefehle wieder löschen.
Gruss leduart
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 10:41 Sa 20.03.2010 | Autor: | Hanlif |
Vielen Dank noch einmal, Leduart!
Du hast genau den Fehler benannt. Jetzt funktioniert alles. Puh!
Beste Grüße
Hanlif
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 17:16 Do 18.03.2010 | Autor: | Hanlif |
Hallo,
ich habe mich nun dem nächsten Teil zugewandt, und bekomme wieder seltsame Werte heraus ...
Verstehe ich richtig, dass Prozent pro Jahr die über die Jahre stabil bleibende Degradationsrate meint?
function calcDegRate() //degR: die jährliche Degradationsrate in Prozent
{
var gY1 = parseFloat(document.forms.alterungswert.garantyear.value);
//holt die Garantiedauer in Jahren
var degR1 = 1/gY1;
//bildet den Exponenten in der Formel ab
var gP = parseFloat(document.forms.alterungswert.garantpercent.value);
//holt denn garantierten Prozentsatz
var degR2 = Math.pow(gP,degR1);
//bildet den Subtrahenden in der Klammer ab
var degR3 = 1-degR2;
//bildet die Subtraktion in der Klammer ab
var degR = 100*degR3;
//multipliziert mit 100 und komplettiert die Gleichung
return degR;
}
Aber nun bekomme ich Werte z.B. für 80%/25J. von 19,158.
Das kann doch nicht die jährliche Degradation sein?
Grüße
Hanlif
|
|
|
|