Monte Carlo Simulation question?

1 次查看(过去 30 天)
Hey, I need to make a program that proves monte carlo sampling to find the area of a circle. So basically, there is a circular pond inside of a rectangular field and the cannon shoots cannonballs into the field.
we need to use functions, and i'm stuck on one that's supposed to have parameters: pond radius, x hit spot, and y hit spot. The function then plots the point x, y in one of two styles depending on whether it landed in the pond or not.
The plot function accepts a third argument that indicates the shape of the point to plot and the point's color. For instance this plots a blue asterisk: plot(x, y, 'b*') and this plots a green circle: plot(x, y, 'go') The statements in the function must do this: If the shot hit the pond, plot a blue star, otherwise plot a green circle. You will need to use an if/else statement, and you will need to call the hitPond function and the plot function. Also,this function mustreturn a result: • It returns true if the shot lands in the pond. • It returns false if the shot lands in the field. Be very careful here: The function should not display true or false, it should return true or false. Also note that the choice of using true and false as return values is completely arbitrary. I could have chosen −1 and 1, or 1 and 0, or 99 and 33, or even strings like 'splash' and 'thud'.
so far, what i have is:
.m function
function []=setupField(fieldSize)
title('Shots fired into a field with a perfectly round pond');
axis([-fieldSize/2, fieldSize/2, -fieldSize/2, fieldSize/2]);
axis equal;
hold on;
end
plotpond.m
function []=setupField(fieldSize)
title('Shots fired into a field with a perfectly round pond');
axis([-fieldSize/2, fieldSize/2, -fieldSize/2, fieldSize/2]);
axis equal;
hold on;
end
if true
% code
end
hitPond.m
function hitPond(pondRadius, xhit, yhit)
%use distance formula to find length between points.
x=0
y=0
%because of the axis^
%we are finding the distance between the axis and the point where it hit
step1=(xhit-x)^2;
step2=(yhit-y)^2;
step3=step1+step2;
distance=sqrt(step3);
if (distance<1);
disp('1');
elseif distance=1;
disp('1');
elseif distance>1;
disp('0');
end
end
driver script, monteCarlo.m
clc %clear commands
clear %clear all variables
clf % clear plot area
rng('shuffle') %shuffle random number generator
fieldSize = 4;
pondRadius= 1;
numShots = 100;
setupField(fieldSize);
x=0;
y=0; %axis should be 0,0
radius=1; %radius will be 1.
plotPond(x, y, radius)
hitPond(1, 1, 1)
So I guess I just need help on writing that function from earlier.
Thanks in advance for your help.

回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Change Markers 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by