Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


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

Fehler bei Berechnungen in JavaScript

Started byLeo Baumann <ib@leobaumann.de>
First post2021-11-26 21:19 +0100
Last post2021-12-03 05:18 +0100
Articles 20 on this page of 36 — 4 participants

Back to article view | Back to de.comp.lang.javascript


Contents

  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

Page 1 of 2  [1] 2  Next page →


#5269 — Fehler bei Berechnungen in JavaScript

FromLeo Baumann <ib@leobaumann.de>
Date2021-11-26 21:19 +0100
SubjectFehler bei Berechnungen in JavaScript
Message-ID<snrfh9$9hi$1@solani.org>
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>

[toc] | [next] | [standalone]


#5270

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2021-11-27 02:53 +0100
Message-ID<1679766.OeldK439Yt@PointedEars.de>
In reply to#5269
Leo Baumann wrote:

> 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.

Zunächst mal sind das keine Programme.  HTML ist keine Programmiersprache.
 
> 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.

„Es gibt Probleme” ist keine Beschreibung.
 
> Hier die Programme:

Es wäre besser gewesen, den URI zu posten, statt hier mehr als gefühlt
200 Zeilen schlecht formatierten und schlecht dokumentierten Quellcode 
abzukippen.  (*So* hatte ich das in de.sci.physik sicher rNICHT gemeint.)
 
> <!DOCTYPE HTML>
> <html lang="de">
> <head>
> <script language="JavaScript">

Anfängerfehler Nr. 1: Kein gültiges HTML.

Lass dringend <http://validator.w3.org/> über diesen Code laufen.

Schreib ausserdem hier

  'use strict';

damit die gröbsten Programmierfehler in modernen Web-Browsern (die 
ECMAScript Ed. 6 und neuer unterstützen) gleich erkannt werden.
Zum Beispiel:
 
> 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);
  ^

Nicht deklarierte Variablen.  Da kann alles Mögliche passieren.

> if (e<=0) e=0;            // wenn die Sonne unter dem Horizont steht
> wird das nicht mit gerechnet
> return e
> }
> 
> […]

| Die Bereitschaft fühlender Wesen, Deinen Code näher anzuschauen, liegt
| wohl selbst auf logarithmischen Skalen unter Null (das geht genau dann,
| wenn der Leidensdruck dieser Wesen beim Anschauen größer wird als die
| mathematische Notwendigkeit für Werte größer Null).
| 
|   –Dietmar Meier in dcljs

Siehe auch: <https://github.com/airbnb/javascript>
 
> // Richtung zur Sonne
> vz=Math.sin(ls-lb)/Math.sin(h);

Die Sinusfunktion kann auch den Wert 0 annehmen, dann hat vz den Wert “NaN” 
(“not-a-number”), da die Division durch Null in IEEE-754 (so wie auch meist 
in der Mathematik) nicht definiert ist.

> if (vz<0) ri=-ri;

Dieser Fall wird davon dann nicht erfasst, denn NaN < 0 === false.

> var bb=Math.abs(parseFloat(document.eingabe3.gb.value)*pi/180);

Sauber:

  document.forms['eingabe3'].elements['gb'].value

Das ganze Geraffel andauernd vor “elements” kann man sich aber sparen, wenn 
man direkt eine Referenz auf das Formularobjekt übergibt:

  function myCalc (f)
  {
    … f.elements['gb'].value …
  }

  <form onsubmit='myCalc(this); return false'>
    …
    <input type='submit' …>
  </form>

Für die Umrechnung von Grad in Radians empfehle ich, eine eigene Funktion zu 
schreiben und aufzurufen, damit sich nicht durch Wiederholung Fehler 
einschleichen.  (Der Standard bietet leider keine solche.)

> document.eingabe3.schritte.value=String(n+1);

Die Konvertierung nach String beim Schreiben der value-Eigenschaft ist 
unnötig, das erledigt der Setter selbst.

> 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);

Falls das eine Rundung auf Nachkommastellen werden soll, so ist das falsch.
Benutz stattdessen Number.prototype.toFixed().

> </head>
> 
> <a name="Start"></a>

Ungültig.  Das a-Element muss im body-Element enthalten sein.

