<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[[gelöst] Mittelwertbildung]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>ich habe mal wieder eine Frage.</p>
<p>Ich arbeite mit der Monte Carlo Methode, d.h. ich bin gezwungen mein Programm sehr oft laufen zu lasen, um die Ergebnisse am Ende zu mitteln.<br />
Allerdings würde ich auch gerne zu verschiedenen Zeitpunkten gemittelte Ergebnisse (Datensätze) abspeichern, um sie graphisch darzustellen.</p>
<p>Also wenn ich z.B. das Programm n = 100 mal laufen lassen möchte bis zur Zeiteinheit 50 (hochgezählt in 0.1er), so sieht das bisher so aus.</p>
<pre><code class="language-cpp">int n = 100;

for(int i = 0; i &lt; n; i++)
{
  double actual_time = 0;
  double final_time = 50;
  double time_step = 0.1;

  while(actual_time &lt; final_time)
  {
    // do something

    actual_time = actual_time + time_step;
  }
}
</code></pre>
<p>Jetzt möchte ich z.B. zählen wie viele Elemente die Energie x zwischen 0 und 100 haben mit einer Genauigkeit von 1.<br />
D.h. ich bastle mir einen Array mit 100 Einträgen.</p>
<pre><code class="language-cpp">double energy[100] = { 0 };
</code></pre>
<p>Wenn dann im Code ein Element mit der Energie x erzeugt wird, so runde ich das ganze durch Verwandlung in ein <em>int</em> in eine ganze Zahl und habe direkt den Eintrag für meinen Array, also z.B.</p>
<pre><code class="language-cpp">double energy = 37.83;
int counter = energy; // counter besitzt jetzt den Wert 37
energy[counter]++;
</code></pre>
<p>Und am Ende müsste ich jedes Element von energy[100] durch die Anzahl der Durchläufe teilen.</p>
<pre><code class="language-cpp">double energy[100] = { 0 };

int n = 100;

for(int i = 0; i &lt; n; i++)
{
  double actual_time = 0;
  double final_time = 50;
  double time_step = 0.1;

  while(actual_time &lt; final_time)
  {
    // do something
    double energy x;
    int counter = x;
    energy[counter]++; 

    actual_time = actual_time + time_step;
  }
}

for(int i = 0; i &lt; n; i++)
{
  energy[i] = energy[i] / n;
}

// mittels fstream energy[100] in eine Datei schreiben
</code></pre>
<p>So, ich denke es ist nicht besonders hübsch, aber so würde ich es momentan machen und das sollte auch funktionieren. Hoffe ich.</p>
<p>Jetzt würde ich nur gerne auch zwischendrin Datensätze abfangen. Also z.B. nach der Zeiteinheit 15. Ich könnte das z.B. durch das Kriterium</p>
<pre><code class="language-cpp">if(actual_time % 15 == 0);
</code></pre>
<p>abfangen.</p>
<p>Wie könnte ich das machen?<br />
Ich könnte einen energy15[100] Array erzeugen, für den gilt</p>
<pre><code class="language-cpp">if(acutal_time % 15 == 0)
{
  for(int i = 0; i &lt; n; i++)
  {
    energy15[i] = energy[i];
  }
}
</code></pre>
<p>Und den müsste ich nach jedem Durchlauf aktualisieren, also nachdem wie while - Schleife beendet ist.</p>
<pre><code class="language-cpp">for(int i = 0; i &lt; n; i++)
{
  energy15[i] = energy15[i] + (energy15[i] / n);
}
</code></pre>
<p>Das kommt mir aber alles wieder so gepfrimelt vor. Ich hatte auch schon daran gedacht einen Container aus der STL zu nehmen, nachdem mit der Liste schon so gute Erfahrung gemacht habe.</p>
<p>Versteht ihr was ich meine und könnt mir weiterhelfen?</p>
<p>Gruß,<br />
Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/300520/gelöst-mittelwertbildung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 12 Aug 2026 19:27:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/300520.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 04 Mar 2012 20:55:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst] Mittelwertbildung on Wed, 07 Mar 2012 08:13:04 GMT]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>ich habe mal wieder eine Frage.</p>
<p>Ich arbeite mit der Monte Carlo Methode, d.h. ich bin gezwungen mein Programm sehr oft laufen zu lasen, um die Ergebnisse am Ende zu mitteln.<br />
Allerdings würde ich auch gerne zu verschiedenen Zeitpunkten gemittelte Ergebnisse (Datensätze) abspeichern, um sie graphisch darzustellen.</p>
<p>Also wenn ich z.B. das Programm n = 100 mal laufen lassen möchte bis zur Zeiteinheit 50 (hochgezählt in 0.1er), so sieht das bisher so aus.</p>
<pre><code class="language-cpp">int n = 100;

