Wolfram Language

Symbolische & numerische Integral- und Differentialrechnung

Modellieren Sie eine hängende Kette

Ermitteln Sie die Stelle minimaler potentieller Energie einer Kette oder eines Kabels der Länge , das zwischen zwei Punkten aufgehängt ist.

Legen Sie Parameterwerte für die Länge der Kette , die Höhe am linken Ende sowie die Höhe am rechten Ende fest.

In[1]:=
Click for copyable input
L = 4; a = 1; b = 3;

sei die Höhe der Kette als eine Funktion der horizontalen Position, mit .

In[2]:=
Click for copyable input
xf = 1; nh = 201; h := xf/nh;

Legen Sie Variablen für die Höhe der Kette fest.

In[3]:=
Click for copyable input
varsy = Array[y, nh + 1, {0, nh}];

Geben Sie die Neigung an der Stelle mit an und legen Sie dafür Variablen fest.

In[4]:=
Click for copyable input
varsm = Array[m, nh + 1, {0, nh}];

Geben Sie die partielle potentielle Energie von bis mit an.

In[5]:=
Click for copyable input
varsv = Array[v, nh + 1, {0, nh}];

Geben Sie die Länge der Kette an der Stelle mit an und legen Sie Variablen dafür fest.

In[6]:=
Click for copyable input
varss = Array[s, nh + 1, {0, nh}];

Verknüpfen Sie alle Variablen.

In[7]:=
Click for copyable input
vars = Join[varsm, varsy, varsv, varss];

Das Ziel ist, die potentielle Gesamtenergie zu minimieren.

In[8]:=
Click for copyable input
objfn = v[nh];

Hier sind die der Geometrie zugrundeliegenden Randwertsbedingungen.

In[9]:=
Click for copyable input
bndcons = {y[0] == a, y[nh] == b, v[0] == 0, s[0] == 0, s[nh] == L};

Diskretisieren Sie die ODE: , , .

In[10]:=
Click for copyable input
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}]};

Wählen Sie Anfangspunkte für die Variablen.

In[11]:=
Click for copyable input
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}]];

Minimieren Sie die den Bedingungen unterliegende potentielle Gesamtenergie.

In[12]:=
Click for copyable input
sol = FindMinimum[{objfn, Join[bndcons, odecons]}, Thread[{vars, init}]];

Extrahieren Sie die Lösungspunkte.

In[13]:=
Click for copyable input
solpts = Table[{i h, y[i] /. sol[[2]]}, {i, 0, nh}];

Plotten Sie die Stelle der Kette mit minimaler potentieller Energie.

In[14]:=
Click for copyable input
ListPlot[solpts, ImageSize -> Medium, PlotTheme -> "Marketing"]
Out[14]=

Ermitteln Sie mit FindFit das beste Modell zur Anpassung an die Kettenkurve.

In[15]:=
Click for copyable input
catenary[t_] = c1 + (1/c2) Cosh[c2 (t - c3)];
In[16]:=
Click for copyable input
fitsol = FindFit[solpts, catenary[t], {c1, c2, c3}, {t}]
Out[16]=

Plotten Sie die Lösungspunkte zusammen mit der Kettenlinie.

In[17]:=
Click for copyable input
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]]]
Out[17]=

Verwandte Beispiele

en es fr ja ko pt-br ru zh