Borrar filtros
Borrar filtros

i get a wrong answer for my code, can someone please help!

2 visualizaciones (últimos 30 días)
Ibrahim
Ibrahim el 12 de En. de 2015
Comentada: Ibrahim el 12 de En. de 2015
Hey everybody!
(see Attached file in the hyperlink: http://www.docdroid.net/ozso/exercise-matlab-1.pdf.html
I need to calculate an estimated value of the circle area. Giving some x coordinates and y coordinates. i Have written the following code, but there is something wrong with it. can test my code by the test script:
circleAreaMC([-0.1, 0.7, 0.8, 0.5, -0.4], [0.3, -0.1, 0.9, 0.6, -0.3]) and it should give 3.2. But it gives 0.303 etc.
I really feel like this problem have a much easier solution, can somebody please help me? I am new to matlab. (started 5 days ago :-) )
function A = circleAreaMC(xvals,yvals)
%A function that estimates the area of a circle by Monte Carlo simulation.
N=5;
InC = zeros(size(xvals));
DTC = zeros(size(xvals));
%A loop that test wether or not the points are inside the circle:
for i=1:length(xvals)
%Distance to center:
DTC(i)=norm(xvals(i))+norm(yvals(i));
%Inside the circle:
InC(i)=DTC(i)<=1;
end
%the 2 vectors:
xvals = (xvals.*InC(i));
yvals = (yvals.*InC(i));
xvals(xvals==0)=[];
yvals(yvals==0)=[];
x = zeros(size(xvals));
y = zeros(size(xvals));
%for loop:
for n=2:length(xvals)
x(n)=xvals(n)-xvals(1);
y(n)=yvals(n)-yvals(1);
end
x(x==0)=[];
y(y==0)=[];
area = 0;
for q = 1:(length(x)-1)
v = [x(q);y(q);0];
v1 = [x(q+1);y(q+1);0];
cv = cross(v,v1);
area = area+norm(cv*cv');
end
disp(area);

Respuesta aceptada

Titus Edelhofer
Titus Edelhofer el 12 de En. de 2015
Hi,
I'm not sure what you are doing in the second half of the function, but shouldn't the line
DTC(i)=norm(xvals(i))+norm(yvals(i));
read more like
DTC(i) = norm([xvals(i) yvals(i)]);
or
DTC(i) = sqrt(xvals(i).^2 + yvals(i).^2);
Titus
  1 comentario
Ibrahim
Ibrahim el 12 de En. de 2015
Thanks!
At first i had written: DTC(i) = sqrt(xvals(i).^2 + yvals(i).^2); but changeed it to norm.... after reading more about matlab (i am a new user) but yes there is a big difference between:
DTC(i)=norm(xvals(i))+norm(yvals(i)); and DTC(i) = norm([xvals(i) yvals(i)]);
that is corrected now! thanks for your time!

Iniciar sesión para comentar.

Más respuestas (2)

Julia
Julia el 12 de En. de 2015
Hi,
I agree with Titus that the line
DTC(i)=norm(xvals(i))+norm(yvals(i));
looks strange. Did you mean abs() here?
And the lines below
%Inside the circle:
InC(i)=DTC(i)<=1;
do not test if the points are inside the circle.
Do you mean something like that:
If DTC(i)<=1
InC(i)=DTC(i)
end
?
  2 comentarios
Titus Edelhofer
Titus Edelhofer el 12 de En. de 2015
Inc(i) = DTC(i)<=1; is a test for being inside. InC(i) is 1 if DTC(i)<=1, and zero else.
Titus
Ibrahim
Ibrahim el 12 de En. de 2015
Thanks Julia!
it Works now!! :-D

Iniciar sesión para comentar.


Ibrahim
Ibrahim el 12 de En. de 2015
mmm.. Guys?
now it writes the answer 3.2 in the command window, but not : ans = 3.2 in the workspace ? how come :/
  2 comentarios
Julia
Julia el 12 de En. de 2015
A is your return value of the function, set
A=area;
and A should be stored in the workspace.

Iniciar sesión para comentar.

Categorías

Más información sobre Graphics Object Programming en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by