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

2 ビュー (過去 30 日間)
Ibrahim
Ibrahim 2015 年 1 月 12 日
コメント済み: Ibrahim 2015 年 1 月 12 日
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);

採用された回答

Titus Edelhofer
Titus Edelhofer 2015 年 1 月 12 日
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 件のコメント
Ibrahim
Ibrahim 2015 年 1 月 12 日
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!

サインインしてコメントする。

その他の回答 (2 件)

Julia
Julia 2015 年 1 月 12 日
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 件のコメント
Titus Edelhofer
Titus Edelhofer 2015 年 1 月 12 日
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 2015 年 1 月 12 日
Thanks Julia!
it Works now!! :-D

サインインしてコメントする。


Ibrahim
Ibrahim 2015 年 1 月 12 日
mmm.. Guys?
now it writes the answer 3.2 in the command window, but not : ans = 3.2 in the workspace ? how come :/
  2 件のコメント
Julia
Julia 2015 年 1 月 12 日
A is your return value of the function, set
A=area;
and A should be stored in the workspace.
Ibrahim
Ibrahim 2015 年 1 月 12 日
aaah! thanks!

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by