f'(x) einer Funktion

  • VB.NET

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von exc-jdbi.

    f'(x) einer Funktion

    Guten Tag,

    der Josephus-Diskussions-Initiator mal wieder :)
    Neue Woche, neue Aufgabe. Zuletzt haben wir die Themen Methoden (Subroutinen und Funktionen) sowie Rekursion behandelt. Auch hier wie üblich, in der Vorlesung soweit alles kapiert und macht auch Sinn aber wenn es dann darum geht, ein Programm zu schreiben, da bin ich wieder komplett überfordert.

    Ich wäre dankbar über etwas Begleitung um die Aufgabe überhaupt beginnen zu können (bitte erst einmal keine Musterlösungen ^^ )

    Hier mal die Beschreibung.
    verlangt ist eine Windows-Forms-App, die eine Textbox enthält, in der eine Funktion f(x) in folgender Form eingetragen werden kann: ax^k+bx+i+(...)

    Über einen Button soll f'(x) gebildet werden und in einer zweiten Textbox ausgegeben werden.

    Nur Funktionen mit ganzzahliger Potenz k sowie Faktor a beliebige reelle Zahlen.


    Ich habe zwar schon eine Lösung zugeschickt bekommen die auch funktioniert aber habe mir absichtlich den Code noch nicht angesehen. Weiß nur, dass es in <40 Zeilen Code realisierbar ist.

    Ableitungsregeln sind klar. Mein erstes Problem wäre, wie ich hier zur Grundstruktur komme bzw. welche Elemente ich überhaupt in meinem Code benötige.
    In die Textbox kommt ein Input, der vom Programm gelesen und dann weiterverarbeitet wird. Falls hier eine Funktion ordnungsgemäß eingegeben wurde, "soll etwas passieren". Welche Fragen muss ich mir hier stellen? Weil plump ausgedrückt weiß ich ja, dass die Potenz vor den Faktor kommt und um eins reduziert wieder oben hingeschrieben wird.

    Also wirklich sehr gerne Schritt für Schritt...

    Freundliche Grüße
    Die Frage, die sich immer stellt: Wie bekomme ich aus dem Input die Infos, die ich brauche, um das Problem zu lösen?

    Nuja, ich würd den Term eben aufspalten. Den Teil vor dem x^ (suchen, an welcher Stelle x^ steht und dann eben alles davor hernehmen), dann was zwischen ^ und + steht usw. Dann die Teiltexte in Zahlen umwandeln, rechnen, Ergebnis wieder hinschreiben.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo,

    na ja sieht doch erstmal relativ einfach aus.

    Wenn dein Thema Subroutinen und Funktionen ist kannst du das ganze ja in einer Funktion umsetzen.

    VB.NET-Quellcode

    1. Public Function BerechneAbleitung(int k, double a, bouble b) As String
    2. string ableitung
    3. '...
    4. Return ableitung
    5. End Function


    Dieser übergibst du die relevanten "Zahlen" die du aus dem String ausließt.

    Dann musst du in dieser Funktion nur noch die Ableitung berechnen:
    1. k mit a multiplizieren und als neues a speichern
    2. k - 1
    3. wenn x^1 also bei "bx" bleibt ja nur die konstante stehen und das x fällt weg...
    4. eine konstante fällt bei der Ableitung ja eh weg...

    Hilft das soweit, oder wolltest du was ganz anderes?

    Grüße
    Florian
    ----

    WebApps mit C#: Blazor
    @VaporiZed Noch einfacher.
    @Benutzername Führe das Problem auf das Elementarproblem zurück.
    Ich gehe davon aus, dass der Input ein Polynom beliebiger Ordnung mit nicht-negativen Exponenten ist.
    Wenn diese Annahme falsch ist, melde das sofort.
    ====
    Wenn Du den Term an den +- und --Operatoren splittest, bekommst Du ein Array von einzelnen Termen der Struktur a * b ^ c.
    Das kannst Du elementar differenzieren und automatisieren.
    Das machst Du für jeden Term einzeln und setzt die einzelnen Ergebnisse wieder zu einem String zusammen.
    Feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Ich gehe davon aus, dass der Input ein Polynom beliebiger Ordnung mit nicht-negativen Exponenten ist.
    Anforderungen siehe Post#1:

    Benutzername schrieb:

    Nur Funktionen mit ganzzahliger Potenz k sowie Faktor a beliebige reelle Zahlen.

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed OK, ganzzahlige explizit negative Exponenten lassen sich dann nicht so splitten, dann wird das Zerhackstückeln etwas aufwändiger.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    @VaporiZed OK, ganzzahlige explizit negative Exponenten lassen sich dann nicht so splitten, dann wird das Zerhackstückeln etwas aufwändiger.

    doch lässt es sich, wenn man nach der Position eines ​^ prüft ob eine Zahl oder ein Minus steht. Dann kannst du die Zerstückelung zusammenschreiben.

    Aber ja, der Gedanke ist ist wirklich, dass eine Funktion dieser Form ​ax^k+bx+i+(...) immer eine Verkettung von Polynomen sind. Das heißt, du musst nur jeden einzelnen Summanden finden und diesen aufbewahren (in einem Array, in einer List(Of ...) etc. danach iterierst du durch diese Aufbewahrung und durchläufst die mathematischen Operationen.

    Du weißt ja schon, dass die Potenz als Faktor davor geschrieben wird, du weißt, dass der Exponent um eins verringert wird.
    Dies schreibst du in einen String, der bei jeder weiteren Iteration um den nächsten Summanden erweitert wird (Kleiner Hinweis und Tipp) nutze beim Iterieren eine weitere Variable, die das Vorzeichen mit anfügt

    Nachdem du durch den String komplett gebaut hast, gibst du ihn in TextBox 2 wieder aus
    @TE: und wieder steht die Frage im Raum: Welcher Idiot stellt solche Aufgaben?
    Du hast da einen Parser für mathematische Ausdrücke am Hals - eine Aufgabe, die ich nach ca. 10 jahren Programmier-Praxis befriedigend lösen konnte.
    Das Problem bei derlei Ausdrücken sie die Operatoren, und welchen Vorrang sie haben sollen.
    Üblicherweise kommt noch die Analyse von Klammern hinzu-
    Was dein Beispiel zwar nicht zeigt - aber es wäre ein blödsinniger Mathe-Parser, wenn er Variablen und Operatoren behandeln könnte, aber geklammerte Notation nicht.
    Und du hast ein Beispiel in < 40 Zeilen?
    Bitte!!
    Häng das an.
    Da wäre ich sehr dran interessiert, weil meine Lösung geht nicht unter 300 Zeilen, in 4 oder 5 Dateien.

    Es geht also nur um

    - ohne ln(x), cos(x), Wurzel(x) , Klammern, und dergleichen.

    Ok, dann habe ich das Gefühl, dass es unter 40 Zeilen machbar ist. Jede Potenz nach vorne schreiben und dekrementieren. Wie Padre sagte, musst du prüfen, ob nach dem ^ eine Zahl oder ein Minuszeichen kommt, wobei man sich auch das wieder fragen kann: So eine Funktion à la a*x^3+b*x^2+c*x+d wird ja normalerweise so entwickelt, dass die Potenz nicht negativ wird. Du schreibst aber nur „ganzzahliger Potenz“, nicht "natürliche Zahlen" (1, 2, 3, 4).

    Bartosz schrieb:

    Es geht also nur um vb-paradise.de/index.php/Attac…aeadb0eabea5c36e7b7f6e89d
    So eine Funktion à la a*x^3+b*x^2+c*x+d wird ja normalerweise so entwickelt, dass die Potenz nicht negativ wird.


    Ist korrekt, denn X^-k = 1 / (x^k)

    und dadurch muss man dann leider beim Differenzieren auch weitere Ableitungsregeln beachten.

    Demnach braucht man lediglich die einzelnen Summanden (inkl. Vorzeichen) trennen, mathematisch behandeln, zusammenfügen et voliá

    Und da hier (erstmal) keine Lösung in Form von Code gewünscht war/ist, habe ich es erstmal nur mit Worten umschreiben
    Ich will mich hier gar nicht so einmischen, aber ich möchte eines erwähnen. Des kommt mir wirklich falsch vor, negative Potenzen in einer Polynomfunktion zu haben! Ich habe noch nie in meinem Leben
    $$a \cdot x^{-3} + b \cdot x^{-2} + ...$$
    gesehen!
    Es sind natürliche Zahlen als Potenz, statt "nur ganzahlig"

    de.wikipedia.org/wiki/Polynom
    $n \geq 0$


    By the way: ich habe das spaßeshalber ebenso fertig programmiert. Es funktioniert prima. „Leider“ komme ich auf 100 Zeilen. Ich muss aber dazusagen, dass ich darauf geachtet habe, dass es chique aussieht. In der Ausgabe steht dann nicht
    .. * x^0 + 0 und so was unnötiges mein ich.
    An die Neulinge: Nutzt Option Strict On und Option Infer Off. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.
    Ja, wenn x Element N, dann hättest du Recht, aber tatsächlich, wenn man Mathematik studiert, kommt man auch mal an Polynomen mit negativem Exponenten (hierfür gibt es extra Differenzierungsregeln) und sogar Brüche, Multiplikatoren und auch Differenzieren nach mehr als einer Variablen können möglich und vorausgesetzt werden. Also nur, weil du das nicht gesehen hast, heißt es nicht, dass es das nicht gibt :P

    Die Regel von [a^-x]' ist die gleiche, die es auf für [a^x]' gilt: man schreibt den Exponenten nach von vorne und reduziert um eins. Aus [a^-x]' wird also -x* a^(-x-1)

    Beispiel: [a^-3]' (abgeleitet nach a) = -3 * a^(-3-1) = -3 * a^-4

    Und das interessante dabei ist, dass bei der Ableitung der Ableitung oder eben f''(a) das Vorzeichen alternierend ist.
    Komisch,

    Mein altes verstaubtes Formelbuch mit einigen wenigen Dif.-Regeln drin sagt genau was anders.

    f(x) = a^−x
    f(x) = 1 / a^x
    f'(x) = -ln(a) / a^x << --- Das stimmt doch nicht oder
    f''(x) = ln^2(a) / a^x

    f(a) = a^-3
    f(a) = 1 / a^3
    f'(a) = -3 / a^4
    f''(a) = 12 / a^5

    Etwa so wenn ich die Regeln anschaue. Stimmt das? Das obere wäre nach x abgeleitet. Das untere nach a.

    Ich würde sagen da ist ein riesen "BUG" in meinem Formelbuch :)
    @PadreSperanza hat da schon recht gehabt.


    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „exc-jdbi“ ()

    @exc-jdbi
    f'(x) = -ln(a) / a^x << --- Das stimmt doch nicht oder
    Doch, dein Mathebuch hat Recht :)

    a^-x abgleitet nach x ergibt -ln(a)/a^x

    a^-3 abgeleitet nach a ergibt -3/a^4

    https://www.ableitungsrechner.net/

    Bilder
    • Screenshot 2020-12-14 220358.png

      120,93 kB, 844×471, 45 mal angesehen
    • Screenshot 2020-12-14 220424.png

      31,02 kB, 409×147, 45 mal angesehen
    • Screenshot 2020-12-14 220505.png

      167,89 kB, 892×572, 39 mal angesehen
    Es gibt auch eine Website für das Gegenteil des Ableitens – den Integralrechner. integralrechner.de/
    Beachte nur bitte, dass da ein Programm hinter steckt. Du weißt sicherlich, dass, wenn man Integrale händisch löst, man auf ein anderes Ergebnis (Stammfunktion) kommt, als wie dieser Rechner. Die Lösung ist ebenso richtig, da es mehrere Stammfunktionen für eine Funktion f(x) geben kann. Ich kann ja mal ein „scheunes Integral“, wie mein Matheprof zu sagen pflegte, raussuchen, wenn du Lust hast.

    Solche Seiten sind etwas umstritten, weil Schüler mit ihren Smartphones in einer Klausur schummeln könnten, weswegen Schulen bei den Abiturprüfungen Störsender aufbauen. Letzteres ist aber auch rechtlich fragwürdig, weil man dadurch das Hochhaus von nebenan stört


    Es gibt sogar eine Website, die dir eine Fouriertransformation macht, wenn du Python kannst numworks.com/simulator/

    Also nur, weil du das nicht gesehen hast, heißt es nicht, dass es das nicht gibt
    Ja ok... Ich war nur von diesen Schulbuchaufgaben aus der 11. Klasse ausgegegangen. Zum Beispiel "Ein Ballon startet bei {0/0}, ist bei km 30 so-und-so hoch und kommt bei km 60 wieder unten auf." Und dann nimmt man sich ja eine Polynomfunktion her und löst die Koeffizienten... Und auch im Studium hatte ich das nie gehabt. Aber jaaaa, du hast schon Recht. Man soll nie 'nie' sagen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Bartosz“ ()

    @exc-jdbi

    Genauso wie dein Mathebuch das sagt, ist das auch. Entscheiden ist eben, wo die Variable steckt, nach der mal ableitet. Und da Polynomen (wie in Ausgangslage beschrieben) nur in der Form a*x^k vorkommen, wobei a und k = konstant, war meine Aussage da treffend. Aber dennoch kann k in diesen Fällen dennoch negativ sein.

    Und ja, diese Seiten sind echt klasse und ja, dahinter stecken Programme von teils echt gewaltiger Genialität.... und auch wenn ich derzeit nur aus Spaß programmiere... da möchte ich irgendwann mal hinkommen, genau solche Dinge auch hinzubekommen :)