> <body  link="#0000cb" vlink="#00008b" alink="#ff8c00"
> background="grid.gif">

Diese veralteten Attribute haben in HTML5 nichts zu suchen.  Schon in HTML 
4.01 Strict (1999) nicht mehr.
 
> <p><center><font face="Eras Bold ITC"><h1 style= "color:
> #0000cb"><u>Berechnungsprogramme</u></h1></font></center></p>

Autsch.  Mit einem Struktureditor erstellt?
 
> <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>

table-Elemente sind schon Block-Level-Elemente, und p-Elemente dürfen sie 
nicht enthalten (die sind nämlich für Absätze).
 
> <p><hr noshade color="#000000" size=1></p>

Autsch.
 
> <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>

Nein, sondern

  <h4 id='Sonne'>Berechnung der effektiven Bestrahlungsst&auml;rke der 
waagerechten Fl&auml;che durch die Sonne</h4>

Alles andere wird durch ein Stylesheet (CSS) erledigt.  Das gilt auch für 
die übrigen Elemente.  Sonst wird/bleibt das ein Wartungsalbtraum.

Wenn Du diese Fehler beseitigt hast, solltest Du den Code oder URI eines auf 
das *Minimum* reduzierten Testfall posten.  Bei der Erstellung eines solchen 
findest Du sogar womöglich den Fehler schon selbst.
 
-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | <http://PointedEars.de/es-matrix>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#5271

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2021-11-27 02:59 +0100
Message-ID<11147654.bmQbIakNtG@PointedEars.de>
In reply to#5270
Thomas 'PointedEars' Lahn wrote:

> Leo Baumann wrote:
>> <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>
> 
> Nein, sondern
> 
>   <h4 id='Sonne'>Berechnung der effektiven Bestrahlungsst&auml;rke der
> waagerechten Fl&auml;che durch die Sonne</h4>

Und ausserdem kannst Du einfach z. B. Umlaute direkt schreiben, wenn Du es 
als ISO-8859-1 oder -15 oder UTF-8 speicherst (ich empfehle Letzteres) und 
auch so deklarierst.

-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | <http://PointedEars.de/es-matrix>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#5272

FromLeo Baumann <ib@leobaumann.de>
Date2021-11-27 03:31 +0100
Message-ID<sns59h$n0$1@solani.org>
In reply to#5270
Am 27.11.2021 um 02:53 schrieb Thomas 'PointedEars' Lahn:
> „Es gibt Probleme” ist keine Beschreibung.

Simpsonneig() integriert über die rel. Bestrahlungsstärke einer 
geneigten Fläche über ein Jahr. Die zugehörige Funktion über die 
integriert wird ist cosen().

ls - Längengrad Sonne als Fkt. der Std. eines Jahres
bs - Breitengrad der Sonne als Fkt. der Std. eines Jahres
t  - Zeit in Stunden
bb - Breitengrad des Beobachters (Fläche auf der Erde)
lb - Längengrad des Beobachters (Fläche auf der Erde), hier Konstante 0
nwk- nördlicher Wendekreis 23.5 Grad
neig - Neigung der Fläche, Winkel zur Erde
rif - Richtung der Fläche, Winkel zu Nord oder Süd
ri - Richtung zur Sonne, Winkel zu Nord oder Süd
vz - Vorzeichen der Richtung
ele - Elevation zur Sonne am Ort der Fläche
return e - e ist nicht der Winkel, sondern der Kosinus des Winkels wie 
in https://www.lti.kit.edu/rd_download/Solarenergie_20081024_Sonne.pdf 
das cos(θ_gen)

danke

[toc] | [prev] | [next] | [standalone]


#5273

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2021-11-27 04:32 +0100
Message-ID<2651122.v9v1EOSiMG@PointedEars.de>
In reply to#5272
Leo Baumann wrote:

> Am 27.11.2021 um 02:53 schrieb Thomas 'PointedEars' Lahn:
>> „Es gibt Probleme” ist keine Beschreibung.
> 
> Simpsonneig() integriert über die rel. Bestrahlungsstärke einer
> geneigten Fläche über ein Jahr. Die zugehörige Funktion über die
> integriert wird ist cosen().
> 
> ls - Längengrad Sonne als Fkt. der Std. eines Jahres
> bs - Breitengrad der Sonne als Fkt. der Std. eines Jahres
> t  - Zeit in Stunden
> bb - Breitengrad des Beobachters (Fläche auf der Erde)
> lb - Längengrad des Beobachters (Fläche auf der Erde), hier Konstante 0
> nwk- nördlicher Wendekreis 23.5 Grad
> neig - Neigung der Fläche, Winkel zur Erde
> rif - Richtung der Fläche, Winkel zu Nord oder Süd
> ri - Richtung zur Sonne, Winkel zu Nord oder Süd
> vz - Vorzeichen der Richtung
> ele - Elevation zur Sonne am Ort der Fläche
> return e - e ist nicht der Winkel, sondern der Kosinus des Winkels wie
> in https://www.lti.kit.edu/rd_download/Solarenergie_20081024_Sonne.pdf
> das cos(θ_gen)

Ja, und was genau ist jetzt das *Problem*?

<http://www.catb.org/~esr/faqs/smart-questions.html>
 
> danke

Bitte. <facepalm/>

-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | <http://PointedEars.de/es-matrix>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#5274

FromLeo Baumann <ib@leobaumann.de>
Date2021-11-27 04:51 +0100
Message-ID<snsa13$3fp$1@solani.org>
In reply to#5273
Am 27.11.2021 um 04:32 schrieb Thomas 'PointedEars' Lahn:
> Ja, und was genau ist jetzt das*Problem*?

Für die im vorhandenen Script vordefinierten Parameter funktioniert die 
Berechnung. Probleme gibt es, wenn Beobachterbreite und Richtung der 
Fläche variiert werden.

Abgesehen davon, dass die Konstante gs (Genauigkeit Stellen) in 
simpsonneig() bei verschiedenen Werten reduziert werden muss, damit die 
Integration überhaupt funktioniert.

Schön wäre natürlich, wenn für Neigung = 0 und 90 Grad die gleichen 
Ergebnisse geliefert würden, wie in den beiden anderen ebenfalls 
vorhandenen entsprechenden Scripten.

Aktuell kann ich die Orte der Fehler im Script nicht finden, auch wenn 
ich mir einzelne Variablen mit console.log() ansehe.

[toc] | [prev] | [next] | [standalone]


#5275

FromLeo Baumann <ib@leobaumann.de>
Date2021-11-27 06:00 +0100
Message-ID<snse18$50p$1@solani.org>
In reply to#5274
Am 27.11.2021 um 04:51 schrieb Leo Baumann:
> Ja, und was genau ist jetzt das*Problem*?

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.

[toc] | [prev] | [next] | [standalone]


#5276

FromLeo Baumann <ib@leobaumann.de>
Date2021-11-27 06:28 +0100
Message-ID<snsfm9$6dj$1@solani.org>
In reply to#5275
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>

[toc] | [prev] | [next] | [standalone]


#5277

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2021-11-27 06:50 +0100
Message-ID<2022171.qzxCTj5zWB@PointedEars.de>
In reply to#5274
Leo Baumann wrote:

> Am 27.11.2021 um 04:32 schrieb Thomas 'PointedEars' Lahn:
>> Ja, und was genau ist jetzt das*Problem*?
> 
> Für die im vorhandenen Script vordefinierten Parameter funktioniert die
> Berechnung. Probleme gibt es, wenn Beobachterbreite und Richtung der
> Fläche variiert werden.

Soifz. [psf 10.1]

Deine vagen Beschreibungen sind für einen Aussenstehenden komplett nutzlos.
Verstehst Du das nicht?
 
> Abgesehen davon, dass die Konstante gs (Genauigkeit Stellen) in
> simpsonneig() bei verschiedenen Werten reduziert werden muss, damit die
> Integration überhaupt funktioniert.

Das liegt möglicherweise an Rundungsfehlern, die durch eine Reduktion von 
Dezimalstellen reduziert werden.  Bei der Addition von Gleitkommazahlen muss 
die begrenzte Genauigkeit beachtet und um eine “catastrophic cancellation” 
zu vermeiden stattdessen eine geeignete Strategie gewählt werden, zum 
Beispiel Kahan–Neumaier-Summation.
 
