matlab解決有約束條件的二次規劃問題

2021-09-26 15:07:14 字數 2051 閱讀 1217

在數學建模與生活實際問題中,我們經常會遇到「優化問題」。而所謂「優化」,就是對於乙個目標函式,在給定一些等式或不等式的約束後,求極值的過程。高中學的「線性規劃」,就是一種簡單的優化問題。

現在我們來看,如何將相對複雜一點的「二次規劃問題」(quadratic programming)在matlab中得以解決。

這是最簡單暴力的方法,根據約束條件得到自變數的取值範圍,然後在自變數的取值範圍中對自變數進行遍歷,當因變數取得極值的時候問題就得到解決。

但是在整個過程中,需要許多「人工」的操作,比如手算取值範圍,然後程式設計計算因變數的各種值,然後找出極值,balabala一堆事情,很不「自動化」。而且在很多情況下手算會十分複雜,所以不在所有情況下適用。

如圖,是quadprog()函式的幫助文件

圖中的數學公式,表示的是二次規劃問題的一般形式。

而下方的syntax部分表示的是這個函式的不同呼叫格式。

用乙個例子具體說明式中各個變數的意思:

【例】解決二次規劃問題

【分析】

1.目標函式的表示

對比文件,首先應該把目標函式表示成如下矩陣形式:

h矩陣與線性代數中的「二次型」十分相似,要注意的是與二次型不同的地方,這裡有個係數1/2,所以矩陣h的元素是二次型中的矩陣元素大小的兩倍。

本例中,

f矩陣則是目標函式中的一次項,這裡寫為

2.約束條件的表示

對比文件,約束條件需要表示成這種格式

而約束條件中對變數x1和x2只給出下限,沒有給上限,因此ub為空,

3.使用程式解決問題

通過1.和2.兩步,完成了目標函式與約束條件的表示,根據文件中的呼叫格式,錄入程式即可

h=[1 -1;-1 2];

f=[-2;-6];

a=[1 1;-1 2;2 1];

b=[2;2;3];

lb=[0;0];

[x,fval,exitflag,output,lambda] = quadprog(h,f,a,b,,,lb)

注意最後一行不加分號,方便顯示結果

顯示結果如下:

x =

0.6667

1.3333

fval =

-8.2222

exitflag =

1output =

包含以下欄位的 struct:

message: '太長了...省略'

algorithm: 'interior-point-convex'

firstorderopt: 2.6645e-14

constrviolation: 0

iterations: 4

cgiterations:

lambda =

包含以下欄位的 struct:

成功完成!

另外可以參考:

詳細解釋了二次型,正定矩陣,海塞矩陣的含義

hdu3873 有約束條件的最短路

題目大意 美國佬打算入侵火星,火星上有n個城市,有些城市可能受其他城市保護,如果i城市受j城市保護,那麼你必須先攻占j城市才能再攻占i城市,問你攻占城市n的最短時間是多少。資料解釋 給定t,表示有t組資料 給定n,m 表示n個點,m條邊 接下來m條有向邊,a,b,c 表示從a到b,距離為c 接下來n...

matlab解決有約束的線性規劃問題

在 matlab解決有約束的二次規劃問題 中,提到了線性規劃問題 linear programming 而線性規劃問題實際與二次規劃問題十分相似,現在在matlab中實現求解 這是用於求解問題的linprog 函式文件 同樣使用乙個例子說明這個函式的呼叫方法 例 求解如下線性規劃問題 分析 對比幫助...

列舉mysql的約束條件 MySql約束條件彙總

約束條件約束條件是在表上強制執行的資料檢驗規則 用來保證建立的表的資料完整性和準確性 主要在兩方面對資料進行約束 空值和重複值 主鍵約束 primary key 每個表只能由乙個主鍵 主鍵值須非空不重複 可設定單字段主鍵,也可設定多欄位聯合主鍵 聯合主鍵中多個欄位的取值完全相同時,才違反主鍵約束 新...