Groups | Search | Server Info | Keyboard shortcuts | Login | Register
Groups > de.comp.lang.javascript > #5297
| From | Leo Baumann <ib@leobaumann.de> |
|---|---|
| Newsgroups | de.comp.lang.javascript |
| Subject | Re: Fehler bei Berechnungen in JavaScript |
| Date | 2021-12-01 14:29 +0100 |
| Message-ID | <so7tca$r0h$1@solani.org> (permalink) |
| References | <snrfh9$9hi$1@solani.org> |
Am 26.11.2021 um 21:19 schrieb Leo Baumann:
> Hallo,
> das Programm berechnet das Integral (Simpson) der rel. Bestahlungsstärke
> einer geneigten Fläche durch die Sonne.
>
> Zwei funtionierende Programme für waagerechte und senkrechte Bestrahlung
> sind beigefügt.
>
> Simpsonneig() ist die Integration nach Simpson, function cosen() ist die
> Funktion für die rel. Bestrahlungsstärke.
>
> Die zugehörige Eingabe und der Aufruf für Simpsonneig() ist ganz unten.
>
> Für die eingetragenen Parameter kommt ein sinnvolles Ergebnis heraus,
> variiert man die Parameter, gibt es Probleme.
Das Script funktioniert jetzt für die meisten Parameter, aber wie sich
durch Vergleich mit dem anderen, zweiten Script zeigt, liefert die
Berechnungsgleichung für senkrechte Flächen falsche Ergebnisse. Die
Berechnungsgleichung aus dem Internet
https://www.lti.kit.edu/rd_download/Solarenergie_20081024_Sonne.pdf
e=(-Math.cos(ele)*Math.sin(neig)*Math.cos(ris-rif)+Math.sin(ele)*Math.cos(neig));
ist wohl falsch.
>
> Hier die Programme:
<!DOCTYPE HTML>
<html lang="de">
<head>
<script language="JavaScript">
function cose(t,bb,lb,pi,nwk)
{
ls=2*pi/24*t-pi;
bs=Math.sin(2*pi/8760*t-pi/2)*nwk;
e=Math.sin(bb)*Math.sin(bs)+Math.cos(bb)*Math.cos(bs)*Math.cos(ls-lb);
if (e<=0) e=0; // wenn die Sonne unter dem Horizont steht
wird das nicht mit gerechnet
return e
}
function sine(t,bb,lb,pi,nwk)
{
ls=2*pi/24*t-pi;
bs=Math.sin(2*pi/8760*t-pi/2)*nwk;
eh=Math.sin(bb)*Math.sin(bs)+Math.cos(bb)*Math.cos(bs)*Math.cos(ls-lb);
// *****cos(e)
e=Math.sqrt(1-Math.pow(eh,2)); // *****sin(e)
if (eh<0) e=0; // *****wenn die Sonne unter dem Horizont
steht wird das nicht mit gerechnet
return e
}
function cosen(t,bb,lb,pi,nwk,neig,rif)
{
ls=2*pi/24*t-pi; // Länge Sonne
bs=Math.sin(2*pi/8760*t-pi/2)*nwk; // Breite Sonne
cose1=Math.sin(bb)*Math.sin(bs)+Math.cos(bb)*Math.cos(bs)*Math.cos(ls-lb);
// cos des Winkels zum Subsonnenpunkt
h=Math.acos(cose1); // Winkel des Subsonnenpunktes im Ermittelpunkt
if (h!=0)
{rish=Math.sin(bb)-Math.sin(bs)*cose1/Math.cos(bs)/Math.sin(h);
ris=Math.abs(Math.acos(rish))} else if (h==0) {ris=0;} // Richtung zur Sonne
if (h!=0) {vz=Math.sin(ls-lb)*Math.cos(bs)/Math.sin(h);} else if
(h>=0) {vz=1;};
if (vz<0) {ris=-ris;}
ele=pi/2-Math.acos(Math.sin(bb)*Math.sin(bs)+Math.cos(bb)*Math.cos(bs)*Math.cos(ls-lb));
// Sonnenhöhe
if ((ele<=0)||(ele>=pi-neig)) {e=0;} else
{e=(-Math.cos(ele)*Math.sin(neig)*Math.cos(ris-rif)+Math.sin(ele)*Math.cos(neig));}
// /Math.sin(ele);}
//console.log(e);
return e
}
// Simpson() integriert über cose() von t=0 bis t=8760 Stunden,
also ein Jahr (waagerechte Fläche auf der Erde)
function Simpson()
{
var pi=Math.PI;
var lb=0;
var bb=Math.abs(parseFloat(document.eingabe3.gb.value)*pi/180);
var g=0;
var s=0;
var ug=0;
var og=8760;
var min=1023;
var nwk=23.5*pi/180;
var n=1;
var gs=2;
var te=Math.pow(10,-gs);
var sw=(og-ug)/2;
var c=cose(ug,bb,lb,pi,nwk)+cose(og,bb,lb,pi,nwk);
var u=cose(ug+sw,bb,lb,pi,nwk);
var sa=sw/3*(c+4*u);
do
{
sw=sw/2;
n=2*n+1;
g=g+u;
u=0;
for (t=1;t<=n;t=t+2)
{
u=u+cose(u+t*sw,bb,lb,pi,nwk);
}
s=sw/3*(c+2*g+4*u);
if (s==0) s=te;
fe=Math.abs((s-sa)/(15*s));
sa=s;
}while ((fe>te) || (n<min));
document.eingabe3.schritte.value=String(n+1);
document.eingabe3.fehler.value=String(Math.round(fe*1e8)/1e8);
document.eingabe3.erg.value=String(Math.round(sa/8760*1e4)/100);
document.eingabe3.erg1.value=String(Math.round(sa*100)/100);
}
// Simpsonsenk() integriert über sine() von t=0 bis t=8760
Stunden, also ein Jahr (senkrechte Fläche auf der Erde)
function Simpsonsenk()
{
var pi=Math.PI;
var lb=0;
var bb=Math.abs(parseFloat(document.eingabe10.gb.value)*pi/180);
var g=0;
var s=0;
var ug=0;
var og=8760;
var min=1023;
var nwk=23.5*pi/180;
var n=1;
var gs=2;
var te=Math.pow(10,-gs);
var sw=(og-ug)/2;
var c=sine(ug,bb,lb,pi,nwk)+cose(og,bb,lb,pi,nwk);
var u=sine(ug+sw,bb,lb,pi,nwk);
var sa=sw/3*(c+4*u);
if (bb<=nwk) nwk=bb; // *****für den Fall, dass der
Beobachter innerhalb des Wendekreises ist
do
{
sw=sw/2;
n=2*n+1;
g=g+u;
u=0;
for (t=1;t<=n;t=t+2)
{
u=u+sine(u+t*sw,bb,lb,pi,nwk);
}
s=sw/3*(c+2*g+4*u);
if (s==0) s=te;
fe=Math.abs((s-sa)/(15*s));
sa=s;
}while ((fe>te) || (n<min));
document.eingabe10.schritte.value=String(n+1);
document.eingabe10.fehler.value=String(Math.round(fe*1e8)/1e8);
document.eingabe10.erg.value=String(Math.round(sa/8760*1e4)/100);
document.eingabe10.erg1.value=String(Math.round(sa*100)/100);
}
// Simpsonneig() integriert über cose() von t=0 bis t=8760
Stunden, also ein Jahr (geneigte Fläche auf der Erde)
function Simpsonneig()
{
var pi=Math.PI;
var lb=0;
var bb=Math.abs(parseFloat(document.eingabe11.gb.value)*pi/180);
var neig=parseFloat(document.eingabe11.neig.value)*pi/180;
var rif=parseFloat(document.eingabe11.rif.value)*pi/180;
var g=0;
var s=0;
var ug=0;
var og=8760;
var min=1023;
var nwk=23.5*pi/180;
var n=1;
var gs=2;
var te=Math.pow(10,-gs);
var sw=(og-ug)/2;
var c=cosen(ug,bb,lb,pi,nwk,neig,rif)+cosen(og,bb,lb,pi,nwk,neig,rif);
var u=cosen(ug+sw,bb,lb,pi,nwk,neig,rif);
var sa=sw/3*(c+4*u);
if (bb<=nwk) nwk=bb; // *****für den Fall, dass der
Beobachter innerhalb des Wendekreises ist
do
{
sw=sw/2;
n=2*n+1;
g=g+u;
u=0;
for (t=1;t<=n;t=t+2)
{
u=u+cosen(u+t*sw,bb,lb,pi,nwk,neig,rif);
}
s=sw/3*(c+2*g+4*u);
if (s==0) s=te;
fe=Math.abs((s-sa)/(15*s));
sa=s;
}while ((fe>te) || (n<min));
document.eingabe11.schritte.value=String(n+1);
document.eingabe11.fehler.value=String(Math.round(fe*1e8)/1e8);
document.eingabe11.erg.value=String(Math.round(sa/8760*1e4)/100);
document.eingabe11.erg1.value=String(Math.round(sa*100)/100);
}
</script>
</head>
<a name="Start"></a>
<body link="#0000cb" vlink="#00008b" alink="#ff8c00"
background="grid.gif">
<p><center><font face="Eras Bold ITC"><h1 style= "color:
#0000cb"><u>Berechnungsprogramme</u></h1></font></center></p>
<p><table border=1 bordercolor="0000b0" cellspacing="7" bgcolor="#fffff0">
<tr><th>Art der Berechnung:</th></tr>
<tr><td><img src="pfeilre.gif"><a href="#Sonne">effektive
Sonnenbestrahlung, waagerechte Fläche</a></td></tr>
<tr><td><img src="pfeilre.gif"><a href="#Sonnesenk">effektive
Sonnenbestrahlung, senkrechte Fläche</a></td></tr>
<tr><td><img src="pfeilre.gif"><a href="#Sonneneig">effektive
Sonnenbestrahlung, geneigte Fläche</a></td></tr>
</table></p>
<p><hr noshade color="#000000" size=1></p>
<a name="Sonne"></a>
<p><h4 style="color:#000000"><u><b>Berechnung der effektiven
Bestrahlungsstärke der waagerechten Fläche durch die
Sonne</b></u></h4></p>
<p>Wieviel Prozent der Sonnenstrahlung fällt auf eine waagerechte
Fläche an der angegebenen geografischen Position, weil die Sonne ja
nicht
unbedingt senkrecht über dieser steht und außerdem dem
Tageszeiten- und Jahreszeitenverlauf unterliegt? Die eingetragenen
Koordinaten gehören zu Mainflingen-Offenbach. Die Berechnung ist
schwierig, weil über folgende Großkreisformel
integriert werden muß, und zwar von 0 bis 365 x 24 Stunden.</p>
<p><center>cos(e) = sin(bf)*sin(bs)+cos(bf)*cos(bs)*cos(ls-lf)</center>
<center>mit ls=2*pi/24*t-pi und bs=nWK*sin(2*pi/365/24*t-pi/2) den
Koordinaten des Subsonnenpunktes</center></p>
<p>Auch in Kugelkoordinaten ist diese Berechnung schwierig. Darum
empfiehlt sich hier die SIMPSON-Formel. Für beliebige Koordinaten auf
der Erdoberfläche ist diese Iteration hier geeignet.</p>
<p><table border=1 bordercolor="#0000b0"cellpadding="10"
cellspacing="7" bgcolor="#fffff0">
<tr><th colspan="2">effektive Sonnenbestrahlung,
Bestrahlungsstärke, waagerechte Fläche</th></tr><tr><td>
<form name="eingabe3">
<input name="gb" type="text" size=12 value="50.1"> geografische Breite
der Fläche in Dezimalgrad (südlich negativ)<br>
<input name="schritte" type="text" readonly size=12> <span
style="color:#ff0000;">Anzahl der Intervalle der Integration</span><br>
<input name="fehler" type="text" readonly size=12> <span
style="color:#0000ff;">Rechenfehler</span><br>
<input name="erg" type="text" readonly size=12> <span
style="color:#ff0000;">% der wirksamen Bestrahlungsstärke durch die
Sonne</span><br>
<input name="erg1" type="text" readonly size=12> <span
style="color:#0000ff;">äquivalente Sonnen-Stunden senkrechter
Einstrahlung</span><br>
<input name="rechnen" type="button" value="Berechnen"
onClick="Simpson()"><center><img src="sunshine.gif"></center>
</form>
</table></p>
<a name="Sonnesenk"></a>
<p><h4 style="color:#000000"><u><b>Berechnung der effektiven
Bestrahlungsstärke der senkrechten Fläche durch die
Sonne</b></u></h4></p>
<p>Wieviel Prozent der Sonnenstrahlung fällt auf eine senkrechte,
nach Süden bzw. Norden zeigende Fläche an der angegebenen
geografischen Position, weil die Sonne ja nicht
unbedingt senkrecht über dieser steht und außerdem dem
Tageszeiten- und Jahreszeitenverlauf unterliegt? Die eingetragenen
Koordinaten gehören zu Mainflingen-Offenbach. Die Berechnung ist
schwierig, weil über folgende Großkreisformel
integriert werden muß, und zwar von 0 bis 365 x 24 Stunden.</p>
<p><center>sin(e) =
sqrt(1-(sin(bf)*sin(bs)+cos(bf)*cos(bs)*cos(ls-lf))²)</center>
<center>mit ls=2*pi/24*t-pi und bs=nWK*sin(2*pi/365/24*t-pi/2) den
Koordinaten des Subsonnenpunktes</center></p>
<p>Auch in Kugelkoordinaten ist diese Berechnung schwierig. Darum
empfiehlt sich hier die SIMPSON-Formel. Für beliebige Koordinaten auf
der Erdoberfläche ist diese Iteration hier geeignet.</p></p>
<p><table border=1 bordercolor="#0000b0"cellpadding="10"
cellspacing="7" bgcolor="#fffff0">
<tr><th colspan="2">effektive Sonnenbestrahlung,
Bestrahlungsstärke, senkrechte Fläche</th></tr><tr><td>
<form name="eingabe10">
<input name="gb" type="text" size=12 value="50.1"> geografische Breite
der Fläche in Dezimalgrad (südlich negativ)<br>
<input name="schritte" type="text" readonly size=12> <span
style="color:#ff0000;">Anzahl der Intervalle der Integration</span><br>
<input name="fehler" type="text" readonly size=12> <span
style="color:#0000ff;">Rechenfehler</span><br>
<input name="erg" type="text" readonly size=12> <span
style="color:#ff0000;">% der wirksamen Bestrahlungsstärke durch die
Sonne</span><br>
<input name="erg1" type="text" readonly size=12> <span
style="color:#0000ff;">äquivalente Sonnen-Stunden senkrechter
Einstrahlung</span><br>
<input name="rechnen" type="button" value="Berechnen"
onClick="Simpsonsenk()"><center><img src="sunshine.gif"></center>
</form>
</table></p>
<a href="#Start">[Oben]</a><a href="index.htm"
target="_parent">[Anfang]</a>
<p><hr noshade color="#000000" size=1></p>
<a name="Sonneneig"></a>
<p><h4 style="color:#000000"><u><b>Berechnung der effektiven
Bestrahlungsstärke der geneigten Fläche durch die
Sonne</b></u></h4></p>
<p>Wieviel Prozent der Sonnenstrahlung fällt auf eine geneigte,
nach Süden bzw. Norden zeigende Fläche an der angegebenen
geografischen Position, weil die Sonne ja nicht
unbedingt senkrecht über dieser steht und außerdem dem
Tageszeiten- und Jahreszeitenverlauf unterliegt? Die eingetragenen
Koordinaten gehören zu Mainflingen-Offenbach.</p>
<p><table border=1 bordercolor="#0000b0"cellpadding="10"
cellspacing="7" bgcolor="#fffff0">
<tr><th colspan="2">effektive Sonnenbestrahlung,
Bestrahlungsstärke, geneigte Fläche</th></tr><tr><td>
<form name="eingabe11">
<input name="gb" type="text" size=12 value="50.1"> geografische Breite
der Fläche in Dezimalgrad (südlich negativ)<br>
<input name="neig" type="text" size=12 value="45"> Neigung der
Fläche in Grad<br>
<input name="rif" type="text" size=12 value="180"> Richtung der
Fläche in Grad<br>
<input name="schritte" type="text" readonly size=12> <span
style="color:#ff0000;">Anzahl der Intervalle der Integration</span><br>
<input name="fehler" type="text" readonly size=12> <span
style="color:#0000ff;">Rechenfehler</span><br>
<input name="erg" type="text" readonly size=12> <span
style="color:#ff0000;">% der wirksamen Bestrahlungsstärke durch die
Sonne</span><br>
<input name="erg1" type="text" readonly size=12> <span
style="color:#0000ff;">äquivalente Sonnen-Stunden senkrechter
Einstrahlung</span><br>
<input name="rechnen" type="button" value="Berechnen"
onClick="Simpsonneig()"><center><img src="sunshine.gif"></center>
</form>
</table></p>
<a href="#Start">[Oben]</a><a href="index.htm"
target="_parent">[Anfang]</a>
</body>
</html>
Back to de.comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar
Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-26 21:19 +0100
Re: Fehler bei Berechnungen in JavaScript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-11-27 02:53 +0100
Re: Fehler bei Berechnungen in JavaScript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-11-27 02:59 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-27 03:31 +0100
Re: Fehler bei Berechnungen in JavaScript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-11-27 04:32 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-27 04:51 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-27 06:00 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-27 06:28 +0100
Re: Fehler bei Berechnungen in JavaScript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-11-27 06:50 +0100
Re: Fehler bei Berechnungen in JavaScript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-11-27 19:41 +0100
Re: Fehler bei Berechnungen in JavaScript Stefan Reuther <stefan.news@arcor.de> - 2021-11-27 10:59 +0100
Re: Fehler bei Berechnungen in JavaScript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-11-27 16:28 +0100
Re: Fehler bei Berechnungen in JavaScript Arno Welzel <usenet@arnowelzel.de> - 2021-11-28 00:53 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-28 05:47 +0100
Re: Fehler bei Berechnungen in JavaScript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-11-29 00:51 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-29 15:41 +0100
Re: Fehler bei Berechnungen in JavaScript Arno Welzel <usenet@arnowelzel.de> - 2021-11-29 16:12 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-29 16:23 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-29 16:30 +0100
Re: Fehler bei Berechnungen in JavaScript Arno Welzel <usenet@arnowelzel.de> - 2021-11-29 16:56 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-29 17:00 +0100
Re: Fehler bei Berechnungen in JavaScript Arno Welzel <usenet@arnowelzel.de> - 2021-11-29 17:02 +0100
Re: Fehler bei Berechnungen in JavaScript Arno Welzel <usenet@arnowelzel.de> - 2021-11-29 17:02 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-29 17:06 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-29 17:10 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-29 23:46 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-11-30 04:12 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-12-01 14:29 +0100
Re: Fehler bei Berechnungen in JavaScript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-12-02 01:27 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-12-02 02:20 +0100
Re: Fehler bei Berechnungen in JavaScript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-12-02 04:00 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-12-02 07:11 +0100
Re: Fehler bei Berechnungen in JavaScript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-12-03 03:51 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-12-03 04:57 +0100
Re: Fehler bei Berechnungen in JavaScript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-12-03 05:33 +0100
Re: Fehler bei Berechnungen in JavaScript Leo Baumann <ib@leobaumann.de> - 2021-12-03 05:18 +0100
csiph-web