Wolfram Language

Calcul numérique et symbolique

Optimisez la forme d'une came

Dessinez la forme d'une came convexe pour maximiser la zone de l'ouverture de la vanne pour une rotation de la came, avec des contraintes sur les rayons de la came.

Cela suppose la forme de la came soit circulaire sur un angle de o de sa circonférence avec un rayon rmin et est de forme symétrique sur le reste .

Les variables de dessin , , , , , représentent le rayon de la came aux angles équidistants distribués sur un angle de , la moitié supérieure de la partie non circulaire de la came.

In[1]:=
Click for copyable input
n = 100; vars = Array[r, n];

Chaque rayon est contraint de tomber dans l'intervalle .

In[2]:=
Click for copyable input
rmin = 1; rmax = 2; varbounds = Table[rmin <= r[i] <= rmax, {i, 1, n}];

Entrez l'angle défini ci-dessus.

In[3]:=
Click for copyable input
\[Theta] = 2 Pi/(5 (n + 1));

Les contraintes de convexité sont exprimés par le système des inégalités.

In[4]:=
Click for copyable input
convexconstri = (1/2) r[i - 1] r[i + 1] Sin[2 \[Theta]] <= (1/2) r[i - 1] r[i] Sin[\[Theta]] + (1/2) r[i] r[ i + 1] Sin[\[Theta]];

En utilisant , le système peut être réexprimé comme suit. Notez que est le rayon du point sur la partie circulaire de la came et donc égal à .

In[5]:=
Click for copyable input
convexconstr = Table[2 r[i - 1] r[i + 1] Cos[\[Theta]] <= r[i] (r[i - 1] + r[i + 1]), {i, 0, n}] /. {r[-1] -> rmin, r[0] -> rmin, r[n + 1] -> rmax};

Une contrainte sur le taux de variation du rayon est exprimé en termes du paramètre comme .

In[6]:=
Click for copyable input
\[Alpha] = 1.5; rchangeconstr = Table[-\[Alpha] <= (r[i + 1] - r[i])/\[Theta] <= \[Alpha], {i, 0, n}] /. {r[0] -> rmin, r[n + 1] -> rmax};

La fonction objective (aire d'ouverture de la came), est supposée avoir une relation linéaire simple avec les variable de dessin donné comme , où is est une constante liée à la géométrie de la came.

In[7]:=
Click for copyable input
rv = 1; objfun = Pi rv^2 (1/n) Sum[r[i], {i, 1, n}];

Choisissez les points initiaux pour les variables.

In[8]:=
Click for copyable input
initpts = Table[.5 (rmin + rmax), {i, 1, n}];

Résolvez le problème de maximisation.

In[9]:=
Click for copyable input
sol = FindMaximum[ Join[{objfun}, varbounds, convexconstr, rchangeconstr], Thread[vars, initpts]];

Notez que plusieurs des plus grands rayons sont au maximum .

In[10]:=
Click for copyable input
Table[r[i], {i, 95, 100}] /. sol[[2]]
Out[10]=

Tracez la solution.

Montrer l'entrée complète de Wolfram Language
In[11]:=
Click for copyable input
solpts1 = Table[{r[i] Cos[-2. Pi/5 + \[Theta] i], r[i] Sin[-2. Pi/5. + \[Theta] i]}, {i, -1, n + 2}] /. {r[-1] -> rmin, r[0] -> rmin, r[n + 1] -> rmax, r[n + 2] -> r[n]} /. sol[[2]]; solpts2 = Map[{#[[1]], -#[[2]]} &, Reverse@solpts1]; solpts = Join[solpts1, solpts2]; Show[ListLinePlot[solpts, PlotRange -> {{-2.1, 2.1}, {-2.1, 2.1}}, PlotLabel -> "Cam Shape", AspectRatio -> 1, Axes -> False, Frame -> True], Graphics[{Circle[{0., 0.}, 1.]}], ImageSize -> Medium]
Out[11]=

Exemples connexes

de en es ja ko pt-br ru zh