Inconsistent values when integrating [Python]

  • Context: Python 
  • Thread starter Thread starter MathewsMD
  • Start date Start date
  • Tags Tags
    Integrating Python
Click For Summary

Discussion Overview

The discussion revolves around the integration of a 2D Gaussian function, both in Cartesian and polar coordinates, using Python and WolframAlpha. Participants are exploring discrepancies in the results obtained from these different methods of integration, particularly when varying parameters.

Discussion Character

  • Exploratory
  • Technical explanation
  • Debate/contested
  • Mathematical reasoning

Main Points Raised

  • One participant presents a 2D Gaussian function and its conversion to polar coordinates, seeking verification of their steps and results.
  • Participants note that while results match for certain values (e.g., when ##r = 0## or ##θ = 0##), discrepancies arise when ##θ \neq 0##.
  • There is mention of the integration results being relatively similar between Python and WolframAlpha for certain cases, which raises questions about the integration process.
  • Another participant suggests breaking the Cartesian integral into two parts to address an imaginary component noted in the results.
  • Concerns are raised about the specific regions being integrated over, with one participant highlighting that changing parameters like ##r_0## and ##θ_0## leads to different parts of the Gaussian being integrated.
  • Clarifications are sought regarding the integral fed into WolframAlpha and the presence of square roots in the integrand.
  • One participant acknowledges a mistake in their integral setup after receiving feedback, indicating a potential source of error in their calculations.

Areas of Agreement / Disagreement

Participants express uncertainty about the integration process and the effects of parameter changes, with no consensus reached on the source of discrepancies. Some participants agree on the need to check the integration setup, while others raise different concerns about the approach taken.

Contextual Notes

There are unresolved questions regarding the assumptions made in the integration process, the specific regions of integration, and the handling of parameters in both coordinate systems. The discussion reflects a mix of exploratory reasoning and technical challenges without definitive resolutions.

Who May Find This Useful

Readers interested in mathematical modeling, numerical integration, and the behavior of Gaussian functions in different coordinate systems may find this discussion relevant.

MathewsMD
Messages
430
Reaction score
7
I have a 2D Gaussian:

## f(x,y) = e^{-[(x-x_o)^2 + (y-y_o)^2]/(2*{sigma}^2)}##

which I converted into polar coordinates and got:

## g(r,θ) = e^{-[r^2 + r_o^2 - 2*r*r_o(cos(θ)cos(θ_o) + sin(θ)sin(θ_o))]/({2*{sigma}^2})} ##

The proof for how this was done is in the attached file, and it would be great if someone could verify my steps in case I messed up somewhere (although I have inputted values and it seems to work). I have plotted the functions, and they do seem comparable by visual inspection, too.

The characteristics of the functions (including ## sigma_o##) are manually specified by me, so the values for ##x_o##, ##y_o## match up with ##r_o## and ##θ_o##. Now, when I integrate these functions over the same regions, I don't always get the same answers. For example, when ##r = 0## or ##θ = 0##, I do get the same answers, but when ##θ \neq 0##, then the answers are slightly off. I have been trying to search for where I'm going wrong, and it may be completely obvious (likely associated with the sine and cosine terms), but I'm just not seeing it. The fact that the values from completing the integration on Python (in polar coordinates) and WolframAlpha (in cartesian coordinates) are relatively similar for the cases where ##θ \neq 0## seems a little odd to me. If anyone has any thoughts, it would be greatly appreciated!

Here is my code:

Code:
import numpy as np
from scipy import integrate

RIT = [] # Region Intensity (integration)
i = 0
N = 1
while i < N: #1 random beam generated
    i = i + 1
    sigma0 = 5 # just an example--arbitrary, I usually set it between 1 and 10
    r0 = #you can input any value here, I usually set it between 0 and 10
    theta0 = random.uniform(0,np.pi*2) #you can make it arbitrary instead of random if you wish
    def G(r,theta): #this is the Gaussian in polar coordinates
        return (np.e**(-((r**2 + r0**2 \
        - 2*r*r0*(np.cos(theta)*np.cos(theta0) + \
        np.sin(theta)*np.sin(theta0)))/(2*sigma0**2))))*r
    #this r is here because
    #the integrand includes dr and dtheta, NOT dx and dy any longer!
    RI = integrate.nquad(G, [[4,7],[0,0.5*np.pi]]) #this region is between r = 4 and 7 in the first quadrant
    RIT.append(RI)

print RIT

I've also been trying points in both f and g to see if they correspond, and they seem to work. For example, if:

##sigma = 1##
##x_o = 1##
##y_o = 2##

then ## f(1,1) = e^{-0.5} ##

This also corresponds to:

##r_o = \sqrt{26} ##
##θ_o = ~1.107##
then ##g(\sqrt{2},pi/4) = e^{-0.5}##

I am leaning towards there being an error in my actual integration, but do you see any?

If I use these values for the code:
##sigma0 = 5##
##r0 = 2**0.5##
##theta0 = 1.75*np.pi##

Then the value for the integral I get is: 1.33556147e+01
When I do this in WolframAlpha, I get: 12.7035

Any advice is welcome!
 

Attachments

  • Work.jpg
    Work.jpg
    33.9 KB · Views: 496
Last edited:
Technology news on Phys.org
MathewsMD said:
I have a 2D Gaussian:

## f(x,y) = e^{-[(x-x_o)^2 + (y-y_o)^2]/(2*{sigma}^2)}##

which I converted into polar coordinates and got:

## g(r,θ) = e^{-[r^2 + r_o^2 - 2*r*r_o(cos(θ)cos(θ_o) + sin(θ)sin(θ_o))]/({2*{sigma}^2})} ##

The proof for how this was done is in the attached file, and it would be great if someone could verify my steps in case I messed up somewhere (although I have inputted values and it seems to work). I have plotted the functions, and they do seem comparable by visual inspection, too.

The characteristics of the functions (including ## sigma_o##) are manually specified by me, so the values for ##x_o##, ##y_o## match up with ##r_o## and ##θ_o##. Now, when I integrate these functions over the same regions, I don't always get the same answers. For example, when ##r = 0## or ##θ = 0##, I do get the same answers, but when ##θ \neq 0##, then the answers are slightly off. I have been trying to search for where I'm going wrong, and it may be completely obvious (likely associated with the sine and cosine terms), but I'm just not seeing it. The fact that the values from completing the integration on Python (in polar coordinates) and WolframAlpha (in cartesian coordinates) are relatively similar for the cases where ##θ \neq 0## seems a little odd to me. If anyone has any thoughts, it would be greatly appreciated!

Here is my code:

Code:
import numpy as np
from scipy import integrate

RIT = [] # Region Intensity (integration)
i = 0
N = 1
while i < N: #1 random beam generated
    i = i + 1
    sigma0 = 5 # just an example--arbitrary, I usually set it between 1 and 10
    r0 = #you can input any value here, I usually set it between 0 and 10
    theta0 = random.uniform(0,np.pi*2) #you can make it arbitrary instead of random if you wish
    def G(r,theta): #this is the Gaussian in polar coordinates
        return (np.e**(-((r**2 + r0**2 \
        - 2*r*r0*(np.cos(theta)*np.cos(theta0) + \
        np.sin(theta)*np.sin(theta0)))/(2*sigma0**2))))*r
    #this r is here because
    #the integrand includes dr and dtheta, NOT dx and dy any longer!
    RI = integrate.nquad(G, [[4,7],[0,0.5*np.pi]]) #this region is between r = 4 and 7 in the first quadrant
    RIT.append(RI)

print RIT

I've also been trying points in both f and g to see if they correspond, and they seem to work. For example, if:

##sigma = 1##
##x_o = 1##
##y_o = 2##

then ## f(1,1) = e^{-0.5} ##

This also corresponds to:

##r_o = \sqrt{26} ##
##θ_o = ~1.107##
then ##g(\sqrt{2},pi/4) = e^{-0.5}##

then ## g(\sqrt{2}, \frac{pi/4}) = e^{-0.5}##

I am leaning towards there being an error in my actual integration, but do you see any?

If I use these values for the code:
##sigma0 = 5##
##r0 = 2**0.5##
##theta0 = 1.75*np.pi##

Then the value for the integral I get is: 1.33556147e+01
When I do this in WolframAlpha, I get: 12.7035

Any advice is welcome!

Here is the WolframAlpha calculation in cartesian coordinates that should correspond to my polar coordinate integration in Python.
 

Attachments

  • Screen Shot 2015-06-15 at 2.32.53 PM.png
    Screen Shot 2015-06-15 at 2.32.53 PM.png
    1.6 KB · Views: 548
I am not understanding why you have an imaginary part of your cartesian integral. You probably need to break that integral into two parts.
for x = 0 to 4 and for x=4 to 7.
 
  • Like
Likes   Reactions: DEvens and MathewsMD
RUber said:
I am not understanding why you have an imaginary part of your cartesian integral. You probably need to break that integral into two parts.
for x = 0 to 4 and for x=4 to 7.

You're right. Let me check that out. Complete oversight by me haha. Thank you!
 
It's a little difficult to understand what exactly you are integrating. It seems like you are integrating from ##r## 4 to 7, and ##\theta## from 0 to pi/2. So this is some chunk of a 2-D Gaussian. Without checking if you have done that correctly, you are worried that when you change ##r_0## and ##\theta_0## that you get slightly different values.

Well, yes. You are integrating a different part of the Gaussian when you do that. Or so it seems.

Also, I want to pile on what RUber asked. What is the integral you fed to Wolfram? What's with the square roots in the integrand?
 
RUber said:
I am not understanding why you have an imaginary part of your cartesian integral. You probably need to break that integral into two parts.
for x = 0 to 4 and for x=4 to 7.

And it turns out my code is correct, I just messed up my integral! Sweet! Thank you for catching my mistake!
 
  • Like
Likes   Reactions: RUber

Similar threads

  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 7 ·
Replies
7
Views
2K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 7 ·
Replies
7
Views
2K