这个例子展示了如何通过求解一个二次优化问题来确定马戏团帐篷的形状。帐篷由沉重的弹性材料制成,并形成一个受约束的势能最小的形状。问题的离散化可得到一个有界约束的二次规划问题。
有关此示例的基于问题的版本,请参见基于问题的有界约束二次规划.
考虑建一个马戏团帐篷覆盖一个广场。这个帐篷有五根柱子,上面用一种很重的弹性材料覆盖着。问题是找到帐篷的自然形状。模型的形状作为高度x(p)的位置p.
重物质提升到高度时的势能x是残雪,为常数c这与材料的重量成正比。对于这个问题,选择c= 1/3000。
一块材料的弹性势能 近似正比于材料高度的二阶导数,乘以高度。你可以用5点有限差分近似来近似二阶导数(假设有限差分步长为1) 表示在第一个坐标方向上的位移为1 表示在第二个坐标方向上移位1。
帐篷的自然形状使总势能最小化。通过离散化这个问题,你会发现要最小化的总势能是所有位置的和p的 +残雪(p).
这个势能是变量的二次表达式x
.
指定边界条件,即帐篷在边缘的高度为零。帐篷杆的横截面为1 × 1单元,帐篷的总尺寸为33 × 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
问题的公式化就是最小化
.
在这个例子中,是线性项 对应于物料高度的势能。因此,指定f=每部分的1/3000x.
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]);