Optimieren Sie die Form eines Nockens
Entwerfen Sie die Form eines konvexen Nockens mit maximaler Fläche der Ventilöffnung für eine Drehung des Nockens und Bedingungen auf die Radien des Nockens.
Wir nehmen an, dass die Form des Nockens auf 6π/5 seines Umfanges die Form eines Kreises mit Radius rmin hat und über die verbleibenden 4π/5 symmetrisch geformt ist.

Die Entwurfsvariablen ri, i=1, …, n repräsentieren den Radius des Nockens zu gleich voneinander entfernten Winkeln θ in einem Winkel von 2π/5, der oberen Hälfte des nicht-kreisförmigen Teils des Nockens.

n = 100; vars = Array[r, n];
Jeder Radius ri muss im Intervall liegen.

rmin = 1; rmax = 2;
varbounds = Table[rmin <= r[i] <= rmax, {i, 1, n}];
Geben Sie den oben definierten Winkel θ an.

\[Theta] = 2 Pi/(5 (n + 1));
Konvexitätsbedingungen werden durch das Ungleichungssystem ausgedrückt.

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]];
Durch kann das System wie folgt anders ausgedrückt werden. Beachten Sie, dass
der Radius eines Punkts auf dem kreisförmigen Teil des Nockens und daher gleich wie
ist.

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};
Eine Bedingung für die Änderungsrate des Radius wird bezüglich des Parameters α als ausgedrückt.

\[Alpha] = 1.5; rchangeconstr =
Table[-\[Alpha] <= (r[i + 1] - r[i])/\[Theta] <= \[Alpha], {i, 0,
n}] /. {r[0] -> rmin, r[n + 1] -> rmax};
Es wird angenommen, dass die Zielfunktion (Öffnungsbereich des Ventils) eine einfachere lineare Beziehung zu den Entwurfsvariablen ri, gegeben als π rv 2(r1+…+rn)/n, hat, wobei rv eine Konstante in Bezug auf die Geometrie des Ventils ist.

rv = 1;
objfun = Pi rv^2 (1/n) Sum[r[i], {i, 1, n}];
Wählen Sie Anfangspunkte für die Variablen.

initpts = Table[.5 (rmin + rmax), {i, 1, n}];
Lösen Sie das Maximierungsproblem.

sol = FindMaximum[
Join[{objfun}, varbounds, convexconstr, rchangeconstr],
Thread[vars, initpts]];
Beachten Sie, dass einige der größten Radien das Maximum haben.

Table[r[i], {i, 95, 100}] /. sol[[2]]

Plotten Sie die Lösung.