> Schön wäre natürlich, wenn für Neigung = 0 und 90 Grad die gleichen
> Ergebnisse geliefert würden, wie in den beiden anderen ebenfalls
> vorhandenen entsprechenden Scripten.

Diese beiden Situationen sind aber keineswegs identisch: einerseits ist die 
Fläche parallel und andererseits senkrecht zum Boden.
 
> Aktuell kann ich die Orte der Fehler im Script nicht finden, auch wenn
> ich mir einzelne Variablen mit console.log() ansehe.

Debugging wäre natürlich eine Lösung.

-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | <http://PointedEars.de/es-matrix>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#5281

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2021-11-27 19:41 +0100
Message-ID<46806042.YHSAJUihl4@PointedEars.de>
In reply to#5277
Thomas 'PointedEars' Lahn wrote:

> Leo Baumann wrote:
>> Aktuell kann ich die Orte der Fehler im Script nicht finden, auch wenn
>> ich mir einzelne Variablen mit console.log() ansehe.
> 
> Debugging wäre natürlich eine Lösung.

<http://devtoolsecrets.com/>

-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | <http://PointedEars.de/es-matrix>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#5278

FromStefan Reuther <stefan.news@arcor.de>
Date2021-11-27 10:59 +0100
Message-ID<snt323.5rk.1@stefan.msgid.phost.de>
In reply to#5274
Am 27.11.2021 um 04:51 schrieb Leo Baumann:
> Am 27.11.2021 um 04:32 schrieb Thomas 'PointedEars' Lahn:
>> Ja, und was genau ist jetzt das*Problem*?
> 
> Für die im vorhandenen Script vordefinierten Parameter funktioniert die
> Berechnung. Probleme gibt es, wenn Beobachterbreite und Richtung der
> Fläche variiert werden.

Das ist keine Fehlerbeschreibung.

Eine Fehlerbeschreibung sagt: "ich habe <Umgebung>, ich führe <Aktion>
aus, ich bekomme <Ergebnis>, ich erwarte aber <erwartetes Ergebnis>".
Und das ist unabhängig davon, ob man ein Problem mit der Klospülung,
einem Plätzchenrezept, einem Auto oder einem Javascript-Programm hat.

Bonuspunkte gibt's, wenn die Umgebung schon von "200 Zeilen wildes
Javascript" auf etwas kleineres eingedampft wurde.

> Aktuell kann ich die Orte der Fehler im Script nicht finden, auch wenn
> ich mir einzelne Variablen mit console.log() ansehe.

Dann schaust du nicht die richtigen Variablen an.

Den Tipp mit den undeklarierten Variablen hast du schon bekommen. Um
sowas zu finden, empfiehlt es sich, eine Entwicklungsumgebung zu
benutzen, die was von Javascript versteht. Bei mir ist das ganz einfach
Emacs mit js2-mode, der unterkringelt mir undeklarierte Variablen und
fehlende Semikola automatisch. Außerdem gibt es Online-Tools wie
<https://www.jslint.com/>.

Für beides empfiehlt es sich, Javascript in eine separate Datei
abzulegen und nicht direkt im HTML. Das vereinfacht die Arbeit.


  Stefan

[toc] | [prev] | [next] | [standalone]


#5280

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2021-11-27 16:28 +0100
Message-ID<16550671.vo3XBuzYjZ@PointedEars.de>
In reply to#5278
Stefan Reuther wrote:

> Am 27.11.2021 um 04:51 schrieb Leo Baumann:
>> Aktuell kann ich die Orte der Fehler im Script nicht finden, auch wenn
>> ich mir einzelne Variablen mit console.log() ansehe.
> 
> Dann schaust du nicht die richtigen Variablen an.

Das ist möglich.
 
> Den Tipp mit den undeklarierten Variablen hast du schon bekommen. Um
> sowas zu finden, empfiehlt es sich, eine Entwicklungsumgebung zu
> benutzen, die was von Javascript versteht.

