<?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[Mittelwert einer beliebigen Funktion]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte eigentlich nur einen Mittelwert einer Funktion ausgeben. Allerdings soll der Mittelwert innerhalb eines Zeitfensters bestimmt werden.</p>
<p>Die mathematische Funktion die das letztendlich tut lautet:</p>
<p>(IntegralBisZeitpunkt_2 - IntegralBisZeitpunkt_1) / ( Zeitpkt_Ende - Zeitpkt_Beginn )</p>
<p>Das Simulationsprogramm arbeitet ja diskontinuierlich, d.h zu bestimmten Zeitpunkten werden Werte bestimmt, daher meine Frage: geht sowas als Bedingung:</p>
<p>if (S-&gt;t == Zeitpkt_Ende) /* S-&gt;t ist die Simulationszeit */</p>
<p>Der gesamte Quelltxt:</p>
<pre><code>class AverageFunctionValue {
/*-----------------------------------------------------------------------*/
/*   Eingang = Funktion und Ausgang = Mittelwert      			 */
/*   nach Formel Mittelwert = 1/(t_2 - t_1) int(Eingang)dt ; 		 */
/*   Integral geht von t_1 bis nach t_2 				 */
/*   Man sucht sich einen Zeitraum (t1 bis t2) aus indem man den Mittelwert berechnen will */
/*-----------------------------------------------------------------------*/
public:

// Parameter

// HilfsParameter
  char* ElementName;
  char* ParameterName;
  LDOUBLE IntegralBisZeitpunkt_1;
  LDOUBLE IntegralBisZeitpunkt_2;  
  LDOUBLE Zeitpkt_Beginn;
  LDOUBLE Zeitpkt_Ende;

// Variablen
  LDOUBLE *Eingangs_Funktion;
  LDOUBLE *IntegrierterEingang;
  LDOUBLE *Drehzahl;
  LDOUBLE *Winkel_Beginn;
  LDOUBLE *Winkel_Ende;

// HilfsFunktion
  void HilfsFunktion (SIMSTRUCT* S)
  {

  }

// ExitFunktion
  void ExitFunktion (SIMSTRUCT* S)
  {
  }

// Funktionen
// IntegrierterEingang
  LDOUBLE IntegrierterEingangPunkt (SIMSTRUCT* S)
  {
     return (*Eingangs_Funktion);
  }

// Average_Function_Value algebra
  LDOUBLE Average_Function_Value (SIMSTRUCT* S)
  {

	Zeitpkt_Beginn = *Winkel_Beginn / (*Drehzahl * 2 * M_PI); 
	Zeitpkt_Ende = *Winkel_Ende / (*Drehzahl * 2 * M_PI);

    if (S-&gt;t == Zeitpkt_Beginn )
    {
       IntegralBisZeitpunkt_1 = *IntegrierterEingang;
    }

    if (S-&gt;t == Zeitpkt_Ende)
    {
       IntegralBisZeitpunkt_2 = *IntegrierterEingang;
    }

    if (S-&gt;t &gt;  Zeitpkt_Ende )
    {
        return ((IntegralBisZeitpunkt_2 - IntegralBisZeitpunkt_1) / (  Zeitpkt_Ende - Zeitpkt_Beginn  )  );
    }

		else

		{
			return (0);
		}

  }

};
// End
</code></pre>
<p>~Edit durch Arcoth: Code-Tags.~</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/329968/mittelwert-einer-beliebigen-funktion</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 15:37:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/329968.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Dec 2014 17:28:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mittelwert einer beliebigen Funktion on Tue, 16 Dec 2014 18:19:12 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte eigentlich nur einen Mittelwert einer Funktion ausgeben. Allerdings soll der Mittelwert innerhalb eines Zeitfensters bestimmt werden.</p>
<p>Die mathematische Funktion die das letztendlich tut lautet:</p>
<p>(IntegralBisZeitpunkt_2 - IntegralBisZeitpunkt_1) / ( Zeitpkt_Ende - Zeitpkt_Beginn )</p>
<p>Das Simulationsprogramm arbeitet ja diskontinuierlich, d.h zu bestimmten Zeitpunkten werden Werte bestimmt, daher meine Frage: geht sowas als Bedingung:</p>
<p>if (S-&gt;t == Zeitpkt_Ende) /* S-&gt;t ist die Simulationszeit */</p>
<p>Der gesamte Quelltxt:</p>
<pre><code>class AverageFunctionValue {
/*-----------------------------------------------------------------------*/
/*   Eingang = Funktion und Ausgang = Mittelwert      			 */
/*   nach Formel Mittelwert = 1/(t_2 - t_1) int(Eingang)dt ; 		 */
/*   Integral geht von t_1 bis nach t_2 				 */
/*   Man sucht sich einen Zeitraum (t1 bis t2) aus indem man den Mittelwert berechnen will */
/*-----------------------------------------------------------------------*/
public:

// Parameter

// HilfsParameter
  char* ElementName;
  char* ParameterName;
  LDOUBLE IntegralBisZeitpunkt_1;
  LDOUBLE IntegralBisZeitpunkt_2;  
  LDOUBLE Zeitpkt_Beginn;
  LDOUBLE Zeitpkt_Ende;

// Variablen
  LDOUBLE *Eingangs_Funktion;
  LDOUBLE *IntegrierterEingang;
  LDOUBLE *Drehzahl;
  LDOUBLE *Winkel_Beginn;
  LDOUBLE *Winkel_Ende;

// HilfsFunktion
  void HilfsFunktion (SIMSTRUCT* S)
  {

  }

// ExitFunktion
  void ExitFunktion (SIMSTRUCT* S)
  {
  }

// Funktionen
// IntegrierterEingang
  LDOUBLE IntegrierterEingangPunkt (SIMSTRUCT* S)
  {
     return (*Eingangs_Funktion);
  }

// Average_Function_Value algebra
  LDOUBLE Average_Function_Value (SIMSTRUCT* S)
  {

	Zeitpkt_Beginn = *Winkel_Beginn / (*Drehzahl * 2 * M_PI); 
	Zeitpkt_Ende = *Winkel_Ende / (*Drehzahl * 2 * M_PI);

    if (S-&gt;t == Zeitpkt_Beginn )
    {
       IntegralBisZeitpunkt_1 = *IntegrierterEingang;
    }

    if (S-&gt;t == Zeitpkt_Ende)
    {
       IntegralBisZeitpunkt_2 = *IntegrierterEingang;
    }

    if (S-&gt;t &gt;  Zeitpkt_Ende )
    {
        return ((IntegralBisZeitpunkt_2 - IntegralBisZeitpunkt_1) / (  Zeitpkt_Ende - Zeitpkt_Beginn  )  );
    }

		else

		{
			return (0);
		}

  }

};
// End
</code></pre>
<p>~Edit durch Arcoth: Code-Tags.~</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2433143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2433143</guid><dc:creator><![CDATA[DonPate]]></dc:creator><pubDate>Tue, 16 Dec 2014 18:19:12 GMT</pubDate></item><item><title><![CDATA[Reply to Mittelwert einer beliebigen Funktion on Tue, 16 Dec 2014 18:20:04 GMT]]></title><description><![CDATA[<p>Du fragst jetzt, ob man in C++ zwei Werte vergleichen kann? Äh, ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2433159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2433159</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 16 Dec 2014 18:20:04 GMT</pubDate></item><item><title><![CDATA[Reply to Mittelwert einer beliebigen Funktion on Wed, 17 Dec 2014 08:23:48 GMT]]></title><description><![CDATA[<ol>
<li>Ich besser auf &gt;= prüfen</li>
<li>Warum sind das bei dir so viele Zeiger (Zeilen 23-26)?</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/2433253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2433253</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Wed, 17 Dec 2014 08:23:48 GMT</pubDate></item><item><title><![CDATA[Reply to Mittelwert einer beliebigen Funktion on Wed, 17 Dec 2014 10:13:51 GMT]]></title><description><![CDATA[<p>DocShoe schrieb:</p>
<blockquote>
<ol start="2">
<li>Warum sind das bei dir so viele Zeiger (Zeilen 23-26)?</li>
</ol>
</blockquote>
<p>Das sieht aus wie das C++ Interface von Matlab Simulink (da ist das leider normal).</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/32642">@DonPate</a>: Für Mittelwert gibts da aber schon nen <a href="http://de.mathworks.com/help/physmod/sps/powersys/ref/mean.html" rel="nofollow">fertigen Block</a>. Die Zeitabfrage kannst du ja auch mit Simulink Blöcken machen, da würde ich nicht extra ein C++ file darum bemühen (wenn der Mittelwert in einem bestimmten Bereich wirklich alles ist was du willst).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2433264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2433264</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Wed, 17 Dec 2014 10:13:51 GMT</pubDate></item><item><title><![CDATA[Reply to Mittelwert einer beliebigen Funktion on Wed, 17 Dec 2014 10:44:45 GMT]]></title><description><![CDATA[<p>Danke.<br />
Nein, es ist kein Matlab/Simulink sondern ein anderes Simulationsprogramm.<br />
1. Frage: Kann man sich bei Simulink den C++ Quellcode des &quot;Mean&quot; Bauteils ansehen ? Wie ?</p>
<p>[Die Variablen (Zeiger) sind Eingänge in das Bauteil (abgesehen von *IntegrierterEingang)].</p>
<p>Natürlich kann man vergleichen, aber die Frage ist doch:<br />
Im Simulationsprogramm werden nur diskrete Zeitwerte betrachtet.<br />
D.h. nicht alle Zeitwerte sind vorhanden.<br />
Was macht das Programm wenn man</p>
<p>Simulationtime == IrgendeinWert</p>
<p>setzt, wobei beispielsweise die Simulationtime nie IrgendeinWert ist. ZB:</p>
<p>Simulationtime geht folgendermaßen:<br />
0 sec<br />
0.1 sec<br />
0.2 sec<br />
usw.</p>
<p>Aber IrgendweinWert = 0.15 sec.</p>
<p>Das war eigentlich das einzige was noch falsch sein könnte, sonst müsste es funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2433267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2433267</guid><dc:creator><![CDATA[DonPate]]></dc:creator><pubDate>Wed, 17 Dec 2014 10:44:45 GMT</pubDate></item><item><title><![CDATA[Reply to Mittelwert einer beliebigen Funktion on Wed, 17 Dec 2014 11:48:05 GMT]]></title><description><![CDATA[<p>DonPate schrieb:</p>
<blockquote>
<p>1. Frage: Kann man sich bei Simulink den C++ Quellcode des &quot;Mean&quot; Bauteils ansehen ? Wie ?</p>
</blockquote>
<p>Nicht das ich wüsste.</p>
<p>DonPate schrieb:</p>
<blockquote>
<p>Natürlich kann man vergleichen, aber die Frage ist doch:<br />
Im Simulationsprogramm werden nur diskrete Zeitwerte betrachtet.<br />
D.h. nicht alle Zeitwerte sind vorhanden.<br />
Was macht das Programm wenn man</p>
<p>Simulationtime == IrgendeinWert</p>
<p>setzt, wobei beispielsweise die Simulationtime nie IrgendeinWert ist. ZB:</p>
<p>Simulationtime geht folgendermaßen:<br />
0 sec<br />
0.1 sec<br />
0.2 sec<br />
usw.</p>
<p>Aber IrgendweinWert = 0.15 sec.</p>
</blockquote>
<p>Naja, da hast du mehrere Möglichkeiten. Entweder &quot;Zero-Order Hold&quot;, also den Wert des vorherigen Zeitschritts. Bei dir wäre der Wert bei 0.15 sec dann der selbe wie bei 0.1 sec.</p>
<p>Oder durch halt durch Interpolation, hier zwischen den Werten 0.1 und 0.2 an der Stelle 0.15.</p>
<p>Matlab bzw. Simulink benutzt oft eine Heuristik welche entscheidet welche der beiden Methoden verwendet wird: Ist die Kurve &quot;glatt&quot; also näherungsweise differenzierbar, wird Interpolation verwendet. Enthält die Kurve Sprünge, wird Zero-Order Hold verwendet.</p>
<p>Leider wird auf die Heuristik in der Dokumentation nicht weiter eingegangen, wie das also im Detail abläuft kann ich dir nicht sagen. Mit Zero-Order hold solltest du aber gut fahren, auch bei kontinuierlichen Signalen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2433280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2433280</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Wed, 17 Dec 2014 11:48:05 GMT</pubDate></item></channel></rss>