Braquistócrona discreta

Conectamos dos puntos del plano A y B situados a distinta altura por un conjunto N de planos inclinados (en color azul). Una partícula parte del reposo del primer punto A y desliza sin rozamiento a lo largo de los planos inclinados hasta llegar al segundo punto B. Dependiendo de las coordenadas de los puntos (xk, yk), k=1,2,...N-1, que conectan las rampas, el tiempo que emplea la partícula en recorrerlas puede ser mayor o menor. Calcularemos las coordenadas de estos puntos cuando este tiempo sea mínimo y lo compararemos con el tiempo que le lleva a la partícula recorrer la trayectoria cicloidal (en color rojo) que une los puntos A y B.

Plano inclinado

Consideremos un plano inclinado que une el origen con un punto de coordenadas (x, y). Si no hay rozamiento las fuerzas sobre la partícula son el peso mg y la reacción del plano inclinado, N=mgcosθ.

La aceleración del cuerpo es gsinθ=gy/l, siendo l la longitud del plano inclinado. La velocidad final v y el tiempo t que le lleva a la partícula recorrer el plano inclinado son

{ v=gsinθ·t l= 1 2 gsinθ· t 2 t= 2 gy l v= 2gy

La velocidad final v solamente depende de la ordenada y del extremo del plano inclinado. Esta velocidad se puede obtener aplicando el principio de conservación de la energía

mgy= 1 2 m v 2

Expresamos el tiempo t en términos de las coordenadas (x, y) del extremo del plano inclinado

t=2 x 2 + y 2 2gy

Consideremos ahora una rampa que conecta dos puntos (xk, yk) y (xk+1, yk+1)

La velocidad inicial uk y la final uk+1 solamente dependen de las ordenadas de los extremos, yk e yk+1

u k = 2g y k u k+1 = 2g y k+1

Calculamos el tiempo tk que le lleva a la partícula recorrer el plano inclinado k de longitud lk

{ u k+1 = u k +gsinθ· t k l k = u k t+ 1 2 gsinθ· t k 2 l k = u k+1 + u k 2 t k t k =2 ( x k+1 x k ) 2 + ( y k+1 y k ) 2 2g y k+1 + 2g y k

Cuando la aceleración es constante, la velocidad media de la partícula en el plano inclinado es vk=(uk+uk+1)/2 es la media de sus velocidades en los extremos. El tiempo tk es el cociente entre la longitud lk del plano inclinado y la velocidad media vk

El tiempo total t que tarda en desplazarse la partícula de A (0,0) y B (L, H) a través de N rampas es

t= 2 2g { x 1 2 + y 1 2 y 1 +... ( x k+1 x k ) 2 + ( y k+1 y k ) 2 y k+1 + y k +...+ ( L x N1 ) 2 + ( H y N1 ) 2 y N1 + H }

Definimos nuevas variables adimensionales X=x/H, Y=y/H y T= t 2H g

T= X 1 2 + Y 1 2 Y 1 +... ( X k+1 X k ) 2 + ( Y k+1 Y k ) 2 Y k+1 + Y k +...+ ( L H X N1 ) 2 + ( 1 Y N1 ) 2 Y N1 +1

Dos rampas

Unimos los puntos A (0,0) y B (L, H), mediante dos rampas. El tiempo T que emplea la partícula en desplazarse sin rozamiento a lo largo de este camino, partiendo de A en reposo es

T= X 1 2 + Y 1 2 Y 1 + ( L H X 1 ) 2 + ( 1 Y 1 ) 2 Y 1 +1

Para que T sea mínimo se tiene que cumplir que

T X 1 =0, T Y 1 =0

Obtenemos un sistema no lineal de dos ecuaciones con dos incógnitas

X 1 X 1 2 + Y 1 2 Y 1 ( L/H X 1 ) ( L/H X 1 ) 2 + ( 1 Y 1 ) 2 ( Y 1 +1 ) =0 ( X 1 Y 1 ) 2 Y 1 Y 1 X 1 2 + Y 1 2 2( 1 Y 1 )( Y 1 +1 ) Y 1 + ( L/H X 1 ) 2 + ( 1 Y 1 ) 2 ( Y 1 +1 ) 2 Y 1 ( L/H X 1 ) 2 + ( 1 Y 1 ) 2 =0

Intentamos resolver este sistema no lineal mediante fsolve de MATLAB para L=5 y H=1, recibimos un aviso y vemos que no lo resuelve satisfactoriamente

L=5;
H=1;
f=@(x) [x(1)/(sqrt(x(1)^2+x(2)^2)*sqrt(x(2)))-(L/H-x(1))/
(sqrt((L/H-x(1))^2+(1-x(2))^2)*(sqrt(x(2))+1)); 
-(x(1)-x(2))^2/(sqrt(x(1)^2+x(2)^2)*sqrt(x(2))*x(2))-
(2*(1-x(2))*sqrt(x(2))*(sqrt(x(2))+1)+(L/H-x(1))^2+(1-x(2))^2)
/(sqrt(x(2))*sqrt((L/H-x(1))^2+(1-x(2))^2)*(sqrt(x(2))+1)^2)];
[x,fval] = fsolve(f,[1,1.3]); 
fsolve completed because the vector of function values is near zero
as measured by the value of the function tolerance, and
the problem appears regular as measured by the gradient.

Creamos un script que realiza las siguientes tareas:

L=5;
H=1;
f=@(x) sqrt(x(1)^2+x(2)^2)/sqrt(x(2))+sqrt((L/H-x(1))^2+(1-x(2))^2)/(sqrt(x(2))+1);
x=fminsearch(f,[1.1,1.4]);
%cicloide
f=@(x) (1-cos(x))/(x-sin(x))-H/L;
phi=fzero(f,pi);
R=H/(1-cos(phi));
xp=@(th) R*(th-sin(th));
yp=@(th) R*(1-cos(th));
hold on
fplot(xp,yp,[0,phi],'color','r')
%planos inclinados
line([0,x(1)],[0,x(2)],'lineWidth',1.5,'color','b')
line([x(1),L],[x(2),H],'lineWidth',1.5,'color','b')
plot(x(1),x(2),'o','markersize',3,'markeredgecolor','r','markerfacecolor','r')
hold off
set (gca,'Ydir','reverse')
axis equal
grid on
xlabel('x')
ylabel('y')
title('cicloide')
%tiempos
t1=sqrt(x(1)^2+x(2)^2)*sqrt(2*H/9.8)/sqrt(x(2));
t2=sqrt((L/H-x(1))^2+(1-x(2))^2)*sqrt(2*H/9.8)/(sqrt(x(2))+1);
tc=phi*sqrt(R/9.8); %cicloide
format long
disp([t1+t2, tc])
format short

    1.477536416243312   1.388364604578311
>> t1,t2
t1 =    0.7388
t2 =    0.7388

El tiempo que tarda en recorrer el arco de cicloide es 1.388 y los dos planos inclinados 1.477. Comprobamos que los tiempos t1 y t2 son casi idénticos.

Tres rampas

T= X 1 2 + Y 1 2 Y 1 + ( X 2 X 1 ) 2 + ( Y 2 Y 1 ) 2 Y 1 + Y 2 + ( L H X 2 ) 2 + ( 1 Y 2 ) 2 Y 2 +1

Calculamos el mínimo del tiempo adimensional T que emplea la partícula en desplazarse a lo largo del camino formado por los tres planos inclinados que conectan el origen A y el punto B (L=5, H=1). Determinamos las coordendas de los puntos de unión (x1, y1) y (x2, y2) mediante fminsearch de MATLAB.

En el código x1 es x(1) e y1 es x(2), x2 es x(3) e y2 es x(4). Los dos puntos iniciales de partida que hay que pasarle a fminsearch, se toman próximos a la cicloide que pasa por A y B

L=5;
H=1;
f=@(x) sqrt(x(1)^2+x(2)^2)/sqrt(x(2))+sqrt((x(3)-x(1))^2+(x(4)-x(2))^2)
/(sqrt(x(2))+sqrt(x(4)))+sqrt((L/H-x(3))^2+(1-x(4))^2)/(sqrt(x(4))+1);
x=fminsearch(f,[1,1.3,3.2,1.7]);
%cicloide
f=@(x) (1-cos(x))/(x-sin(x))-H/L;
phi=fzero(f,pi);
R=H/(1-cos(phi));
xp=@(th) R*(th-sin(th));
yp=@(th) R*(1-cos(th));
hold on
fplot(xp,yp,[0,phi],'color','r')
%planos inclinados
line([0,x(1)],[0,x(2)],'lineWidth',1.5,'color','b')
line([x(1),x(3)],[x(2),x(4)],'lineWidth',1.5,'color','b')
line([x(3),L],[x(4),H],'lineWidth',1.5,'color','b')
plot(x(1),x(2),'o','markersize',3,'markeredgecolor','r','markerfacecolor','r')
plot(x(3),x(4),'o','markersize',3,'markeredgecolor','r','markerfacecolor','r')
hold off
set (gca,'Ydir','reverse')
axis equal
grid on
xlabel('x')
ylabel('y')
title('cicloide')
%tiempos
t1=sqrt(x(1)^2+x(2)^2)*sqrt(2*H/9.8)/sqrt(x(2));
t2=sqrt((x(3)-x(1))^2+(x(4)-x(2))^2)*sqrt(2*H/9.8)/(sqrt(x(2))+sqrt(x(4)));
t3=sqrt((L/H-x(3))^2+(1-x(4))^2)*sqrt(2*H/9.8)/(sqrt(x(4))+1);
tc=phi*sqrt(R/9.8); %cicloide
format long
disp([t1+t2+t3, tc])
format short

   1.424572580985510   1.388364604578311
>> t1,t2,t3
t1 =    0.4749
t2 =    0.4749
t3 =    0.4749

El tiempo que emplea la partícula en recorrer el arco de cicloide es 1.388 y el camino formado por los tres planos inclinados, 1.425 más próximo que con dos rampas. Comprobamos que los tiempos t1, t2 y t3 son casi idénticos.

Cuatro rampas

T= X 1 2 + Y 1 2 Y 1 + ( X 2 X 1 ) 2 + ( Y 2 Y 1 ) 2 Y 1 + Y 2 + ( X 3 X 2 ) 2 + ( Y 3 Y 2 ) 2 Y 2 + Y 3 + ( L H X 3 ) 2 + ( 1 Y 3 ) 2 Y 3 +1

Calculamos el mínimo del tiempo adimensional T que emplea la partícula en desplazarse a lo largo del camino formado por cuatro planos inclinados que conectan el origen A y el punto B (L=5, H=1). Determinamos las coordendas de los puntos de unión (x1, y1), (x2, y2) y (x3, y3) mediante fminsearch de MATLAB..

En el código x1 es x(1) e y1 es x(2), x2 es x(3) e y2 es x(4), x4 es x(5) e y4 es x(6)

L=5;
H=1;
f=@(x) sqrt(x(1)^2+x(2)^2)/sqrt(x(2))+sqrt((x(3)-x(1))^2+(x(4)-x(2))^2)
/(sqrt(x(2))+sqrt(x(4)))+sqrt((x(5)-x(3))^2+(x(6)-x(4))^2)/(sqrt(x(4))+
sqrt(x(6)))+sqrt((L/H-x(5))^2+(1-x(6))^2)/(sqrt(x(6))+1);
x=fminsearch(f,[0.3,0.6,1,1.3,3.2,1.7]);
%cicloide
f=@(x) (1-cos(x))/(x-sin(x))-H/L;
phi=fzero(f,pi);
R=H/(1-cos(phi));
xp=@(th) R*(th-sin(th));
yp=@(th) R*(1-cos(th));
hold on
fplot(xp,yp,[0,phi],'color','r')
%planos inclinados
line([0,x(1)],[0,x(2)],'lineWidth',1.5,'color','b')
line([x(1),x(3)],[x(2),x(4)],'lineWidth',1.5,'color','b')
line([x(3),x(5)],[x(4),x(6)],'lineWidth',1.5,'color','b')
line([x(5),L],[x(6),H],'lineWidth',1.5,'color','b')
plot(x(1),x(2),'o','markersize',3,'markeredgecolor','r','markerfacecolor','r')
plot(x(3),x(4),'o','markersize',3,'markeredgecolor','r','markerfacecolor','r')
plot(x(5),x(6),'o','markersize',3,'markeredgecolor','r','markerfacecolor','r')
hold off
set (gca,'Ydir','reverse')
axis equal
grid on
xlabel('x')
ylabel('y')
title('cicloide')
%tiempos
t1=sqrt(x(1)^2+x(2)^2)*sqrt(2*H/9.8)/sqrt(x(2));
t2=sqrt((x(3)-x(1))^2+(x(4)-x(2))^2)*sqrt(2*H/9.8)/(sqrt(x(2))+sqrt(x(4)));
t3=sqrt((x(5)-x(3))^2+(x(6)-x(4))^2)*sqrt(2*H/9.8)/(sqrt(x(4))+sqrt(x(6)));
t4=sqrt((L/H-x(5))^2+(1-x(6))^2)*sqrt(2*H/9.8)/(sqrt(x(6))+1);
tc=phi*sqrt(R/9.8); %cicloide
format long
disp([t1+t2+t3+t4, tc])
format short

   1.408145004708376   1.388364604578311
>> t1,t2,t3,t4
t1 =    0.3520
t2 =    0.3520
t3 =    0.3520
t4 =    0.3520
x =
    0.1663    0.5577    1.3547    1.5616    3.3612    1.8073

El tiempo que emplea la partícula en recorrer el arco de cicloide es 1.388 y el camino formado por los tres planos inclinados, 1.408 más próximo que con tres rampas. Comprobamos que los tiempos t1, t2, t3 y t4 son casi idénticos. Las coordendas de los puntos de unión son (x1, y1)=(0.1663, 0.5577), (x2, y2)=(1.3547, 1.5616), (x3, y3)=(3.3612, 1.8073)

Propiedades de la braquistócrona discreta

Las propiedades de la braquistócrona discreta son

  1. Los tiempos que la partícula emplea en recorrer los planos inclinados son iguales: t1=t2=...tk=...tN

  2. Se cumple la relación

  3. v 1 sin θ 1 = v 2 sin θ 2 =...= v N sin θ N = V 0 v k = V 0 sin θ k ,k=1,2...N

    Donde θk es el ángulo del plano inclinado con la dirección vertical y vk es la velocidad media de la partícula en la rampa k. Añadimos estas líneas de código al script anterior para comprobarlo

    ...
    th_1=atan2(x(1),x(2)); %ángulos
    th_2=atan2((x(3)-x(1)),(x(4)-x(2)));
    th_3=atan2((x(5)-x(3)),(x(6)-x(4)));
    th_4=atan2((L/H-x(5)),(1-x(6)));
    
    k1=sqrt(x(2))/sin(th_1);
    k2=(sqrt(x(2))+sqrt(x(4)))/sin(th_2);
    k3=(sqrt(x(4))+sqrt(x(6)))/sin(th_3);
    k4=(sqrt(x(6))+1)/sin(th_4);
    disp([k1,k2,k3,k4])
        2.6135    2.6134    2.6134    2.6134

    Esta relación nos recuerda a la ley de la refracción que se deduce de la aplicación del principio de Fermat: la trayectoria que sigue un rayo de luz entre dos puntos es aquella en la que emplea un tiempo mínimo en recorrerla.

Para cinco rampas el comando fminsearch de MATLAB emite un aviso

Exiting: Maximum number of function evaluations has been exceeded
         - increase MaxFunEvals option.

Con tres o cuatro rampas que unen dos puntos A y B, nos aproximamos bastante bien a la cicloide que pasa por dichos puntos

Coordenadas de los puntos de unión de los planos inclinados

Teniendo en cuenta las dos propiedades de la braquistócrona discreta, vamos a calcular las coordenadas (xk, yk), k=1,2,...N-1 de los puntos de unión de los N planos inclinados que conectan el origen A y el punto B(L, H)

En la figura se muestran dos planos inclinados consecutivos, conectados en el punto (xk, yk). Relacionamos las velocidades al comienzo y al final de los dos planos inclinados

{ u k = u k1 +gcos θ k t k u k+1 = u k +gcos θ k+1 t k+1 t k = t k+1 = t 0

En los movimientos uniformemente acelerados, las velocidades medias en cada uno de los planos inclinados son

{ v k = 1 2 ( u k + u k1 ) v k+1 = 1 2 ( u k+1 + u k ) { v k = V 0 sin θ k v k+1 = V 0 sin θ k+1

A partir de estas relaciones, despejamos la velocidad uk

{ u k = v k + 1 2 gcos θ k t 0 u k = v k+1 1 2 gcos θ k+1 t 0 sin θ k+1 sin θ k = g t 0 2 V 0 ( cos θ k+1 +cos θ k )

Utilizando las relaciones trigonométricas: sin(A+B)-sin(A-B)=2cosAsinB, cos(A+B)-cos(A-B)=2cosAcosB

sin( 1 2 ( θ k+1 θ k ) )= g t 0 2 V 0 cos( 1 2 ( θ k+1 θ k ) ) tan( 1 2 ( θ k+1 θ k ) )= g t 0 2 V 0

La diferencia entre dos ángulos consecutivos θk+1-θk es constante,

Precisamos calcular el primer ángulo, θ1 para aplicar la relación de recurrencia. Como la partícula parte del origen A en reposo, u0=0

{ u 1 =gcos θ 1 t 0 v 1 = u 1 2 v 1 = V 0 sin θ 1

De estas relaciones, obtenemos el primer ángulo

tan θ 1 = g t 0 2 V 0

El resto de los ángulos se calcula fácilmente

1 2 ( θ 2 θ 1 )=arctan( g t 0 2 V 0 ), θ 2 = θ 1 +2 θ 1 =3 θ 1 1 2 ( θ 3 θ 2 )=arctan( g t 0 2 V 0 ), θ 3 = θ 2 +2 θ 1 =5 θ 1 ... θ k =(2k1) θ 1

Las longitudes lk de los planos inclinados están relacionados con el ángulo θk

{ l k = v k t k = V 0 sin θ k t 0 l 1 = v 1 t 1 = V 0 sin θ 1 t 0 l k = l 1 sin θ k sin θ 1

Volviendo a la figura del apartado 'Propiedades de la braquistócrona discreta'

L= k=1 N l k sin θ k = l 1 sin θ 1 k=1 N sin 2 ( (2k1) θ 1 ) = l 1 sin θ 1 S L ( θ 1 ) H= k=1 N l k cos θ k = l 1 sin θ 1 k=1 N sin( (2k1) θ 1 ) cos( (2k1) θ 1 )= l 1 sin θ 1 S H ( θ 1 )

Eliminando l1 del sistema de ecuaciones, obtenemos una ecuación transcendente en θ1

L H = S L ( θ 1 ) S H ( θ 1 )

Una vez que hemos obtenido θ1, calculamos la longitud del primer plano inclinado, l1 utilizando cualquiera de las dos ecuaciones

l 1 =L sin θ 1 S L ( θ 1 )

Las coordenadas del punto de unión del primer y segundo plano inclinados son

{ x 1 = l 1 sin θ 1 y 1 = l 1 cos θ 1

y a continuación, las coordenadas del los otros puntos de unión empleando las relaciones de recurrencia entre longitudes lk y ángulos θk

θ k =(2k1) θ 1 l k = l 1 sin θ k sin θ 1 { x k = x k1 + l k sin θ k y k = y k1 + l k cos θ k ,k=2,3,...N1

Para calcular θ1, definimos la función que pasamos a fzero de MATLAB

function res =cicloide_discreta(th, N)
    num=0;
    den=0;
    for k=1:N
        num=num+sin((2*k-1)*th).^2;
        den=den+sin((2*k-1)*th).*cos((2*k-1)*th);
    end
    res=num./den;
end

Calculamos las coordenadas de los puntos de unión de N=4 planos inclinados. Representamos el camino mediante segmentos de color azul

Representamos la cicloide que pasa por el origen A y por el punto B (L=5, H=1)

L=5;
H=1;
N=4; %número de rampas
x=zeros(N-1,1);
y=zeros(N-1,1);
f=@(th) cicloide_discreta(th,N)-L/H;
th_1=fzero(f,0.1);
k=1:N;
SL=sum(sin((2*k-1)*th_1).^2);
l1=L*sin(th_1)/SL;
x(1)=l1*sin(th_1);
y(1)=l1*cos(th_1);
for k=2:N-1
    x(k)=x(k-1)+l1*sin((2*k-1)*th_1)^2/sin(th_1);
    y(k)=y(k-1)+l1*sin((2*k-1)*th_1)*cos((2*k-1)*th_1)/sin(th_1);
end
td=N*sqrt(2*L*tan(th_1)/(SL*9.8)); %tiempo, planos inclinados
%cicloide
f=@(x) (1-cos(x))/(x-sin(x))-H/L;
phi=fzero(f,pi);
R=H/(1-cos(phi));
xp=@(th) R*(th-sin(th));
yp=@(th) R*(1-cos(th));
hold on
fplot(xp,yp,[0,phi],'color','r')
%planos inclinados
line([0,x(1)],[0,y(1)],'lineWidth',1.5,'color','b')
for k=2:N-1
    line([x(k-1),x(k)],[y(k-1),y(k)],'lineWidth',1.5,'color','b')
end
line([x(3),L],[y(3),H],'lineWidth',1.5,'color','b')
for k=1:N-1
    plot(x(k),y(k),'o','markersize',3,'markeredgecolor','r','markerfacecolor','r')
end
tc=phi*sqrt(R/9.8); %tiempo cicloide
disp([td,tc]);
hold off
set (gca,'Ydir','reverse')
axis equal
grid on
xlabel('x')
ylabel('y')
title('cicloide')

Obtenemos la misma figura y las mismas coordenadas de los puntos de unión de los planos inclinados que hemos obtenido utilizando fminsearch: (x1, y1)=(0.1663, 0.5577), (x2, y2)=(1.3547, 1.5616), (x3, y3)=(3.3612, 1.8073)

x =
    0.1663
    1.3547
    3.3612
>> y
y =
    0.5577
    1.5616
    1.8073

El problema principal reside en estimar el intervalo (en el que la función cicloide_discreta cambia de signo) que tenemos que pasar a fzero para calcular el ángulo θ1. Por ejemplo, para N=4, el denominador es la suma, sin(2θ)+sin(6θ)+sin(10θ)+sin(14θ), que se hace cero para θ≈0.4 rad. La representación gráfica de dicha función con el comando fplot nos puede ayudar

Tiempo

t0 es el tiempo que emplea la partícula en deslizar sin rozamiento a lo largo de un plano inclinado y es constante. El tiempo total que le lleva desplazarse de A a B a lo largo del camino formado por un conjunto de N planos inclinados es, td=Nt0. Utilizamos las siguientes relaciones para calcular t0

l 1 =L sin θ 1 S L ( θ 1 ) l 1 = V 0 t 0 sin θ 1 tan θ 1 = g t 0 2 V 0 t 0 = 2 Ltan θ 1 S L ( θ 1 )·g

El tiempo td=1.0481 coincide con el calculado empleando fminsearch de MATLAB

    1.4081    1.3884

Representamos el cociente de tiempos td/tc para N=2,3...10, planos inclinados que conectan el origen A y el punto B (L=5, H=1). Comprobamos que cuando N se hace grande, el cociente td/tc→1

L=5;
H=1;
hold on
for N=2:10
    %planos inclinados
    f=@(th) cicloide_discreta(th,N)-L/H;
    th_1=fzero(f,0.1);
    k=1:N;
    SL=sum(sin((2*k-1)*th_1).^2);
    td=N*sqrt(2*L*tan(th_1)/(SL*9.8)); %tiempo, planos inclinados
%cicloide
    f=@(x) (1-cos(x))/(x-sin(x))-H/L;
    phi=fzero(f,pi);
    R=H/(1-cos(phi));
    tc=phi*sqrt(R/9.8); %tiempo cicloide
    plot(N,td/tc,'o','markersize',3,'markeredgecolor','r','markerfacecolor','r')
end
hold off
grid on
xlabel('N')
ylabel('t_d/t_c')
title('Tiempos')

Referencias

David Agmon, Hezi Yizhaq. The remarkable properties of the discrete brachistochrone. Eur. J. Phys. 40(2019) 035005

Carl E Mungan, Trevor C Lipscombe. Minimum descent time along a set of connected inclined planes. Eur. J. Phys. 38(2017) 045002