Zunächst wäre es hilfreich, selbst etwas von "_JavaScript_" zu verstehen, 
und dass es sich dabei eben nicht um *eine* Programmiersprache, sondern um 
*mehrere*, handelt; sie sind nur alle *ähnlich*, weil sie alle auf demselben 
Standard – ECMAScript – basieren:

<http://PointedEars.de/es-matrix>

Weiss man dies, dann kann man auch wissen, wie schon erwähnt, dass speziell 
dieses Problem und einige andere bereits mit Aktivierung des ECMAScript 5+ 
Strict Mode entdeckt werden; dazu schreibe man einfach

'use strict';

am Anfang des Programms oder einer Funktion/Methode (welche String-Begrenzer 
man verwendet, ist fast egal) und benutze eine Browserversion, die jünger 
als 10 Jahre ist, und folglich ECMAScript Ed. 5 oder neuer unterstützt.  
(Der Code läuft dann auch noch in älteren Umgebungen, weil dies eine dort 
syntaktisch korrekte Anweisung ist, die dort nichts bewirkt.)

> Bei mir ist das ganz einfach Emacs mit js2-mode, der unterkringelt mir
> undeklarierte Variablen und fehlende Semikola automatisch. Außerdem gibt
> es Online-Tools wie <https://www.jslint.com/>.

Dieses Tool kann ich gerade für Anfänger nicht empfehlen und auch von 
anderen Profis wird davon abgeraten: es spiegelt zu sehr die persönliche 
Meinung von Douglas Crockford und zuwenig die rational begründete, 
empfohlene Praxis wider.  Stattdessen kann ich aus eigener Praxis ESLint 
sehr empfehlen.

Dazu kann ich Atom zusammen mit den Add-ons ide-typescript und linter-eslint 
empfehlen.  Eine gute und anpassbare Basiskonfiguration für ESLint basierend 
auf dem Airbnb JavaScript Style Guide ist ebenda verfügbar (URI in meiner 
anderen Antwort).

<http://eslint.org/>
<http://atom.io/>
 
> Für beides empfiehlt es sich, Javascript in eine separate Datei

Nochmals: _JavaScript_, und selbst das ist noch unpräzise.

> abzulegen und nicht direkt im HTML. Das vereinfacht die Arbeit.

Ja, und gleiches gilt für CSS.

-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | <http://PointedEars.de/es-matrix>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#5282

FromArno Welzel <usenet@arnowelzel.de>
Date2021-11-28 00:53 +0100
Message-ID<j0fuojFqj43U3@mid.individual.net>
In reply to#5274
Leo Baumann:

> Am 27.11.2021 um 04:32 schrieb Thomas 'PointedEars' Lahn:
>> Ja, und was genau ist jetzt das*Problem*?
> 
> Für die im vorhandenen Script vordefinierten Parameter funktioniert die 
> Berechnung. Probleme gibt es, wenn Beobachterbreite und Richtung der 
> Fläche variiert werden.

*Welche* Probleme?

Was erwartest Du als Ergebnis und was erhältst Du statt dessen?


-- 
Arno Welzel
https://arnowelzel.de

[toc] | [prev] | [next] | [standalone]


#5283

FromLeo Baumann <ib@leobaumann.de>
Date2021-11-28 05:47 +0100
Message-ID<snv1kt$i2o$1@solani.org>
In reply to#5282
Am 28.11.2021 um 00:53 schrieb Arno Welzel:
> *Welche*  Probleme?
> 
> Was erwartest Du als Ergebnis und was erhältst Du statt dessen?

