Bottom Page

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
 Getting an unexpected generator object ?
#1
This program should find the difference between the integral of a specific function and the number obtained with the trapezoid formula.
I expect to get some values within a range so I can graph them, but instead this is what I am getting:
generator object <genexpr> at 0x000001A1B1A66F48

a=0
b=1
n=500
h=(b-a)/(n)

def f(x):
    return x**2

 

def trapezoidal(f,a,b,n):
    return (h/2)*(f(a)+f(b))+h*( sum(f(a+h*i)  for i in range(1, (n-1))) )
    
   
    
print(trapezoidal(f,a,b,n))


lambda x: f(x)
c= integrate.quad(f,0,1)
print(c)


error=(abs(trapezoidal-c) for n in range (300,900))
print(error)


Quote
#2
line 24 - using () brackets makes it generator expression
use square brackets and it will be list comprehension (i.e. if you want to see the numbers when print)
Quote
#3
sorry, I think I posted this in the wrong forum.
Yoriz wrote Mar-27-2019, 01:05 PM:
It's ok I moved it
Quote
#4
Try
print(list(error))
And then look up generator expressions
Quote
#5
I changed () to [] on line 24 and added 'list' to 25 but now I get an error
"unsupported operand type(s) for -: 'function' and 'tuple'"
here is the new code:
a=0
b=1
n=500
h=(b-a)/(n)


    
def f(x):
    return x**2

 

def trapezoidal(f,a,b,n):
    return (h/2)*(f(a)+f(b))+h*( sum(f(a+h*i)  for i in range(1, (n-1))) )
    
   
    
print(trapezoidal(f,a,b,n))


lambda x: f(x)
c= integrate.quad(f,0,1)
print(c)


error=[abs(trapezoidal-c) for n in range (200,900) ]
print(list(error))

Quote
#6
from scipy import integrate

a=0
b=1
n=500
h=(b-a)/(n)

def f(x):
	return x**2

def trapezoidal(f,a,b,n):
	return (h/2)*(f(a)+f(b))+h*( sum(f(a+h*i)  for i in range(1, (n-1))))

print(trapezoidal(f,a,b,n))

# Why this?
lambda x: f(x)

c= integrate.quad(f,0,1)
print(c)

error=(abs(trapezoidal(f,a,b,n)-c[0]) for n in range (300,900))

for idx, i in enumerate(error):
	print(idx, i)
Quote
#7
and by the way, this thread is still here. Are you sure you moved it?
Quote
#8
I moved it here because the issue is a general coding issue not data science
Quote
#9
thank you.
I have changed line 24-25
with this code
error=(abs(trapezoidal(f,a,b,n)-c[0]) for n in range (300,900))
print(list(error))
and it works, however, I am not understanding the meaning of c[0], I just notice that if I write just 'c' I get an error. What does the 0 stand for? It looks like is the first element of a list, but c is the outcome of the integral so I am not sure what is the relationship between the integral and the list.
Quote
#10
In fact c is the return of the integrate.quad() from scipy.integrate.quad.
And it returns a Tuple:

>>> c= integrate.quad(f,0,1)
>>> print(c)
(0.33333333333333337, 3.700743415417189e-15)
So you need to get the first element of this tuple (index=0) to get only the integral of function f.

BTW I'm just checking the code...not the math!
Quote

Top Page

Possibly Related Threads...
Thread Author Replies Views Last Post
  generator function that yield from a list buran 9 330 Jun-04-2019, 10:26 PM
Last Post: snippsat
  syntax error near unexpected token btom529 5 243 Apr-21-2019, 09:03 PM
Last Post: btom529
  Dictionary adds an unexpected list erina 1 183 Mar-14-2019, 01:13 PM
Last Post: ichabod801
  unexpected EOF while parsing whatloop 3 367 Mar-09-2019, 06:59 PM
Last Post: whatloop
  Unexpected round behavior pythonCoder 1 157 Feb-19-2019, 02:39 PM
Last Post: marienbad
  Unexpected expected type error result MartinMaker 1 193 Feb-16-2019, 05:02 PM
Last Post: micseydel
  Unexpected ininite loop behavior RedSkeleton007 4 197 Jan-27-2019, 05:32 PM
Last Post: aakashjha001
  unexpected sub result after overloading operator jolinchewjb 1 232 Jan-24-2019, 08:23 AM
Last Post: buran
  unexpected EOF wowo 3 434 Jan-13-2019, 04:36 AM
Last Post: wowo
  float multiplication - unexpected output inesk 3 321 Dec-11-2018, 10:59 AM
Last Post: DeaD_EyE

Forum Jump:


Users browsing this thread: 1 Guest(s)