dh-Materialien
Maple   
Anwendungen

Die Kettenlinie

> restart;

Differentialgleichung der Kettenlinie ( Herleitung):

> dgl:= Diff(f(x),x,x) = c*sqrt(1+ Diff(f(x),x)^2):
dgl;

Differentialgleichung der Kettenlinie

Lösung dieser Differentialgleichung:

> dsolve(dgl, f(x));

Lösung der DGL

Gleichung der Kettenlinie:

> y:= 1/c*cosh(c*(x+a)) + b:
'y' = y;

y = cosh(c*(x+a))/c + b

Dieselbe Gleichung in Exponentialschreibweise:

> 'y' = convert(rhs(%), exp);

Gleichung in Exponentialschreibweise

Die Länge einer Kurve im x-y-Diagramm mit y = f(x) in den Grenzen von l und r:

> len:= Int(sqrt(1 + Diff(f(x),x)^2), x = l..r);

Kurvenlänge

Die Länge einer Kettenlinie zwischen zwei Punkten (l|f(l)) und (r|f(r)):

> f:= x -> 1/c*cosh(c*(x+a))+b;
len:= value(len);

Länge einer Kettenlinie

Vereinfachen des Integranden:

> simplify((1+sinh(c*(x+a))^2)^(1/2));

simplify

Berechnung der Kettenlinienlänge L in Abhängigkeit von l, r, c und a:

> L:= int(cosh(c*(x+a)), x = l..r);
L:= unapply(L, l, r, c, a);

Kettenlinienlänge

L(l,r,c,a)

Die Differenz der y-Werte zweier gegebener Punkte auf einer Kettenlinie:

> Delta:= subs(x = r, y) - subs(x = l, y);
Delta:= unapply(Delta, l, r, c, a);

Delta

Hilfsprozedur:

> change:= proc(n)
  if n = 1 then n = 2; fi;
  if n = 2 then n = 1; fi;
  n;
end:

Berechnung der Kettenlinie bei vorgegebener Kettenlänge lng und zwei gegebenen Punkten (l|yl) und (r|yr):

> catenary:= proc (l, yl, r, yr, lng)
  local xdf, ydf, lsgn, n, a, c, b;
  xdf:= r - l;
  ydf:= yr - yl;
  if evalf(sqrt(xdf^2 + ydf^2)) < lng then
    lsgn:= (solve(ydf = Delta(l, r, c, a), a));
    n:= 1;
    a:= lsgn[n];
    c:= fsolve(lng = L(l, r, c, a), c);
    if c < 0 then n:= change (n);
      a:= lsgn[n];
      c:= fsolve (lng = L(l, r, c, a), c);
    fi;
    b:= yl - cosh(c*(l+eval(a)))/c;
    cosh(c*(x+eval(a)))/c + b;
  else
    0;
  fi;
end:

Zeichnen einer Kettenlinie mit den Parametern l, yl, r, yr, lng:

> interface(displayprecision = 3):
f(x):= catenary(-4, 9, 12, 3, 40);
plot(f(x), x = -4..12,
  scaling = CONSTRAINED,
  labels = ["", ""],
  font = [COURIER, 12]);

f(x)

Kettenlinie