Triviale Frage - lineare od quadrat. Funktionen



  • Hi bin im ersten Semester und gerade dabei was am Compiler zu basteln.

    Haben da ne Aufgabenstellung bekommen Extremwerte und Nullstellen mittel Schleifen zu berechnen.

    Extremwerte sind keine Thema nur bei den Nullstellen steh ich auf dem Schlauch.

    Bsp.

    double x,y;
    .
    .
    .

    for (x=-10;x<=10;x=x+0.1)
    {
    y=(x/300)(x*x-45)*(xx-10);

    if( y==0 )

    printf("\n\nNullstellen liegen bei x= %.2lf und y= %.2lf",x,y);
    }

    .... hab schon die einzelnen Polynome einzeln berechnet , mir wurden trotzdem keine Ergebnisse angezeigt. Wenn ich nur Ganzzahlen verwende und die Schrittweite auch ganzzahlig wähle klappt es (Bsp y=x^2-1).
    Der Fehler muss also bei der Bedingung liegen, glaube ich zu mindest.

    Kann mir jemand weiterhelfen. Bitte Lösungsvorschläge mittels Schleifenform anbieten. Newton - Gauss - Raphson - Varrianten bitte net posten 😛

    mfg Genkidama



  • Es wäre Zufall, wenn du mit deiner Schleife genau eine NST "triffst"; ersetze doch mal testweise if( y==0 ) durch if( |y|<epsilon ) mit z.B. epsilon=1e-6.

    Es ist numerisch nahezu nicht möglich (oder zumindest sehr schwierig und mit großen Ungenauigkeiten verbunden), alle NST eines Polynoms zu finden und deine Methode würde ich nicht zu den geeigneteren zählen 😃

    Achja: IMHO-Tags zum selber einfügen...



  • Witzige Frage. Zunächst ist natürlich 0.1 nicht exakt als double darstellbar, was dazu führt, dass eventuelle Nullstellen, die Vielfache von 1/10 sind, nicht getroffen werden, z.b. in deinem Fall +-3sqrt(5) und +-sqrt(10).



  • Ich würde versuchen das zu lösen, indem man mit den Vorzeichen arbeitet. Zuerst das Vorzeichen in einer Variablen speichern. Danach das neue y mit dem neuen x berechnen. Nun eine Fallunterscheidung,
    die Vorzeichen sind gleich -> keine Nullstelle,
    sie sind verschieden -> die Nullstelle liegt zwischen den beiden x-Werten,
    oder y==0 -> du hast sie genau getroffen.

    Wenn die Vorzeichen verschieden sind, kannst du in dem Bereich auch noch genauer suchen, so dass du die Nullstellen ziemlich genau feststellen kannst.

    So solltest du die meisten Nullstellen finden, das einzige Problem sind Polynome wie x^4-0,001=y, da findest du die Nullstelle nicht, weil das Vorzeichen "zu schnell" hin und zurück wechselt.



  • Genkidama schrieb:

    Extremwerte sind keine Thema nur bei den Nullstellen steh ich auf dem Schlauch.

    Aber um einen Extremwert zu berechnen, musst du doch eine Nullstelle der Ableitung finden.



  • Nicht zwingend. Man kann auch in einer Schleife den y-Wert mit dem vorhergehenden vergleichen. Wenn der Wert vorher immer gestiegen ist und nun plötzlich wieder kleiner ist, als beim letzten y, hat man ein lokales Maximum. Wenn er am sinken ist und nun grösser ist als beim letzten y, ist es ein Minimum. Das ist zwar ungenauer, aber viel einfacher zu programmieren, als wenn man den Term zuerst ableiten muss.



  • Bei der Nullstellenberechnung mit dem Sekantenverfahren benötigt man doch auch eine Schleife, oder?



  • Genau bei den Extremwerten habe ich den aktuellen Wert mit dem davor und danach verglichen ...

    if(y>yv && y>yn) und if (y<yv && y<yn)

    ... so werd mal Eure Vorschläge testen

    großes Danke erstma 😃



  • Bei Interesse kann ich den Quelltext für das Sekantenverfahren gerne mal posten



  • lustig schrieb:

    So solltest du die meisten Nullstellen finden, das einzige Problem sind Polynome wie x^4-0,001=y, da findest du die Nullstelle nicht, weil das Vorzeichen "zu schnell" hin und zurück wechselt.

    Das kann man abfangen, wenn man auch noch die Vorzeichen der ersten Ableitung berücksichtigt.

    Gruß Winn



  • Also wenn es sich nur um lineare oder quadratische Funktionen handelt, wird es ja wohl nicht das Ding sein, mal schnell die Ableitung zu bestimmen. Dann können wir auch das Newtonverfahren anwenden, um eine Nullstelle zu bekommen (quadratische Konvergenz) und können dann die zweite Ableitung bilden, um auch auf die Ableitung das Newtonverfahren loszulassen, um eine mögliche Extremstelle zu erhalten.



  • Du willst mit dem Newton-Verfahren die Nullstelle der Ableitung einer quadratischen Funktion bestimmen? 😮
    Dächte das ginge sogar mit dem Rechner einfacher. 😉



  • Jester schrieb:

    Du willst mit dem Newton-Verfahren die Nullstelle der Ableitung einer quadratischen Funktion bestimmen? 😮

    *LOL* OK, oder man benutzt die p-q-Formel, ja. Da bin ich natürlich nicht drauf gekommen... *AUTSCH* 😉



  • Ja, jetzt hast Du's fast... die Ableitung ist ja nurnoch linear, da brauchste nichtmal mehr p-q...
    🤡



  • Habs nun doch endlich hinbekommen.

    Funktioniert so ähnlich wie bei den Extremwerten .... nur dass die Bedingung
    if (y*yn<0) sein muss um Nullstellen zu berechnen und wenn die Schrittweite
    klein genug ist, bekommt man auch vernüftige Werte heraus.

    thx 4 ya help


Anmelden zum Antworten