|
|
Die Kettenlinie
Differentialgleichung der Kettenlinie (→
Herleitung):
> |
dgl:= Diff(f(x),x,x) =
c*sqrt(1+ Diff(f(x),x)^2):
dgl; |

Lösung dieser Differentialgleichung:

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

Dieselbe Gleichung in Exponentialschreibweise:
> |
'y' = convert (rhs(%),
exp); |

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); |

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); |

Vereinfachen des Integranden:
> |
simplify
((1+sinh(c*(x+a))^2)^(1/2)); |

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); |


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); |

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=["",""]); |


|