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


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

Fehler bei Berechnungen in JavaScript

From Leo Baumann <ib@leobaumann.de>
Newsgroups de.comp.lang.javascript
Subject Fehler bei Berechnungen in JavaScript
Date 2021-11-26 21:19 +0100
Message-ID <snrfh9$9hi$1@solani.org> (permalink)

Show all headers | View raw


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.

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.cos(bb)*Math.cos(ls-lb);
		h=Math.acos(cose1);
		ri=Math.abs(Math.acos(-Math.sin(bb)*cose1/Math.cos(bb)/Math.sin(h))); 
// Richtung zur Sonne
		vz=Math.sin(ls-lb)/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(ri*180/pi);
		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&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 | NextNext 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