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
  unexpected EOF while parsing aaron92 3 162 Sep-11-2019, 10:01 PM
Last Post: aaron92
  Random Password Generator with Weird Output. Why? Selenestica 2 72 Sep-11-2019, 04:36 AM
Last Post: Selenestica
  Unexpected output: if statement CabbageMan 1 66 Sep-04-2019, 04:12 PM
Last Post: ThomasL
  Unexpected Output using classes and inheritance langley 2 176 Jul-04-2019, 09:33 AM
Last Post: langley
  Lottery generator (beginner) Hullari 3 216 Jul-03-2019, 04:46 PM
Last Post: perfringo
  generator function that yield from a list buran 9 497 Jun-04-2019, 10:26 PM
Last Post: snippsat
  syntax error near unexpected token btom529 5 623 Apr-21-2019, 09:03 PM
Last Post: btom529
  Dictionary adds an unexpected list erina 1 260 Mar-14-2019, 01:13 PM
Last Post: ichabod801
  unexpected EOF while parsing whatloop 3 1,071 Mar-09-2019, 06:59 PM
Last Post: whatloop
  Unexpected round behavior pythonCoder 1 270 Feb-19-2019, 02:39 PM
Last Post: marienbad

Forum Jump:


Users browsing this thread: 1 Guest(s)