for(int i = 0; i &lt; n; i++)
{
  double actual_time = 0;
  double final_time = 50;
  double time_step = 0.1;

  while(actual_time &lt; final_time)
  {
    // do something

    actual_time = actual_time + time_step;
  }
}
</code></pre>
<p>Jetzt möchte ich z.B. zählen wie viele Elemente die Energie x zwischen 0 und 100 haben mit einer Genauigkeit von 1.<br />
D.h. ich bastle mir einen Array mit 100 Einträgen.</p>
<pre><code class="language-cpp">double energy[100] = { 0 };
</code></pre>
<p>Wenn dann im Code ein Element mit der Energie x erzeugt wird, so runde ich das ganze durch Verwandlung in ein <em>int</em> in eine ganze Zahl und habe direkt den Eintrag für meinen Array, also z.B.</p>
<pre><code class="language-cpp">double energy = 37.83;
int counter = energy; // counter besitzt jetzt den Wert 37
energy[counter]++;
</code></pre>
<p>Und am Ende müsste ich jedes Element von energy[100] durch die Anzahl der Durchläufe teilen.</p>
<pre><code class="language-cpp">double energy[100] = { 0 };

int n = 100;

for(int i = 0; i &lt; n; i++)
{
  double actual_time = 0;
  double final_time = 50;
  double time_step = 0.1;

  while(actual_time &lt; final_time)
  {
    // do something
    double energy x;
    int counter = x;
    energy[counter]++; 

    actual_time = actual_time + time_step;
  }
}

for(int i = 0; i &lt; n; i++)
{
  energy[i] = energy[i] / n;
}

