主要内容

大型稀疏二次与内点算法的程序

这个例子展示了使用稀疏算法的价值,当你有一个稀疏的问题。的矩阵n行,你选择n一个较大的值,和一些非零对角乐队。一个完整的矩阵的大小n——- - - - - -n可以使用所有可用的内存,但一个稀疏矩阵提出了没有问题。

问题是最小化x ' * H * x / 2 + f ' * x

x (1) + (2) +…+ x (n) < = 0,

在哪里f = [1, 2, 3,…; - n)H是一个稀疏对称带状矩阵。

创建稀疏矩阵二次

创建一个对称循环矩阵基于向量的变化(2 2 3,6日,14日,6日3]在主对角线,14。矩阵是n——- - - - - -n,在那里n = 30000

n = 3 e4;H2 = speye (n);H = 3 * circshift (H2 3 2) + 6 * circshift (H2 2 2) + 2 * circshift (H2, 1、2)+ 14 * H2 + 2 * circshift (H2, 1、2) + 6 * circshift (H2 2 2) + 3 * circshift (H2 3 2);

视图矩阵结构。

间谍(H)

创建线性约束和目标

的线性约束和解决方案的元素是负的。目标函数包含线性项表示的向量f

一个= 1 (1,n);b = 0;f = 1: n;f = - f;

解决问题

解决二次规划问题使用'interior-point-convex”算法。过早地防止解算器停止,设置StepTolerance选项0

选择= optimoptions (@quadprog,“算法”,“interior-point-convex”,“StepTolerance”,0);[x, fval exitflag、输出λ)=quadprog (H f A、b[],[],[],[],[],选项);
最低发现满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。<停止标准细节>

在许多电脑你不能创建一个完整的n——- - - - - -n矩阵时n= 30000。所以你可以运行这个问题只有通过使用稀疏矩阵。

检查解决方案

把目标函数值,迭代次数和拉格朗日乘子与线性不等式有关。

流(的目标函数值% d。% d \ nThe的迭代次数。\ nThe拉格朗日乘子% d。\ n”,fval、output.iterations lambda.ineqlin)
目标函数值是-3.133073 e + 10。迭代的数量是7。拉格朗日乘数为1.500050 e + 04。

因为没有下界,上界,或线性等式约束,唯一有意义的拉格朗日乘子lambda.ineqlin。因为lambda.ineqlin是零,你可以告诉不等式约束是活跃的。评估约束边界上的解决方案。

流(的线性不等式约束* x值% d。\ n”* x)
线性不等式约束e-08 * x值9.150244。

解决方案组件的总和是零公差内。

解决方案x有三个区域:一个初始部分,最后一个部分,是一个近似的线性部分的解决方案。绘制三个区域。

次要情节(1,1)情节(x(一60))标题((1)通过x (60)”次要情节(3、1、2)情节(x (61: n-60))标题(“x(61)通过x (n-60) '次要情节(3,1,3)情节(x (n-59: n))标题(“x (n-59) x (n) ')

另请参阅

|

相关的话题