funktioner
Måste jag göra såhär för att använda funktioner, eller går det på nå vis att kalla en godtycklig funktion i derivative?.. t.ex kan man på nå vis skriva: derivative(x^2,1,0.001)? jag vet att man kan skriva derivative(math.sin,math.pi,0.001).. får dock error om jag bara skriver x.
Lite osäker på vad du frågar efter, men du kan skriva så här:
def derivative(f,x,h):
return (1/(2*h))*(f(x+h)-f(x-h))
lutning = derivative(lambda x: x**2+x, 1, 0.0001)
print(lutning)
där jag alltså stoppar in i funktionen derivative.
emilg skrev:Lite osäker på vad du frågar efter, men du kan skriva så här:
def derivative(f,x,h): return (1/(2*h))*(f(x+h)-f(x-h)) lutning = derivative(lambda x: x**2+x, 1, 0.0001) print(lutning)
där jag alltså stoppar in i funktionen derivative.
okay spännande. vad är det lambda gör där? och kommer jag behöva ändra manuellt varje gång?
Det är en så kallad anonym funktion (lambda är en del av syntaxen).
Jo, vill du ha en annan funktion måste du skriva något annat. Hur vill du att programmet ska veta vilken funktion som ska användas?
emilg skrev:Det är en så kallad anonym funktion (lambda är en del av syntaxen).
Jo, vill du ha en annan funktion måste du skriva något annat. Hur vill du att programmet ska veta vilken funktion som ska användas?
Jaha okay, lambda säger vilken variabel som används typ?
Jag tänkte att man skulle kunna skriva det såhär: Derivative(2*x + 1, 1,0.000001)
EDIT: Det fungerade att kalla funktionen: derivative(lambda x: x**3,1,0.0001). tack
Efter lambda skriver man vilka argument den anonyma funktionen ska ta. T.ex.
lambda x,y: x+y
om du vill ha en anonym funktion som tar två argument och lägger ihop dem.
Du skulle kunna skriva så här:
def derivative(f,x,h):
return (1/(2*h))*(f(x+h)-f(x-h))
func = input('Skriv en funktion:')
lutning = derivative(lambda x: eval(func), 1, 0.0001)
print(lutning)
om du vill att användaren ska kunna skriva vilken funktion som ska användas.
emilg skrev:Efter lambda skriver man vilka argument den anonyma funktionen ska ta. T.ex.
lambda x,y: x+y
om du vill ha en anonym funktion som tar två argument och lägger ihop dem.
Du skulle kunna skriva så här:
def derivative(f,x,h): return (1/(2*h))*(f(x+h)-f(x-h)) func = input('Skriv en funktion:') lutning = derivative(lambda x: eval(func), 1, 0.0001) print(lutning)
om du vill att användaren ska kunna skriva vilken funktion som ska användas.
Ok, tack! Det ser rimligt ut. vad gör eval?
eval() evaluerar (kör) koden som är en string.
T.ex. os.command("rm -r $HOME")
emilg skrev:eval() evaluerar (kör) koden som är en string.
tack = )
Laguna skrev:T.ex. os.command("rm -r $HOME")
Hehe, ja man ska inte skriva import os och låta okända användare köra på servern. (Finns säkerhetsalternativ till eval om man är i en sådan situation).
Jag tror att du kan ha användning av numpy.polyder för att derivera ett godtyckligt polynom genom att ange dess koefficienter. Då kan du undvika eval (vilket du bör undvika).
När jag skrev parsexpr använde jag numpy och sympy för att derivera polynom skrivna som strängar: https://github.com/lindehaven/ParsExpr/blob/master/parsexpr.py