このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
この例では,二次最適化問題を解いて,サーカスのテントの形状を決定する方法を説明します。テントは,弾性のある重い素材で形成されており,制約の下で位置エネルギーが最小になる形状になります。問題を離散化すると,範囲制約付きの二次計画法問題になります。
この例の問題ベースのバージョンについては,範囲制約付き二次計画法,問題ベースを参照してください。
正方形の区画にサーカスのテントを建築することを考えます。このテントには5本の柱があり,弾力性がある重い素材で覆われます。問題は,テントの自然な形状を求めることです。位置pにおけるテントの高さx(p)として形状をモデル化します。
高さxまで持ち上げた重い素材の位置エネルギーは,素材の重さに比例する定数cに対して残雪です。この問題ではc= 1/3000を選択します。
素材の一部分の弾性位置エネルギー は,素材の高さの2階微分に高さを乗算した値にほぼ比例します。2階微分は、5 つの点の有限差分近似によって近似できます (有限差分ステップのサイズは 1 であると仮定します)。 は1番目の座標方向における1単位のシフトを, は2番目の座標方向における1単位のシフトを表すとします。
テントの自然な形状では,総位置エネルギーが最小になります。問題を離散化することにより,最小化対象の総位置エネルギーは, +残雪(p)のすべての位置pの合計であることがわかります。
この位置エネルギーは,変数x
による二次式です。
端におけるテントの高さがゼロであるという境界条件を指定します。テントの柱の断面積は1 x 1単位であり,テント全体のサイズは33 x 33単位です。各柱の高さと位置を指定します。正方形の区画の領域とテントの柱をプロットします。
身高= 0 (33);高度(者者)= 0.3;高度(二六27,二六27)= 0.3;高度(者,二六27)= 0.3;高度(二六27,者)= 0.3;高度(16:17,16:17)= 0.5;colormap(灰色);surfl(高度)轴紧视图([-20,30]);标题(“帐篷杆和需要覆盖的地区”)
行列高度
は,解x
の下限を定義します。境界で解をゼロに制限するため,境界で上限乌兰巴托
をゼロに設定します。
边界= false(大小(高度));边界([1,33]:)= true;边界(:,(1,33))= true;乌兰巴托=正(大小(边界));%在大多数区域上没有上限乌兰巴托(边界)= 0;
quadprog
の問題定式化は,次を最小化することです。
.
このケースでは,線形項 は素材の高さの位置エネルギーに対応します。したがって,xの各成分についてf= 1/3000を指定します。
f =(大小(高度))/ 3000;
関数delsq
を使用して,
を表す有限差分行列を作成します。関数delsq
の返すスパース行列には,
の式の4および1というエントリに対応する,4および1のエントリが含まれています。返された行列に2を乗算し,
によって与えられるエネルギー関数を使用してquadprog
で二次計画法を解きます。
H = delsq (numgrid (“年代”, 33 + 2) * 2;
行列H
の構造を表示します。この行列はx (:)
に作用します。これは,行列x
が線形インデックスによりベクトルに変換されることを意味します。
间谍(H);标题(“Hessian矩阵的稀疏性结构”);
quadprog
を呼び出して問題を解きます。
x = quadprog (H f ,[],[],[],[], 高度,乌兰巴托);
找到满足约束条件的最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。
解x
を行列年代
に形状変更します。次に,解をプロットします。
S =重塑(x,大小(高度));surfl(年代);轴紧;视图([-20,30]);