Groups | Search | Server Info | Keyboard shortcuts | Login | Register


Groups > de.comp.lang.javascript > #5276

Re: Fehler bei Berechnungen in JavaScript

From Leo Baumann <ib@leobaumann.de>
Newsgroups de.comp.lang.javascript
Subject Re: Fehler bei Berechnungen in JavaScript
Date 2021-11-27 06:28 +0100
Message-ID <snsfm9$6dj$1@solani.org> (permalink)
References (1 earlier) <1679766.OeldK439Yt@PointedEars.de> <sns59h$n0$1@solani.org> <2651122.v9v1EOSiMG@PointedEars.de> <snsa13$3fp$1@solani.org> <snse18$50p$1@solani.org>

Show all headers | View raw


Am 27.11.2021 um 06:00 schrieb Leo Baumann:
> Lass' 'mal sein. Da sind noch Fehler in den Formeln. Außerdem gibt es 
> Probleme mit der Integration simpsonneig().
> 
> Das muss ich mir nochmal genauer ansehen nach einer Pause.

In der Zwischenzeit habe ich einige Korrekturen in den Berechnungen 
vorgenommen:

<!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); 
  // Großkreis zum Subsonnenpunkt
		h=Math.acos(cose1);   // Winkel des Subsonnenpunktes im EWrmittelpunkt
	 
ri=Math.abs(Math.acos(Math.sin(bs)-Math.sin(bb)*cose1/Math.cos(bb)/Math.sin(h))); 
// Richtung zur Sonne
		vz=Math.sin(ls-lb)*Math.cos(bs)/Math.sin(h);
		if (vz<0) ri=-ri;

 
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) {e=0; ele=0;} else 
{e=(-Math.cos(ele)*Math.sin(neig)*Math.cos(ri-rif)+Math.sin(ele)*Math.cos(neig))/Math.sin(ele);}
         if (e<=0) e=0;
         //console.log(t);
		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);
                 console.log(u+t*sw);
				}

			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&auml;che</a></td></tr>
     <tr><td><img src="pfeilre.gif"><a href="#Sonnesenk">effektive 
Sonnenbestrahlung, senkrechte Fl&auml;che</a></td></tr>
     <tr><td><img src="pfeilre.gif"><a href="#Sonneneig">effektive 
Sonnenbestrahlung, geneigte Fl&auml;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&auml;rke der waagerechten Fl&auml;che durch die 
Sonne</b></u></h4></p>

	<p>Wieviel Prozent der Sonnenstrahlung f&auml;llt auf eine waagerechte 
Fl&auml;che an der angegebenen geografischen Position, weil die Sonne ja 
nicht
	unbedingt senkrecht &uuml;ber dieser steht und au&szlig;erdem dem 
Tageszeiten- und Jahreszeitenverlauf unterliegt? Die eingetragenen
	Koordinaten geh&ouml;ren zu Mainflingen-Offenbach. Die Berechnung ist 
schwierig, weil &uuml;ber folgende Gro&szlig;kreisformel
	integriert werden mu&szlig, 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&uuml;r beliebige Koordinaten auf
	der Erdoberfl&auml;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&auml;rke, waagerechte Fl&auml;che</th></tr><tr><td>
	<form name="eingabe3">
		<input name="gb" type="text" size=12 value="50.1"> geografische Breite 
der Fl&auml;che in Dezimalgrad (s&uuml;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&auml;rke durch die 
Sonne</span><br>
		<input name="erg1" type="text" readonly size=12> <span 
style="color:#0000ff;">&auml;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&auml;rke der senkrechten Fl&auml;che durch die 
Sonne</b></u></h4></p>

	<p>Wieviel Prozent der Sonnenstrahlung f&auml;llt auf eine senkrechte, 
nach S&uuml;den bzw. Norden zeigende Fl&auml;che an der angegebenen 
geografischen Position, weil die Sonne ja nicht
	unbedingt senkrecht &uuml;ber dieser steht und au&szlig;erdem dem 
Tageszeiten- und Jahreszeitenverlauf unterliegt? Die eingetragenen
	Koordinaten geh&ouml;ren zu Mainflingen-Offenbach. Die Berechnung ist 
schwierig, weil &uuml;ber folgende Gro&szlig;kreisformel
	integriert werden mu&szlig, 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&uuml;r beliebige Koordinaten auf
	der Erdoberfl&auml;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&auml;rke, senkrechte Fl&auml;che</th></tr><tr><td>
	<form name="eingabe10">
		<input name="gb" type="text" size=12 value="50.1"> geografische Breite 
der Fl&auml;che in Dezimalgrad (s&uuml;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&auml;rke durch die 
Sonne</span><br>
		<input name="erg1" type="text" readonly size=12> <span 
style="color:#0000ff;">&auml;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&auml;rke der geneigten Fl&auml;che durch die 
Sonne</b></u></h4></p>

	<p>Wieviel Prozent der Sonnenstrahlung f&auml;llt auf eine geneigte, 
nach S&uuml;den bzw. Norden zeigende Fl&auml;che an der angegebenen 
geografischen Position, weil die Sonne ja nicht
	unbedingt senkrecht &uuml;ber dieser steht und au&szlig;erdem dem 
Tageszeiten- und Jahreszeitenverlauf unterliegt? Die eingetragenen
	Koordinaten geh&ouml;ren zu Mainflingen-Offenbach.</p>

	<p><table border=1 bordercolor="#0000b0"cellpadding="10" 
cellspacing="7" bgcolor="#fffff0">
	<tr><th colspan="2">effektive Sonnenbestrahlung, 
Bestrahlungsst&auml;rke, geneigte Fl&auml;che</th></tr><tr><td>
	<form name="eingabe11">
		<input name="gb" type="text" size=12 value="50.1"> geografische Breite 
der Fl&auml;che in Dezimalgrad (s&uuml;dlich negativ)<br>
         <input name="neig" type="text" size=12 value="45"> Neigung der 
Fl&auml;che in Grad<br>
         <input name="rif" type="text" size=12 value="-180"> Richtung 
der Fl&auml;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&auml;rke durch die 
Sonne</span><br>
		<input name="erg1" type="text" readonly size=12> <span 
style="color:#0000ff;">&auml;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 | NextPrevious in thread | Next in thread | Find similar


Thread

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