Modelado de una cadena colgante
Encuentre la posición con energía potencial mínima de una cadena o cable de longitud  suspendida entre dos puntos.
 suspendida entre dos puntos.

Configure los valores de parámetro para la longitud de la cadena  , la altura del extremo izquierdo
, la altura del extremo izquierdo  , y la altura del extremo derecho
, y la altura del extremo derecho  .
.

L = 4; a = 1; b = 3; Permita que  sea la altura de la cadena como una función de posición horizontal, con
 sea la altura de la cadena como una función de posición horizontal, con  .
.

xf = 1; nh = 201; h := xf/nh;Configure las variables para la altura de la cadena  .
.

varsy = Array[y, nh + 1, {0, nh}];Denote la pendiente en posición  por
 por  y configure las variables para ésta.
 y configure las variables para ésta.

varsm = Array[m, nh + 1, {0, nh}];Denote la energía potencial parcial de  a
 a  por
 por  .
.

varsv = Array[v, nh + 1, {0, nh}];Denote la longitud de la cadena en posición  por
 por  y configure las variables para ésta.
 y configure las variables para ésta.

varss = Array[s, nh + 1, {0, nh}];Junte todas las variables.

vars = Join[varsm, varsy, varsv, varss];El objetivo es minimizar la energía potencial total  .
.

objfn = v[nh];Aquí hay restricciones de valores de límite desde la geometría.

bndcons = {y[0] == a, y[nh] == b, v[0] == 0, s[0] == 0, s[nh] == L}; Discretice las ecuaciones diferenciales ordinarias:  ,
,  ,
,  .
.

odecons = {Table[
    y[j + 1] == y[j] + 0.5*h*(m[j] + m[j + 1]), {j, 0, nh - 1}],
   Table[v[j + 1] == 
     v[j] + 0.5*
       h*(y[j]*Sqrt[1 + m[j]^2] + y[j + 1]*Sqrt[1 + m[j + 1]^2]), {j, 
     0, nh - 1}], 
   Table[s[j + 1] == 
     s[j] + 0.5*h*(Sqrt[1 + m[j]^2] + Sqrt[1 + m[j + 1]^2]), {j, 0, 
     nh - 1}]};Seleccione puntos iniciales para las variables.

tmin = If[b > a, 0.25 , 0.75]; init = 
 Join[Table[4*Abs[b - a]*((k/nh) - tmin), {k, 0, nh}],
  Table[4*Abs[b - a]*(k/nh)*(0.5*(k/nh) - tmin) + a, {k, 0, nh}],
  Table[(4*Abs[b - a]*(k/nh)*(0.5*(k/nh) - tmin) + a)*4*
    Abs[b - a]*((k/nh) - tmin), {k, 0, nh}], 
  Table[4*Abs[b - a]*((k/nh) - tmin), {k, 0, nh}]];Minimice la energía potencial total, sujeta a las restricciones.

sol = FindMinimum[{objfn, Join[bndcons, odecons]}, 
   Thread[{vars, init}]];Extraiga los puntos de solución.

solpts = Table[{i h, y[i] /. sol[[2]]}, {i, 0, nh}];Represente gráficamente la posición de la cadena con energía potencial mínima.

ListPlot[solpts, ImageSize -> Medium, PlotTheme -> "Marketing"]
Utilice FindFit para ajustar el resultado a la curva catenaria.

catenary[t_] = c1 + (1/c2) Cosh[c2 (t - c3)];
fitsol = FindFit[solpts, catenary[t], {c1, c2, c3}, {t}]
Represente gráficamente los puntos de solución junto con la curva catenaria.

Show[Plot[catenary[t] /. fitsol, {t, 0, 1}, 
  PlotStyle -> Directive[Green, Thickness[0.01]], 
  ImageSize -> Medium], 
 ListPlot[Take[solpts, 1 ;; nh ;; 5], PlotStyle -> PointSize[.02]]]

























 
  
  
  
  
  
  
 