例一:cvx_begin
variables x y %定義幾個變數,變數之間是空格
minimize ((x+y+3)^2) %目標函式
y>=0 %加入約束
cvx_end
執行後,x和y的值就會改變,並且滿足目標和約束
cvx_status %問題解決狀態—solved,infeasible…
cvx_optval %目標函式的值,非常小的時候就算是基本上等於零
可以把cvx放到 matlab **的任何地方使用
只能解決凸問題,非凸(仿射的約束?)雖然會解決,但結果可能都是0。
例二:%矩陣的問題
a=randn(100,30);
b=randn(100,1);
cvx_begin
variables x(30) %x是向量型的變數,長度30
x>=0 %約束
sum(x) == 1 %約束,用的雙等號
minimize (norm(a*x-b)) %目標函式。結果為向量。所以norm(ans) =sum(|ans|^2)^(1/2),即平方和開方。
cvx_end
例三:cvx_begin
variables c(3,) symmetric
diag(c) == 1 % 三個都是1
c(1,2) == 0.6 %約束
c(2,3) ==-0.30 %約束
c == semidefinite (3) %半正定…
maximize (c(1,3)) %目標函式
cvx_end
這個是官網庫里的例子
%多面體的切比雪夫中心
% generate the input data
a1 = [ 2; 1];%這四個是斜率
a2 = [ 2; -1];
a3 = [-1; 2];
a4 = [-1; -2];
b = ones(4,1);
% create and solve the model
cvx_begin
variabler(1) %半徑
variable x_c(2) %圓心位置
maximize ( r ) %最大的圓?看結果四條線都切了。大概是因為對稱,所以能四邊都相切。
a1』*x_c + r*norm(a1,2) <= b(1); %總之多面體是給出了
a2』*x_c + r*norm(a2,2) <= b(2); %』:轉置
a3』*x_c + r*norm(a3,2) <= b(3); %感覺2範數是個比較方便的寫法
a4』*x_c + r*norm(a4,2) <= b(4);
cvx_end
點到直線的距離公式
%所以約束條件是半徑 r < 圓心到線的距離
% generate the figure
x = linspace(-2,2);
theta = 0:pi/100:2*pi;
plot( x, -x*a1(1)./a1(2) + b(1)./a1(2),』b-『);
holdon
plot( x, -x*a2(1)./a2(2) + b(2)./a2(2),』b-『);
plot( x, -x*a3(1)./a3(2) + b(3)./a3(2),』b-『);
plot( x, -x*a4(1)./a4(2) + b(4)./a4(2),』b-『);
plot( x_c(1) + r*cos(theta), x_c(2) + r*sin(theta),』r』);
plot(x_c(1),x_c(2),』k+』)
xlabel(『x_1』)
ylabel(『x_2』)
title(『largest euclidean ball lying in a 2d polyhedron』);
axis([-1 1 -1 1]) %座標範圍
axisequal
CVX使用基礎教程 結合官網教程翻譯
所有的cvx模型必須以命令cvx begin開頭且以命令cvx end終止。所有變數宣告,目標函式和約束都應介於兩者之間。cvx begin命令可能還包含乙個或多個修飾符 cvx begin guiet 當模型在解答時阻止任何螢幕輸出。cvx begin sdp 呼叫半正定規劃模式.cvx begi...
Vue官網教程 條件渲染
通過v if展示乙個dom是否顯示 改為false就不會顯示了 可以使用else的。改變ok的值為false,注意這個false是沒有 引號的,帶引號的是字串,沒效果的 因為v if只能改變自己的dom,如果想改變好幾個標籤要怎麼辦?可以使用template v else 要緊跟在v if v el...
RabbitMQ官網教程5 topic
前面的章節我們改進了日誌系統,利用direct交換機,可以選擇性的接收日誌。但是,這仍然有侷限,不能基於多個規則進行路由。在日誌系統裡,我們可能不只根據安全級別訂閱日誌,還可能想根據日誌源來訂閱。就像unix 工具syslog,根據安全級別及裝置來路由日誌。這樣就比較靈活了。為了實現這種效果,我們需...