Zunächst habe ich Fehler in den Berechnungsformeln beseitigt.-
Aktuell habe ich das Problem, dass das e, unten in cosen() zu NaN wird, 
und ich das nicht durchschaue. :(

[toc] | [prev] | [next] | [standalone]


#5284

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2021-11-29 00:51 +0100
Message-ID<10054887.QKATZ9b1sv@PointedEars.de>
In reply to#5283
Leo Baumann wrote:

> Am 28.11.2021 um 00:53 schrieb Arno Welzel:
>> *Welche*  Probleme?
>> 
>> Was erwartest Du als Ergebnis und was erhältst Du statt dessen?
> 
> Zunächst habe ich Fehler in den Berechnungsformeln beseitigt.-
> Aktuell habe ich das Problem, dass das e, unten in cosen() zu NaN wird,
> und ich das nicht durchschaue. :(

Nochmals: *Benutz* *einen* *Debugger*.

Der entsprechende Code lesbar geschrieben und grobe Fehler (nicht 
deklarierte Variablen) korrigiert (einige Debugger können ersteres bis zu 
eineem gewissen Grad):

  function cosen (t, bb, lb, pi, nwk, neig, rif)
  {
    /* Längengrad Sonne */
    let ls = 2*pi/24 * t - pi;

    /* Breitengrad Sonne */
    let bs = Math.sin(2*pi/8760 * t - pi/2) * nwk;
    let cose1 = Math.cos(bb) * Math.cos(ls - lb);
    let h = Math.acos(cose1);
    let ri = Math.abs(
      Math.acos(-Math.sin(bb) * cose1 / Math.cos(bb) / Math.sin(h))
    ); 

    /* Richtung zur Sonne */
    let vz = Math.sin(ls - lb)/Math.sin(h);
    if (vz < 0) ri = -ri;

    let ele = pi/2
      - Math.acos(
          Math.sin(bb) * Math.sin(bs)
          + Math.cos(bb) * Math.cos(bs) * Math.cos(ls - lb)
        ); 
     
    /* Sonnenhöhe */
    let e;
    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;

    /* DEBUG */   
    console.log(ri * 180/pi);

    return e;
  }

(Das nächste Mal bitte selbst machen.)

Mit diesem nun lesbareren Code sollte spätestens jetzt klar sein, dass e nur 
genau dann NaN sein kann, wenn einer der Faktoren im Zähler oder der Nenner 
NaN ist [ist hingegen Math.sin(ele) === 0, dann ist e === Infinity].  Das 
ist genau dann der Fall, wenn mindestens eines der Argumente der Methoden 
NaN ist – also ele, neig, oder ri - rif.  Letzteres kann dann NaN sein, wenn 
ri oder rif NaN sind.  Und so weiter.

Und Deine nachträgliche Korrektur

  if (e <= 0) e = 0;

trifft AISB auf Number.isNaN(e) NICHT zu, da (NaN <= 0) === false.

Deswegen kann e bei der return-Anweisung NaN sein.


Ich würde übrigens π (und allgemein echte Konstanten, die nicht als 
Platzhalter dienen) NICHT als Argument (hier: pi) übergeben; schon allein 
weil die Parameterwerte in einer Funktion versehentlich modifiziert werden 
könnten (dagegen hilft auch der Strict Mode nicht).  Ausserdem bläht es die 
Funktionssignatur unnötig auf und widerspricht dem Gesetz von Demeter 
(“Black box”-Prinzip).

Wenn Du nicht ständig Math.PI schreiben willst, dann deklarier Dir eine 
globale Konstante oder (besser) eine Modulkonstante:

  let myMod = (function () {
    /* Module constants */

    const PI = Math.PI;


    /* Private functions */
 
    function _privateFunctionName (…)
    {
      … PI …
    }


    /* Public properties */

    return {
      publicMethodName: function (…) {
        … _privateFunctionName(…) …
      }
    };
  }());

Irnkwo im HTML-Code:

  … myMod.publicMethodName(…); …

Die Bezeichner sind geeignet zu ändern.

Auch ist “e” ein schlechter (weil mehrdeutiger) Variablenbezeichner.

-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | <http://PointedEars.de/es-matrix>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#5285

FromLeo Baumann <ib@leobaumann.de>
Date2021-11-29 15:41 +0100
Message-ID<so2or0$tq6$1@solani.org>
In reply to#5284
Am 29.11.2021 um 00:51 schrieb Thomas 'PointedEars' Lahn:
> Nochmals:*Benutz*  *einen*  *Debugger*.

Nachdem ich mich mit dem Debugger vertraut gemacht habe und einen 
Breakpoint gesetzt habe, konnte ich herausfinden wo die NaNs entstehen:

In dem Befehl

if (h!=0) 
{ris=Math.abs(Math.acos(Math.sin(bs)-Math.sin(bb)*cose1/Math.cos(bb)/Math.sin(h)));} 


wird ris zu NaN obwohl alle bestimmenden Parameter im grünen Bereich 
sind, also bs,bb,cose1,cos(bb) und sin(h)

Das treibt mich jetzt aber wirklich zur Verzweifelung :(

[toc] | [prev] | [next] | [standalone]


#5286

FromArno Welzel <usenet@arnowelzel.de>
Date2021-11-29 16:12 +0100
Message-ID<j0k8vaFl6cpU1@mid.individual.net>
In reply to#5285
Leo Baumann:

> Am 29.11.2021 um 00:51 schrieb Thomas 'PointedEars' Lahn:
>> Nochmals:*Benutz*  *einen*  *Debugger*.
> 
> Nachdem ich mich mit dem Debugger vertraut gemacht habe und einen 
> Breakpoint gesetzt habe, konnte ich herausfinden wo die NaNs entstehen:
> 
> In dem Befehl
> 
> if (h!=0) 
> {ris=Math.abs(Math.acos(Math.sin(bs)-Math.sin(bb)*cose1/Math.cos(bb)/Math.sin(h)));} 
> 
> 
> wird ris zu NaN obwohl alle bestimmenden Parameter im grünen Bereich 
> sind, also bs,bb,cose1,cos(bb) und sin(h)

Was ist "grüner Bereich"? Relevant ist, ob folgendes erfüllt ist:

Math.cos(bb) != 0
Math.sin(h) != 0


-- 
Arno Welzel
https://arnowelzel.de

[toc] | [prev] | [next] | [standalone]


#5287

FromLeo Baumann <ib@leobaumann.de>
Date2021-11-29 16:23 +0100
Message-ID<so2r9c$v66$1@solani.org>
In reply to#5286
Am 29.11.2021 um 16:12 schrieb Arno Welzel:
> Was ist "grüner Bereich"? Relevant ist, ob folgendes erfüllt ist:
> 
> Math.cos(bb) != 0
> Math.sin(h) != 0

Natürlich ist beides erfüllt, 10 x kontrolliert. :(

[toc] | [prev] | [next] | [standalone]


#5288

FromLeo Baumann <ib@leobaumann.de>
Date2021-11-29 16:30 +0100
Message-ID<so2rn2$2te$1@solani.org>
In reply to#5287
Am 29.11.2021 um 16:23 schrieb Leo Baumann:
> Am 29.11.2021 um 16:12 schrieb Arno Welzel:
>> Was ist "grüner Bereich"? Relevant ist, ob folgendes erfüllt ist:
>>
>> Math.cos(bb) != 0
>> Math.sin(h) != 0
> 
> Natürlich ist beides erfüllt, 10 x kontrolliert. :(
> 

So, nochmals kontrolliert - beides im grünen Bereich!!!

V E R Z W E I F E L U N G :(

[toc] | [prev] | [next] | [standalone]


#5289

FromArno Welzel <usenet@arnowelzel.de>
Date2021-11-29 16:56 +0100
Message-ID<j0kbh9FlmpuU1@mid.individual.net>
In reply to#5287
Leo Baumann:

> Am 29.11.2021 um 16:12 schrieb Arno Welzel:
>> Was ist "grüner Bereich"? Relevant ist, ob folgendes erfüllt ist:
>>
>> Math.cos(bb) != 0
>> Math.sin(h) != 0
> 
> Natürlich ist beides erfüllt, 10 x kontrolliert. :(

Also:

Du sagst, dass hier würde NaN ergeben:

Math.abs(
  Math.acos(
    Math.sin(bs) -
    Math.sin(bb) * cose1 / Math.cos(bb) / Math.sin(h)
  )
)

Und bs, bb, cose1 und h sind gültige numerische Werte und Math.cos(bb)
sowie Math.sin(h) sind ungleich 0.

Das ist aus meiner Sicht unmöglich.

-- 
Arno Welzel
https://arnowelzel.de

[toc] | [prev] | [next] | [standalone]


Page 1 of 2  [1] 2  Next page →

Back to top | Article view | de.comp.lang.javascript


csiph-web