这个例子展示了如何使用基于问题的方法来寻找平衡位置的质量-弹簧系统悬挂在两个锚点。弹簧具有分段线性拉力。该系统包括gydF4y2Ba 两个维度的群众。大量的gydF4y2Ba 连接到弹簧上gydF4y2Ba 和gydF4y2Ba .泉水gydF4y2Ba 和gydF4y2Ba 也连接到单独的锚点。在这种情况下,弹簧的零力长度gydF4y2Ba 是正长度gydF4y2Ba ,弹簧产生力gydF4y2Ba 拉伸到长度gydF4y2Ba .问题是找到质量的最小势能配置,其中潜在的能量来自重力和拉伸非线性弹簧。均衡发生在最小能量配置处。gydF4y2Ba
这张图显示了五个弹簧和四个物体悬挂在两个锚点上。gydF4y2Ba
质量的势能gydF4y2Ba 在高度gydF4y2Ba 是gydF4y2Ba ,在那里gydF4y2Ba 是地球上的引力常数。同样,一个带有弹簧常数的理想线性弹簧的势能gydF4y2Ba 拉伸长度gydF4y2Ba 是gydF4y2Ba .在目前的模型中,弹簧不是理想的,但它有一个非零的静止长度gydF4y2Ba .gydF4y2Ba
这个例子的数学依据来自Lobo,Vandenberghe,Boyd和LebetgydF4y2Ba[1]gydF4y2Ba.有关此示例的基于求解器的版本,请参见gydF4y2Ba分段线性质量-弹簧系统能量最小化的锥规划,基于求解器gydF4y2Ba.gydF4y2Ba
质量的位置gydF4y2Ba 是gydF4y2Ba ,以横坐标表示gydF4y2Ba 和垂直坐标gydF4y2Ba .大量的gydF4y2Ba 由重力引起的势能是gydF4y2Ba .弹簧的势能gydF4y2Ba 是gydF4y2Ba ,在那里gydF4y2Ba 是质量之间的弹簧的长度gydF4y2Ba 和质量gydF4y2Ba .以锚点1为质量0的位置,锚点2为质量的位置gydF4y2Ba .前面的能量计算表明弹簧的势能gydF4y2Ba 是gydF4y2Ba
.gydF4y2Ba
将这个势能问题重新表述为二阶锥规划问题需要引入一些新的变量,如Lobo中所述gydF4y2Ba[1]gydF4y2Ba.创建变量gydF4y2Ba 等于术语的平方根gydF4y2Ba .gydF4y2Ba
让gydF4y2Ba 为单位列向量gydF4y2Ba .然后gydF4y2Ba .这个问题变得gydF4y2Ba
(1)gydF4y2Ba
现在考虑gydF4y2Ba 作为一个自由矢量变量,未通过以前的等式给出gydF4y2Ba .纳入之间的关系gydF4y2Ba 和gydF4y2Ba 在新的锥限制gydF4y2Ba
(2)gydF4y2Ba
根据需要,目标函数尚未在其变量中线性gydF4y2BaConeprog.gydF4y2Ba
.引入一个新的标量变量gydF4y2Ba
.请注意,不平等gydF4y2Ba
等于不等式吗gydF4y2Ba
.(3)gydF4y2Ba
现在的问题是最小化gydF4y2Ba
(4)gydF4y2Ba
受锥限制的影响gydF4y2Ba 和gydF4y2Ba (2)和附加的圆锥约束(3)。圆锥约束(3)确保gydF4y2Ba .因此,问题(4)等价于问题(1)。gydF4y2Ba
问题(4)的目标函数和锥形约束适用于解决方案gydF4y2BaConeprog.gydF4y2Ba
.gydF4y2Ba
定义六个春季常量gydF4y2Ba ,六个长常数gydF4y2Ba ,五个质量gydF4y2Ba .gydF4y2Ba
K = 40 *(1:6);l = [1 1/2 1 2 1 1/2];m = [2 1 3 2 1];g = 9.807;gydF4y2Ba
定义对应于数学问题变量的优化变量。为简单起见,将锚点设置为两个虚拟质量点gydF4y2Bax (1:)gydF4y2Ba
和gydF4y2Bax(最终,:)gydF4y2Ba
.该配方允许每个弹簧在两个质量之间伸展。gydF4y2Ba
Nmass = length(m) + 2;gydF4y2Ba% k和l有nmass-1元素gydF4y2Ba% m有nmass - 2个元素gydF4y2Bax = optimvar (gydF4y2Ba“x”gydF4y2Ba[nmass 2]);t = optimvar (gydF4y2Ba“t”gydF4y2Banmass-1,gydF4y2Ba下界的gydF4y2Ba, 0);y = optimvar (gydF4y2Ba'是'gydF4y2Ba,gydF4y2Ba下界的gydF4y2Ba, 0);gydF4y2Ba
创建一个优化问题,并将目标函数设为(4)中的表达式。gydF4y2Ba
prob = OptimProblem;obj = dot(x(2:(端-1),2),m)* g + y;prob.objective = obj;gydF4y2Ba
创建表达式(2)对应的锥约束。gydF4y2Ba
Conecons = Optimineq(Nmass - 1);gydF4y2Ba为gydF4y2Ba2 = 1:(nmass-1) conecons (ii) =规范(x (2 + 1,:) - x (ii,:)) - l (ii) < =√6 (2 / k (ii)) * t (2);gydF4y2Ba结束gydF4y2Baprob.constraints.conecons = conecons;gydF4y2Ba
指定锚点gydF4y2Baanchor0gydF4y2Ba
和gydF4y2BaanchorngydF4y2Ba
.创建等式约束,指定两个虚拟端质量位于锚点。gydF4y2Ba
anchor0 = [0 5];锚= [5 4];Anchorcons = Optimeq(2,2);锚围(1,:) = x(1,:) == anchor0;锚围(2,:) = x(结束,:) ==凤洋;prob.constraints.anchorcons =锚杆;gydF4y2Ba
创建表达式(3)对应的锥约束。gydF4y2Ba
YCONE = NARM([2 * T;(1-Y)])<= 1 + y;prob.constraints.ycone = Ycone;gydF4y2Ba
问题的表述已经完成了。通过打电话来解决问题gydF4y2Ba解决gydF4y2Ba
.gydF4y2Ba
[SOL,FVAL,EFLAG,输出] =求解(prob);gydF4y2Ba
用coneprog解决问题。找到最优解。gydF4y2Ba
绘制解决方案点和锚点。gydF4y2Ba
情节(sol.x (2: (nmass-1), 1), sol.x (2: (nmass-1), 2),gydF4y2Ba“罗”gydF4y2Ba) 抓住gydF4y2Ba在gydF4y2Ba绘图(ΦX(1,1),Sol.x(终端,1)],[Sol.x(1,2),Sol.x(END,2)],gydF4y2Ba“ks”gydF4y2Ba)情节(sol.x (: 1) sol.x (:, 2),gydF4y2Ba'B--'gydF4y2Ba)传说(gydF4y2Ba'计算点'gydF4y2Ba,gydF4y2Ba“锚点”gydF4y2Ba,gydF4y2Ba'springs'gydF4y2Ba,gydF4y2Ba'地点'gydF4y2Ba,gydF4y2Ba“最佳”gydF4y2Ba) xlim ([sol.x (1,1) -0.5, sol.x(结束,1)+ 0.5])ylim ([min (sol.x(:, 2)) -0.5,马克斯(sol.x (:, 2)) + 0.5])gydF4y2Ba离开gydF4y2Ba
您可以更改参数的值gydF4y2Ba米gydF4y2Ba
,gydF4y2BalgydF4y2Ba
, 和gydF4y2BakgydF4y2Ba
看看它们如何影响解决方案。你也可以改变质量的数量;代码从您提供的数据中获取质量的数量。gydF4y2Ba
[1] Lobo, Miguel Sousa, Lieven Vandenberghe, Stephen Boyd, Hervé Lebret。“二阶锥规划的应用”。gydF4y2Ba线性代数及其应用gydF4y2Ba284,没有。1-3(1998年11月):193-228。gydF4y2Bahttps://doi.org/10.1016/s0024-3795(98)10032-0gydF4y2Ba
.gydF4y2Ba