Servus zusammen,
ich würde gerne eine Exponentialfunktion ableiten und als abgeleitete Funktion ausgeben.
Das Problem: Die Exponentialfunktion aus Numpy hätte ich mit der diff(func) aus Sympy abgeleitet, wie die normalen Funktionen auch - das funktioniert jedoch nicht.
Könnte mir jemand helfen, wie ich Exponentialfunktionen in Python ableite?
Besten Dank vorab!
Ableiten von Exponentialfunktionen
Wenn Du mit Sympy arbeiten möchtest, mußt Du auch alle Funktionen aus sympy verwenden. Erst wenn Du mit allen Symbolischen Operationen fertig bist, kannst Du das Ergebnis per lambdify so umwandeln, dass Du es mit numpy-Arrays verwenden kannst.
Servus, danke schonmal für deine Antwort. Bin ein ziemlicher Anfänger in Python, weshalb ich eventuell etwas mehr Hilfe benötige ...
Ich habe die Newton-Methode versucht zu programmieren und wollte es so einrichten, dass die Ableitung nicht von mir gemacht werden muss, sondern direkt im Programm berechnet wird. Bei mir wird aber kein Ergebnis ausgegeben ... irgendwas stimmt nicht
import math as m
from sympy import *
import numpy as np
import sympy as sy
x = sy.symbols('x')
def newton(func, ableitung, x, n):
func = input("Funktion: ")
ableitung = str(sy.diff(func))
def f(x):
f = eval(func)
return f
def df(x):
df = eval(ableitung)
return df
for itercept in range(1, n):
i = x - (f(x)/df(x))
x = i
print(f"Die Nullstelle wurde bei {x} nach {n} Iterationen gefunden")
newton("func", "ableitung" ,-1000,1000)
Man benutzt keine *-Importe und kürzt auch keine Module ab, wenn es nicht einen weitverbreiteten Namen dafür gibt, wie bei `numpy`. `math` wird importiert, aber gar nicht benutzt.
Die Funktion `newton` benutzt die Argumente func und ableitung gar nicht, können also weg.
Eine Funktion sollte nicht auf Nutzereingaben warten (wenn sie nicht ausdrücklich dafür geschrieben worden ist). Das `input` gehört ins Hauptprogramm.
Man benutzt arbeitet nicht mit der Stringrepräsentation von Formeln und `eval` (ganz böse), sondern benutzt lambdify, wie ich ja schon im ersten Post geschrieben hatte.
`i` wird gar nicht gebraucht, weil das eh gleich wieder in `x` umbenannt wird. Du hast nur n-1 Iterationen.
Die Funktion `newton` benutzt die Argumente func und ableitung gar nicht, können also weg.
Eine Funktion sollte nicht auf Nutzereingaben warten (wenn sie nicht ausdrücklich dafür geschrieben worden ist). Das `input` gehört ins Hauptprogramm.
Man benutzt arbeitet nicht mit der Stringrepräsentation von Formeln und `eval` (ganz böse), sondern benutzt lambdify, wie ich ja schon im ersten Post geschrieben hatte.
`i` wird gar nicht gebraucht, weil das eh gleich wieder in `x` umbenannt wird. Du hast nur n-1 Iterationen.
Code: Alles auswählen
import sympy
def newton(func, x, n):
func = sympy.sympify(func)
ableitung = sympy.diff(func)
f = sympy.lambdify('x', func)
df = sympy.lambdify('x', ableitung)
for _ in range(n):
x = x - f(x) / df(x)
return x, n
def main():
func = input("Funktion: ")
x, n = newton(func, -1000, 1000)
print(f"Die Nullstelle wurde bei {x} nach {n} Iterationen gefunden")
if __name__ == "__main__":
main()
Klasse, vielen vielen Dank!Sirius3 hat geschrieben: ↑Montag 24. Januar 2022, 14:06 Man benutzt keine *-Importe und kürzt auch keine Module ab, wenn es nicht einen weitverbreiteten Namen dafür gibt, wie bei `numpy`. `math` wird importiert, aber gar nicht benutzt.
Die Funktion `newton` benutzt die Argumente func und ableitung gar nicht, können also weg.
Eine Funktion sollte nicht auf Nutzereingaben warten (wenn sie nicht ausdrücklich dafür geschrieben worden ist). Das `input` gehört ins Hauptprogramm.
Man benutzt arbeitet nicht mit der Stringrepräsentation von Formeln und `eval` (ganz böse), sondern benutzt lambdify, wie ich ja schon im ersten Post geschrieben hatte.
`i` wird gar nicht gebraucht, weil das eh gleich wieder in `x` umbenannt wird. Du hast nur n-1 Iterationen.
Code: Alles auswählen
import sympy def newton(func, x, n): func = sympy.sympify(func) ableitung = sympy.diff(func) f = sympy.lambdify('x', func) df = sympy.lambdify('x', ableitung) for _ in range(n): x = x - f(x) / df(x) return x, n def main(): func = input("Funktion: ") x, n = newton(func, -1000, 1000) print(f"Die Nullstelle wurde bei {x} nach {n} Iterationen gefunden") if __name__ == "__main__": main()
Bin immer dankbar über solche Tipps und Hinweise bin wie gesagt neu!
Eine Frage, welchen Zweck hat die letzte Zeile? Das Programm auszuführen?