// mittels fstream energy[100] in eine Datei schreiben
</code></pre>
<p>So, ich denke es ist nicht besonders hübsch, aber so würde ich es momentan machen und das sollte auch funktionieren. Hoffe ich.</p>
<p>Jetzt würde ich nur gerne auch zwischendrin Datensätze abfangen. Also z.B. nach der Zeiteinheit 15. Ich könnte das z.B. durch das Kriterium</p>
<pre><code class="language-cpp">if(actual_time % 15 == 0);
</code></pre>
<p>abfangen.</p>
<p>Wie könnte ich das machen?<br />
Ich könnte einen energy15[100] Array erzeugen, für den gilt</p>
<pre><code class="language-cpp">if(acutal_time % 15 == 0)
{
  for(int i = 0; i &lt; n; i++)
  {
    energy15[i] = energy[i];
  }
}
</code></pre>
<p>Und den müsste ich nach jedem Durchlauf aktualisieren, also nachdem wie while - Schleife beendet ist.</p>
<pre><code class="language-cpp">for(int i = 0; i &lt; n; i++)
{
  energy15[i] = energy15[i] + (energy15[i] / n);
}
</code></pre>
<p>Das kommt mir aber alles wieder so gepfrimelt vor. Ich hatte auch schon daran gedacht einen Container aus der STL zu nehmen, nachdem mit der Liste schon so gute Erfahrung gemacht habe.</p>
<p>Versteht ihr was ich meine und könnt mir weiterhelfen?</p>
<p>Gruß,<br />
Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2188494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2188494</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Wed, 07 Mar 2012 08:13:04 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Mittelwertbildung on Sun, 04 Mar 2012 21:44:01 GMT]]></title><description><![CDATA[<p>Trenne Simulation und Messung. Schreib dir einfach zu allen Zeitpunkten die dich interessieren die Energien raus. Du wirst schließlich in den seltensten Fällen <strong>nur</strong> die Energieverteilung für die Auswertung brauchen.</p>
<p>Du kannst natürlich trotzdem Zwischenauswertungen machen. Dafür empfehle ich dir aber, von deinem jetzigen Design aus nochmals ganz gewaltig zu abstrahieren. Biete in deiner Simulation ein abstraktes Interface für Messungen an. Die Messungen sind dann eigene Klassen, die dieses Interface nutzen und ihre eigenen Daten verwalten. Da kannst du dann eine Messklasse machen, die ein Histogramm alle N Schritte erstellt und erstellst davon dann zwei Instanzen, eine mit N=1 und eine mit N=15. Die Messungen werden von einem der Simulation und der Messung übergestellten Hauptprogramm verwaltet und bei jedem Messschritt werden alle Messungen auf die Simulation losgelassen und kommunizieren mit dieser über die bereitgestellte Schnittstelle.</p>
<p>Ich hoffe, diese Beschreibung in Worten ist für dich verständlich. Ich fürchte nämlich, selbst ein stark abgespecktes Beispiel würde locker ein paar hundert Zeilen haben und wäre auch nicht mal eben her zu entwickeln. Außer, ich nähme meinen eigenen fertigen Code als Grundlage und kürzte diesen, aber das möchte ich nicht. Aber immerhin kann ich dir so aus eigener Erfahrung sagen, dass dieses Design recht brauchbar ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2188500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2188500</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 04 Mar 2012 21:44:01 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Mittelwertbildung on Sun, 04 Mar 2012 22:39:16 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Du kannst natürlich trotzdem Zwischenauswertungen machen. Dafür empfehle ich dir aber, von deinem jetzigen Design aus nochmals ganz gewaltig zu abstrahieren. Biete in deiner Simulation ein abstraktes Interface für Messungen an. Die Messungen sind dann eigene Klassen, die dieses Interface nutzen und ihre eigenen Daten verwalten. Da kannst du dann eine Messklasse machen, die ein Histogramm alle N Schritte erstellt und erstellst davon dann zwei Instanzen, eine mit N=1 und eine mit N=15. Die Messungen werden von einem der Simulation und der Messung übergestellten Hauptprogramm verwaltet und bei jedem Messschritt werden alle Messungen auf die Simulation losgelassen und kommunizieren mit dieser über die bereitgestellte Schnittstelle.</p>
<p>Ich hoffe, diese Beschreibung in Worten ist für dich verständlich.</p>
</blockquote>
<p>Es geht so, ich muss einfach mehr und intensiver C++ lernen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>Und ich dachte schon Physik alleine wäre anstrengend ...</p>
<p>Gruß,<br />
Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2188522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2188522</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Sun, 04 Mar 2012 22:39:16 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Mittelwertbildung on Sun, 04 Mar 2012 23:05:47 GMT]]></title><description><![CDATA[<p>Das ist eigentlich nicht C++-spezifisch, sondern sehr allgemeine Überlegungen, insbesondere zu objektorientiertem Design, insbesondere &quot;separation of concerns&quot; (k.A. wie man das auf Deutsch sagt). Das einzige, was ein bisschen C++-spezifisch an meinem Beitrag ist, ist das Konzept der &quot;Klasse&quot;, welches in der objektorientierten Programmierung nur optional (aber nützlich!) ist und von C++ direkt unterstützt wird. Die Überlegungen kann man natürlich ziemlich 1:1 nach C++ übersetzen, aber prinzipiell gilt das in jeder Sprache, die Objektorientierung ermöglicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2188540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2188540</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 04 Mar 2012 23:05:47 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Mittelwertbildung on Mon, 05 Mar 2012 09:28:21 GMT]]></title><description><![CDATA[<p>Klaus82 schrieb:</p>
<blockquote>
<p>Und ich dachte schon Physik alleine wäre anstrengend ...</p>
</blockquote>
<p>Ist alles Ansichtssache, vor allem kommts drauf an, um welchen Teilbereich der Physik es geht. Wenns um theoretische Physik geht muss ich dir ab nem gewissen Level recht geben - dagegen ist C++ dann schon ein netter Zeitvertreib <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2188630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2188630</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 05 Mar 2012 09:28:21 GMT</pubDate></item></channel></rss>