<?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[mathematische Funtkion einer Funktion übergeben]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich will ein Programm schreiben, dass mir die Nullstellen einer Funktion mittels dem Newton-Verfahren löst. Grundsätzlich kein Problem, aber ich will das Newton-Verfahren in eine Funktion schreiben, die als Argument die math. Funktion und deren Ableitung übergeben bekommt. Doch wie kann ich der &quot;Nullstellen-Funktion&quot; ein mathematische Funtkion übergeben?</p>
<p>mfg<br />
Frank</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/145422/mathematische-funtkion-einer-funktion-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 07:14:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/145422.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 27 Apr 2006 17:46:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to mathematische Funtkion einer Funktion übergeben on Thu, 27 Apr 2006 17:46:27 GMT]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich will ein Programm schreiben, dass mir die Nullstellen einer Funktion mittels dem Newton-Verfahren löst. Grundsätzlich kein Problem, aber ich will das Newton-Verfahren in eine Funktion schreiben, die als Argument die math. Funktion und deren Ableitung übergeben bekommt. Doch wie kann ich der &quot;Nullstellen-Funktion&quot; ein mathematische Funtkion übergeben?</p>
<p>mfg<br />
Frank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1046623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046623</guid><dc:creator><![CDATA[bourne]]></dc:creator><pubDate>Thu, 27 Apr 2006 17:46:27 GMT</pubDate></item><item><title><![CDATA[Reply to mathematische Funtkion einer Funktion übergeben on Thu, 27 Apr 2006 17:56:53 GMT]]></title><description><![CDATA[<p>Da du sowieso ein Näherungsverfahren benutzt reicht es wohl, wenn du das entweder mit Funktionspointern oder als Template machst.</p>
<pre><code class="language-cpp">double f (double x)
{
    return std::pow (x, 3);
}

double f_ (double x)
{
    return 3 * (x * x);
}

typedef double (*Function) (double); // stimmt das so?

std::vector&lt;double&gt; newton (Function fun, Function abl)
{
    // tu was mit fun und abl
}
</code></pre>
<p>Wenn du die Funktionen eingeben lassen willst oder die Ableitung dynamisch bestimmen willst wird das ganze ungleich komplizierter. Das müsste man dann wohl mit Expression Templates (ähnlich wie in Boost.Spirit) bauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1046632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046632</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Thu, 27 Apr 2006 17:56:53 GMT</pubDate></item><item><title><![CDATA[Reply to mathematische Funtkion einer Funktion übergeben on Thu, 27 Apr 2006 19:55:44 GMT]]></title><description><![CDATA[<p>Danke!<br />
für die schnelle Antwort,leider hab ich bis jetzt noch nichts mit Templates gemacht, gerade diese Zeile :</p>
<pre><code>std::vector&lt;double&gt;
</code></pre>
<p>sagt mit noch nicht viel, werd mich aber mal mit dem Ansatz auseinandersetzen und mich gegebenenfalls nochmal melden.</p>
<p>Gruß Frank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1046731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046731</guid><dc:creator><![CDATA[bourne]]></dc:creator><pubDate>Thu, 27 Apr 2006 19:55:44 GMT</pubDate></item><item><title><![CDATA[Reply to mathematische Funtkion einer Funktion übergeben on Thu, 27 Apr 2006 21:24:26 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">typedef double (*Function) (double); // stimmt das so?
</code></pre>
<p>Nein. Ich vermute, dass mit Funktion in dem Kontext nicht die Funktion aus C++ gemeint ist, sondern eine Funktion aus mathematischer Sicht...<br />
f:x -&gt; f(x) = ax^2 +bx + c (c konstanter Anteil, b linearer Anteil und a bestimmt die Streckung bzw. Stauchung der Parabel)</p>
<p>z.B.: f:x -&gt; f(x) = -2x^2 -3x +15</p>
<p>Deshalb ist der gebrauch von Zeigern auf Funktionen schwachsinnig. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ein altes Codebsp. ...</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

/* Eine Funktion in der allgemeinen Form
   f:x -&gt; f(x) = ax^2 +bx +c

   c konstanter Anteil
   b lineare Anteil
   a bestimmt Streackung bzw. Stauchung der Parabel

   (Normalform wenn a=1 gilt) */

struct Fkt {
  int a;
  double b;
  double c;

  Fkt();
};

// Liefert Normalparabel
Fkt::Fkt()
  : a(1), b(0), c(0)
{}

/* Typ repräsentiert die Lösungsmenge. Man bedenke es gibt max. 2
   Nullstellen */
typedef double L_t[2];

/**
 * @brief Ermittelt die Lösungsmenge aus einer Funktion nach der
 * Lösungsformel für quadratische Funktionen
 * @param f Funktion in allgemeiner Form (s.o.)
 * @param result Ausgabe der Lösungsmenge
 *
 * Weshalb dieser Name? Unter Schülern wird die Funktion auch als
 * PQ-Formel bezeichnet. :)

 */

int pq_formel(const Fkt&amp; f, L_t&amp; result)
{
  fill(&amp;result[0], &amp;result[1], 0);
  double p, q;

  try { p=f.b/f.a; }
  catch(...) { p=0; }

  try { q=f.c/f.a; }
  catch(...) { q=0; }

  double D=pow(p/2, 2)-q;
  if (errno)
    D=-1;

  if (D==0)
    result[0]=-p/2;

  else if (D&gt;0) {
    result[0]=-p/2 +sqrt(D);
    result[1]=-p/2 -sqrt(D);
    return 2;
  }
  else if (D&lt;0)
    return 0;

  return static_cast&lt;int&gt;(D);
}

int main()
{
  // f:x -&gt; f(x) = x^2 -3x -15
  Fkt f;
  f.b=-3;
  f.c=-15;

  L_t res;
  int n=pq_formel(f, res);

  switch (n)
    {
    case 1:
      cout &lt;&lt; &quot;|L = { &quot; &lt;&lt; res[0] &lt;&lt; &quot; }\n&quot;;
      break;
    case 2:
      cout &lt;&lt; &quot;|L = { &quot; &lt;&lt; res[0] &lt;&lt; &quot;; &quot;
	   &lt;&lt; res[1] &lt;&lt; &quot; }\n&quot;;
      break;
    default:
      cout &lt;&lt; &quot;|L = { }\n&quot;;
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1046775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046775</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 27 Apr 2006 21:24:26 GMT</pubDate></item><item><title><![CDATA[Reply to mathematische Funtkion einer Funktion übergeben on Thu, 27 Apr 2006 21:28:33 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9606">@.filmor</a>:</p>
<p>wenigstens einer, der die Templates nicht scheut <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Habe mich seit längerem mit der Metaprogrammierung beschäftigt - super interessant das Thema <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="😉"
    /> Lange Rede kurzer Sinn, ich würde es vorziehen die Funktion (... da kommt man ja ganz durcheinander ... die aus C++ <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> als Funktionsobjekt zu übergeben, ist deutlich übersichtlicher und vorallendingen flexibler; die Funktion wäre dann auch im Zusammenhang mit der STL verwendbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1046776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046776</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 27 Apr 2006 21:28:33 GMT</pubDate></item><item><title><![CDATA[Reply to mathematische Funtkion einer Funktion übergeben on Fri, 28 Apr 2006 17:37:52 GMT]]></title><description><![CDATA[<p>lucky_tux schrieb:</p>
<blockquote>
<pre><code class="language-cpp">typedef double (*Function) (double); // stimmt das so?
</code></pre>
<p>Nein. Ich vermute, dass mit Funktion in dem Kontext nicht die Funktion aus C++ gemeint ist, sondern eine Funktion aus mathematischer Sicht...<br />
f:x -&gt; f(x) = ax^2 +bx + c (c konstanter Anteil, b linearer Anteil und a bestimmt die Streckung bzw. Stauchung der Parabel)<br />
[/cpp]</p>
</blockquote>
<p>Das &quot;stimmt das so?&quot; bezog sich nur auf die Syntax. Mir ist schon klar, was gemeint war, aber wie gesagt, wenn er die Funktionen zur Compile-Zeit kennt und ein Näherungsverfahren anwendet, dann kann er sie auch als C++-Funktionen implementieren. Dynamisch ist das ganze extrem kompliziert wenn es flexibel sein soll. Es gibt schließlich nicht nur ganzrationale Funktionen, die über einfache Parameter bestimmt werden können.</p>
<p>lucky_tux schrieb:</p>
<blockquote>
<p>ich würde es vorziehen die Funktion (... da kommt man ja ganz durcheinander ... die aus C++ <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> als Funktionsobjekt zu übergeben, ist deutlich übersichtlicher und vorallendingen flexibler; die Funktion wäre dann auch im Zusammenhang mit der STL verwendbar.</p>
</blockquote>
<p>Schon klar, die Möglichkeit hatte ich ja auch angedacht. Aber erstens sind auch normale Funktionen mit der STL verwendbar (ich weiß nicht wie du darauf kommst, dass nur Funktoren damit funktionieren) und zweitens wollte ich die Syntax nicht unnötig verkomplizieren (und das tuen Templates leider, was du auch gemerkt haben solltest, wenn du dich mit Metaprogrammierung beschäftigt hast (noch komplizierter sind nur noch Compilerfehler bei größeren Metakonstrukten :()).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1047268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1047268</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Fri, 28 Apr 2006 17:37:52 GMT</pubDate></item></channel></rss>