11 svar
200 visningar
pepsi1968 behöver inte mer hjälp
pepsi1968 495
Postad: 31 jan 2022 20:21

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.

emilg 478
Postad: 31 jan 2022 20:57

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 f(x)=x2+xf(x) = x^2+x i funktionen derivative.

pepsi1968 495
Postad: 31 jan 2022 21:00
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 f(x)=x2+xf(x) = x^2+x i funktionen derivative.

okay spännande. vad är det lambda gör där? och kommer jag behöva ändra manuellt varje gång?

emilg 478
Postad: 31 jan 2022 21:05 Redigerad: 31 jan 2022 21:05

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?

pepsi1968 495
Postad: 31 jan 2022 21:11 Redigerad: 31 jan 2022 21:11
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

emilg 478
Postad: 31 jan 2022 21:17

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.

pepsi1968 495
Postad: 31 jan 2022 21:27
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?

emilg 478
Postad: 31 jan 2022 21:30

eval() evaluerar (kör) koden som är en string.

Laguna Online 30498
Postad: 31 jan 2022 22:17

T.ex. os.command("rm -r $HOME")

pepsi1968 495
Postad: 31 jan 2022 22:36
emilg skrev:

eval() evaluerar (kör) koden som är en string.

tack = )

emilg 478
Postad: 31 jan 2022 23:02
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).

Lindehaven 820 – Lärare
Postad: 1 feb 2022 15:30 Redigerad: 1 feb 2022 16:46

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 

Svara
Close