實驗一 熟悉MATLAB基本功能
實驗的目的和要求:在本次實驗中,通過親臨使用MATLAB,對該軟件做一全面了解并掌握重點內容。
實驗內容:
1、全面了解MATLAB系統
2、實驗常用工具的具體操作和功能
學習建議:
本次實驗在全面了解軟件系統基礎之上,學習和熟悉一些MATLAB的基礎用途,重點掌握優化工具箱函數選用的內容。
重點和難點:
優化工具箱函數選用。
利用Matlab的優化工具箱,可以求解線性規劃、非線性規劃和多目標規劃問題。具體而言,包括線性、非線性最小化,最大最小化,二次規劃,半無限問題,線性、非線性方程(組)的求解,線性、非線性的最小二乘問題。另外,該工具箱還提供了線性、非線性最小化,方程求解,曲線擬合,二次規劃等問題中大型課題的求解方法,為優化方法在工程中的實際應用提供了更方便快捷的途徑。
優化工具箱中的函數
優化工具箱中的函數包括下面幾類:
1**.最小化函數**
表1 最小化函數表
函 數 | 描 述 |
---|---|
fgoalattain | 多目標達到問題 |
fminbnd | 有邊界的標量非線性最小化 |
fmincon | 有約束的非線性最小化 |
fminimax | 最大最小化 |
fminsearch, fminunc | 無約束非線性最小化 |
fseminf | 半無限問題 |
linprog | 線性課題 |
quadprog | 二次課題 |
2**.方程求解函數**
表2 方程求解函數表
函 數 | 描 述 |
---|---|
/ | 線性方程求解 |
fsolve | 非線性方程求解 |
fzero | 標量非線性方程求解 |
3**.最小二乘(曲線擬合)函數**
表3 最小二乘函數表
函 數 | 描 述 |
---|---|
/ | 線性最小二乘 |
lsqlin | 有約束線性最小二乘 |
lsqcurvefit | 非線性曲線擬合 |
lsqnonlin | 非線性最小二乘 |
lsqnonneg | 非負線性最小二乘 |
4**.實用函數**
表4 實用函數表
函 數 | 描 述 |
---|---|
optimset | 設置參數 |
optimget |
5**.大型方法的演示函數**
表5 大型方法的演示函數表
函 數 | 描 述 |
---|---|
circustent | 馬戲團帳篷問題—二次課題 |
molecule | 用無約束非線性最小化進行分子組成求解 |
optdeblur | 用有邊界線性最小二乘法進行圖形處理 |
6**.中型方法的演示函數**
表6 中型方法的演示函數表
函 數 | 描 述 |
---|---|
bandemo | 香蕉函數的最小化 |
dfildemo | 過濾器設計的有限精度 |
goaldemo | 目標達到舉例 |
optdemo | 演示過程菜單 |
tutdemo | 教程演示 |
下面以我們最常用的線性規劃模型求解函數linprog作為典型對優化工具箱進行簡單的介紹。
linprog函數
功能:求解線性規劃問題。
在命令窗口,鍵入doc linprog,得到下圖(該圖為幫助窗口)
數學模型:
?
?
其中f, x, b, beq, lb和ub為向量,A 和Aeq為矩陣。
語法:
x = linprog(f,A,b,Aeq,beq)x = linprog(f,A,b,Aeq,beq,lb,ub)x = linprog(f,A,b,Aeq,beq,lb,ub,x0)x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)[x,fval] = linprog(...)[x,fval,exitflag] = linprog(...)[x,fval,exitflag,output] = linprog(...)[x,fval,exitflag,output,lambda] = linprog(...)
描述:
x = linprog(f,A,b)求解問題 min f’x,約束條件為Ax <= b。
x = linprog(f,A,b,Aeq,beq)求解上面的問題,但增加等式約束,即Aeq*x = beq。若沒有不等式存在,則令A=[]、b=[]。
x = linprog(f,A,b,Aeq,beq,lb,ub)定義設計變量x的下界lb和上界ub,使得x始終在該范圍內。若沒有等式約束,令Aeq=[]、beq=[]。
x = linprog(f,A,b,Aeq,beq,lb,ub,x0)設置初值為x0。該選項只適用于中型問題,缺省時大型算法將忽略初值。
x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)用options指定的優化參數進行最小化。
[x,fval] = linprog(…) 返回解x處的目標函數值fval。
[x,lambda,exitflag] = linprog(…)返回exitflag值,描述函數計算的退出條件。
[x,lambda,exitflag,output] = linprog(…) 返回包含優化信息的輸出變量output。
[x,fval,exitflag,output,lambda] = linprog(…) 將解x處的拉格朗日乘子返回到lambda參數中。
變量:
lambda參數
lambda參數是解x處的拉格朗日乘子。它有以下一些屬性:
? lambda.lower –lambda的下界。
? lambda.upper –lambda的上界。
? lambda.ineqlin –lambda的線性不等式。
? lambda.eqlin –lambda的線性等式。
其它參數意義同前。
算法:
大型優化算法 大型優化算法采用的是LIPSOL法,該法在進行迭代計算之前首先要進行一系列的預處理。
中型優化算法 linprog函數使用的是投影法,就象quadprog函數的算法一樣。linprog函數使用的是一種活動集方法,是線性規劃中單純形法的變種。它通過求解另一個線性規劃問題來找到初始可行解。
診斷:
大型優化問題 算法的第一步涉及到一些約束條件的預處理問題。有些問題可能導致linprog函數退出,并顯示不可行的信息。在本例中,exitflag參數將被設為負值以表示優化失敗。
若Aeq參數中某行的所有元素都為零,但Beq參數中對應的元素不為零,則顯示以下退出信息:
Exiting due to infeasibility: an all zero row in the constraint matrix does not have a zero in corresponding right hand size entry.
若x的某一個元素沒在界內,則給出以下退出信息:
Exiting due to infeasibility: objective f’*x is unbounded below.
若Aeq參數的某一行中只有一個非零值,則x中的相關值稱為奇異變量。這里,x中該成分的值可以用Aeq和Beq算得。若算得的值與另一個約束條件相矛盾,則給出以下退出信息:
Exiting due to infeasibility: Singleton variables in equality constraints are not feasible.
若奇異變量可以求解但其解超出上界或下界,則給出以下退出信息:
Exiting due to infeasibility: singleton variables in the equality constraints are not within bounds.
應用實例
這是matlab幫助窗口里給出的一個例子:
Find x that minimizes f(x) = –5x1 – 4x2 –6x3,subject tox1 – x2 + x3 ≤ 203x1 + 2x2 + 4x3 ≤ 423x1 + 2x2 ≤ 300 ≤ x1, 0 ≤ x2, 0 ≤ x3.First, enter the coefficientsf = [-5; -4; -6];A = [1 -1 13 2 43 2 0];b = [20; 42; 30];lb = zeros(3,1);Next, call a linear programming routine.[x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb);Examine the solution and Lagrange multipliers:x,lambda.ineqlin,lambda.lowerx = 0.000015.00003.0000ans =0.00001.50000.5000ans =1.00000.00000.0000
下面在來用linprog解我們最優化考試的題:
Min f(x)=-3x1 + x2 + x3;S.T. x1 – 2*x2 + x3<=11-4*x1 + x2 + 2*x3 – x4=3-2*x1 + x3=1X1,x2,x3,x4>=0 ;在matlab command window中鍵入以下指令:f=[-3;1;1];\>> A=[1 -2 1;4 -1 -2];\>> b=[11;-3];\>> Aeq=[-2 0 1];\>> beq=1;\>> lb=zeros(3,1);\>> [x,fval,exitflag]=linprog(f,A,b,Aeq,beq,lb)Optimization terminated.x =4.00001.00009.0000fval =-2.0000exitflag =1