# Length of a Circle: Iterative Numerical Approximation

The equation of a general circle centered at the point with radious r is

it is known that its length is . We want to approach the actual length by an increasing value of the inscrived polygon length.

## Iterative approach

Let's illustrate the idea by the following plot:

## Generate the points of the inscribed polygon

We'll use polar coordinates to generate the points on the cercle:

where

r = 1;

numPoints = 10;

ang=0;

pasAng=2*pi/numPoints;

for i = 1:numPoints

x(i) = r*cos(ang);

y(i) = r*sin(ang);

ang=ang+pasAng;

end

points=[x',y'];

points=[points;x(1),y(1)]; %to close the polygon

% Plot the inscribed polygon

angC=0:0.05:2*pi; %take more points to draw the circle

xx=cos(angC);

yy=sin(angC);

xx=[xx,xx(1)]; % to close the cercle

yy=[yy,yy(1)]; % to close the cercle

plot(xx,yy,'b'); %plot the the circle

hold on;

plot(points(:,1), points(:,2),'r'); %plot the polygon

hold off;

axis equal

Now we compute the length of the closed curve associated to this polygon (the perimeter).

Each edge between points has length:

perimeter = 0;

for i = 1:numPoints

perimeter = perimeter+norm(points(i+1,:)-points(i,:));

end

## Check the error

Finally the error obtained by the present approximation is:

actualLength = 2*pi*r;

absError = abs(perimeter-actualLength);

relError = absError/actualLength;

fprintf('nPoints= %d, perimeter = %e, absErr= %e, relErr= %e \n',numPoints,perimeter,absError,relError);

## Exercise 1:

Build a function returning the points coordinates vector of the inscribed polygon given the radious and the number of points

function points = generatePolygonPoints(r,numPoints)

## Exercise 2:

Change the number of points and see how the length is better approximate.

## Exercise 3: Approximate the length of a circle up to a desired precission.

The question now is to compute how many points are needed to approximate the

actual length of the circle with the perimeter of the inscrived polygon. For that, we will use a modification of the previous script, following the next steps:

Step 1: Define a tolerance precission variable, tol = 1.e-5

Initialize the numPoints variable to 8.

Step 2: Use a while loop until the absError is less than the tolerance

while(absError > tol)

generate the points

compute the present Length

compute the present absError

increment numPoints

end

Step 3:

Show in the commad window the computed values for the numPoints variable

Solution= For radious r = 10 and tol = 1.e-5, numPoints= 3215 are needed