Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

All published worksheets from http://sagenb.org

189887 views
ubuntu2004

We are exploring arc length. We want to understand what is happening. (We do NOT care whether we can integrate symbollically! Any program will integrate for us.)

YouTube Videos: Parameterization     Arc Length

Related Sage Pages: Arc Length of Explicit Curves in 2D     Arc Length of Parametric Curves in 2D     Line Integral of Function - SOLVER

Related Wiki Pages: 

var ('t') #Define a 3d curve s (parametrically) and an interval for t s=vector((2*cos(t)^2,3*sin(t),2*t)) t1=0; t2=4*pi

Remember that a curve in 3d can ONLY be defined parametrically!

#Let's plot C xmin=-3; xmax=3; ymin=-3; ymax=3; zmin=0; zmax=30 C=parametric_plot(s,(t,t1,t2),color='orange',thickness=6, opacity=.7) #Let's add a reference var ('x y z') px0y= implicit_plot3d(z==0,(x,xmin,xmax),(y,ymin,ymax),(z,zmin,zmax), color='grey', opacity=0.3) Ax=line3d(([xmin,0,0],[xmax,0,0]), thickness=2, color='red') Ay=line3d(([0,ymin,0],[0,ymax,0]), thickness=2, color='blue') Az=line3d(([0,0,zmin],[0,0,zmax]), thickness=2, color='green') show(C+px0y+Ax+Ay+Az, aspect_ratio=[3,3,1])

Look at the curve above and estimate a minimum and maximum value for its length L.


Arc Length of a Curve given parametrically C=sC=s: <x(t),y(t),z(t)>\lt x(t),\, y(t),\, z(t) \gt for t[t1,t2]t \in [t1,t2]  is  L=Cds=t1t2 x˙2+y˙2+z˙2 dtL= \int_C \,ds =\int_{t1}^{t2} \, \sqrt{{\dot{x}}^2 + {\dot{y}}^2+ {\dot{z}}^2 } \, dt

ds=diff(s,t) view(ds)
\newcommand{\Bold}[1]{\mathbf{#1}}\left(-4 \, \sin\left(t\right) \cos\left(t\right),\,3 \, \cos\left(t\right),\,2\right)
Lexact=integral(norm(ds),(t,t1,t2)) n(Lexact)
\newcommand{\Bold}[1]{\mathbf{#1}}40.0345236851

So the arc length of this weirdo curve using the formula (which we are calling our "exact" result even though it is being calculated numerically) is L=40.03L=40.03



Let us approximate this length by finding tangent line segments at regularly spaced values of t along the curve.

This algorithm is exactly the same as for parametric curves in 2d!

  • We decide how many steps.
  • The program calculates the stepsize of t.
  • We draw points on the curve regularly spaced with repect to stepsize. They are the points: (s(j))
steps=4 stepsize=(t2-t1)/steps points=sum([point3d(s(t=j), color='purple', size=10) for j in [t1..t2-stepsize,step=stepsize]]) show(C+points, aspect_ratio=[3,3,1])

We draw pieces of tangent line segments starting at these points.

  • Start point is s(j)
  • Slope is value of the derivative vector ds(j). 
  • Length is ds \left\| {ds} \right\| \cdot stepsize = x˙2+y˙2+z˙2\sqrt{{\dot{x}}^2 + {\dot{y}}^2 + {\dot{z}}^2} \cdot stepsize.

So parametrically these line segments are: s(j)+λ·ds(j) for λ=[0, stepsize].

pieces=sum([line3d([(s(t=j)),(s(t=j)+ds(t=j)*stepsize)],thickness=4,color='purple') for j in [t1..t2-stepsize,step=stepsize]]) show(C+pieces+points, aspect_ratio=[7,1,1])

We sum the length of these pieces.

Lapprox=sum([norm(ds(t=j))*stepsize for j in [t1..t2-stepsize,step=stepsize]]) n(Lapprox)
\newcommand{\Bold}[1]{\mathbf{#1}}45.3086935965559

So the approximate arc length of this weirdo curve using 4 tangent pieces is: L4=45.31L_4 =45.31.

We calculate our error.

error=abs((Lexact-Lapprox)/Lexact) n(error)
\newcommand{\Bold}[1]{\mathbf{#1}}0.131740543560301

Our error is 13\approx 13%.



Let us try more or less step sizes - change the value of steps2 and revaluate.

steps2=16 stepsize2=(t2-t1)/steps2 points2=sum([point3d(s(t=j), color='purple', size=10) for j in [t1..t2-stepsize2,step=stepsize2]]) pieces2=sum([line3d([(s(t=j)),(s(t=j)+ds(t=j)*stepsize2)],thickness=4,color='purple') for j in [t1..t2-stepsize2,step=stepsize2]]) show(C+pieces2+points2, aspect_ratio=[3,3,1])

We sum the length of these pieces.

Lapprox2=sum([norm(ds(t=j))*stepsize2 for j in [t1..t2-stepsize2,step=stepsize2]]) n(Lapprox2)
\newcommand{\Bold}[1]{\mathbf{#1}}39.8247733971104

So the approximate arc length of this weirdo curve using 16 tangent pieces is: L16=39.82L_{16} =39.82.

We calculate our new error.

error2=abs((Lexact-Lapprox2)/Lexact) n(error2)
\newcommand{\Bold}[1]{\mathbf{#1}}0.00523923525710368

Our error is now 0.5\approx 0.5%.