Monte Carlo error calculation PYTHON

Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
1 replies · 3K views
Amy Elliott
Messages
1
Reaction score
0
New member warned about posting without the template
I am using the monte carlo method to calculate the integral of cos^2(x). This is done using N random numbers. In my case I am doing it for 10^i random numbers when i ranges from 1-6. I want to calculate the error on the integral for each value of i used.

I know for each value of N I want to take say 100 samples of the integral then using numpy calculate the average and standard deviation for my final result. I will need to use arrays to store the values in. I'm just not sure how to do this. This is my code so far. I know it's wrong in the middle where the correct code needs to go. Thanks in advance!

CODE:

# this is the integral from 0 to 2 of cos(x)^2
# using monte carlo integration
# the errors are also calculated

import numpy.random as rnd;
import numpy as np;

def integrate(n):
return np.sum(pow(np.cos(rnd.uniform(0,1,size=n)),2))/n

for i in range(1,8):
# creating and adding to arrays
measurement=[];# create an empty array or list
measurement.append('intergrate(n)');# add to it
np.average(measurement)
np.std(measurement)
ERROR

print(pow(10,i),":", integrate(pow(10,i)),":", ERROR)
 
on Phys.org
Amy Elliott said:
I am using the monte carlo method to calculate the integral of cos^2(x). This is done using N random numbers. In my case I am doing it for 10^i random numbers when i ranges from 1-6. I want to calculate the error on the integral for each value of i used.

I know for each value of N I want to take say 100 samples of the integral then using numpy calculate the average and standard deviation for my final result. I will need to use arrays to store the values in. I'm just not sure how to do this. This is my code so far. I know it's wrong in the middle where the correct code needs to go. Thanks in advance!

CODE:
Python:
    # this is the integral from 0 to 2 of cos(x)^2
    # using monte carlo integration
    # the errors are also calculated

    import numpy.random as rnd;
    import numpy as np;

    def integrate(n):
        return np.sum(pow(np.cos(rnd.uniform(0,1,size=n)),2))/n

    for i in range(1,8):
       # creating and adding to arrays
       measurement=[];# create an empty array or list
       measurement.append('intergrate(n)');# add to it
       np.average(measurement)
       np.std(measurement)
       ERROR

      print(pow(10,i),":", integrate(pow(10,i)),":", ERROR)
Please use
Code:
 tags around your code. This makes your code easier to read, and with Python, especially, preserves the indentation that is crucial in Python.
[code=python]
   Your python code

Before getting fancy, with different values for i, try setting i to a specific value and see if you can get some reasonable output. I'm familiar with Python, but not familar with numpy, so can't comment on whether you are calling numpy functions correctly. I suspect that your calls to average and std won't work, as you aren't storing the return values anywhere.

Also, you have measurement as a list. Why are you storing a string 'intergrate(n)' (which BTW is misspelled) in your list?