Programmering
Trapezoidal rule: Integral i python
Hej derude.
Jeg skal bestemme arealet under grafen fra a =0 til b= 9, der beskrives ved funktionen: f(x) = cos(x/9) * sin2(x):
Integralformlen er;
Jeg har lavet en kode, der ser ud sådan:
import math
import numpy as np
def f(x):
return math.cos(x/9)*math.sin(x)**2
a=0
b = 10
x = np.linspace(a, b, 40)
delta_x = x[1]-x[0]
y = (f(x))* delta_x
Integral = (1/2) * (y[0]+ y[-1]) + sum(y[0:-1])
print Integral
Jeg får en fejlmeddelelse som:
y = (f(x))* delta_x
File "C:\Users\Asus\Desktop\Tesss.py", line 127, in f
return math.cos(x/9)*math.sin(x)**2
TypeError: only length-1 arrays can be converted to Python scalars
Vil nogen derude hjælpe med at rette denne kode????
Svar #1
29. januar 2015 af hesch (Slettet)
#0: Jeg ved ikke en pind om Python, men prøv linket:
Fejlen tyder på, at der er uoverensstemmelse mellem to type-deklarationer.
Måske sætter du en skalar = et array ?
Svar #2
30. januar 2015 af Jerslev
#0: Uden at have testet det, tror jeg, at der er et problem i og med, at du definerer x som et linspace og efterfølgende bruger x i en funktion. Kan funktionen selv finde ud af, at den skal tage hver værdi i dit array og gemme dem i et nyt array?
Ellers skal du lave en for-løkke, der kører hen over dine værdier i dit x-array og skriver til et nyt y-array den værdi, som f(x) har.
mvh
Jerslev
Svar #3
31. januar 2015 af hesch (Slettet)
#1: I linket fremkommer jo begrebet "stackoverflow". En sådan stak anvendes i adskillige programmeringssprog til at gemme bl.a. variabelværdier, variabelpointere og return-adresser.
Hvis du så pusher et array ved et funktionskald, og funktionen fx popper sidste element i stakken som parameter (funktionen skal kun bruge een parameter), står der en masse "crap" tilbage i stakken, som programmet ikke "ved" hvad det skal stille op med. Stakken bliver rent kaos, og hvis programmet pr. automatik checker staklængden, vil det opdage fejlen, der opfattes som netop "stackoverflow".
I programmeringssprog, hvor der anvendes en "compiler", vil denne opdage fejlen under compileringen, i form af fejlmeddelelsen: "Mismatched types" eller lignende. Men i programmeringssprog, der benytter en "interpreter", er skaden jo sket, inden den opdages, og fejlmeddelelsen bliver derfor af mere kryptisk karakter, for: "Hvad var det lige, der skete her ? ?"
Skriv et svar til: Trapezoidal rule: Integral i python
Du skal være logget ind, for at skrive et svar til dette spørgsmål. Klik her for at logge ind.
Har du ikke en bruger på Studieportalen.dk?
Klik her for at oprette en bruger.