カムの形状を最適化する
カムの1回転に対する弁の開口が最大化されるよう,カムの半径に制約条件を付けて凸状カムの形状を設計する.
カムの形状は,半径 の円周の角度
では円であり,残りの
上では対称な形であると想定する.

設計変数 ,
,
,
,
, は角度
,つまりカムの円状の部分ではない上半分に分布した等間隔の角度
でのカムの半径を表す.
In[1]:=

n = 100; vars = Array[r, n];
それぞれの半径 は,区間
になければならない.
In[2]:=

rmin = 1; rmax = 2;
varbounds = Table[rmin <= r[i] <= rmax, {i, 1, n}];
上で定義された角度 を入力する.
In[3]:=

\[Theta] = 2 Pi/(5 (n + 1));
凸性制約は不等式系により表される.
In[4]:=

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]];
を使うと,系は下のように再表現することができる.
はカムの円状の部分にある点の半径なので
に等しいということに注目のこと.
In[5]:=

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};
半径の変化率に対する制約は,パラメータ α で として表される.
In[6]:=

\[Alpha] = 1.5; rchangeconstr =
Table[-\[Alpha] <= (r[i + 1] - r[i])/\[Theta] <= \[Alpha], {i, 0,
n}] /. {r[0] -> rmin, r[n + 1] -> rmax};
目的関数(弁の開口部)は, (
は値の幾何学に関連した定数)として与えられる設計変数
と単純な線形関係を持つと想定される.
In[7]:=

rv = 1;
objfun = Pi rv^2 (1/n) Sum[r[i], {i, 1, n}];
変数の初期点を選ぶ.
In[8]:=

initpts = Table[.5 (rmin + rmax), {i, 1, n}];
最大化問題を解く.
In[9]:=

sol = FindMaximum[
Join[{objfun}, varbounds, convexconstr, rchangeconstr],
Thread[vars, initpts]];
最大の半径のうちのいくつかは最大の である.
In[10]:=

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

解をプロットする.
完全なWolfram言語入力を表示する
Out[11]=
