cvx實數變數 cvx 官網教程

2021-10-12 13:18:34 字數 2011 閱讀 4724

例一: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,根據安全級別及裝置來路由日誌。這樣就比較靈活了。為了實現這種效果,我們需...