線性規劃
-
定義:在一組線性約束條件的限制下,求一線性目標函數最大或最小的問題。html
- matlab函數:linprog:
[x,y]=linprog(f,a,b,aeq,beq,lb,ub)算法
其中,x是最優解時自變量的取值,y是最優解,f是價值向量,就是目標函數的係數,a是線性不等式的約束的係數矩陣,b是不等式的的另外一側的係數矩陣,aeq是等式的約束的係數矩陣,beq是等式約束的另外一側的係數矩陣,lb是X上界,ub是下界。數組
其中,求的是最小值。具體使用辦法:app
http://blog.sina.com.cn/s/blog_4afe685f0101gxgg.html函數
- 拓展沒看懂,略。
整數規劃spa
- 定義:數學規劃中的變量部分或所有限制爲整數時,成爲整數規劃。(因此有可能沒有整數解)
- 指派問題:n人作n項工做,第i人作第j項工做,花費cij的時間,問如何分配?
min∑cij·xij.net
s.t.:第j列只有一我的是1,第i行只有一個是1.code
- 蒙特卡洛法:代碼見:https://www.cnblogs.com/caiyishuai/p/11394679.html
感受蒙特卡洛和大數定律差很少的原理了。htm
- 混合整數規劃:intlinprog:https://www.cnblogs.com/goodtwo/p/11145699.html
用法和linprog幾乎同樣,也是求最小值。blog
指派問題2.7,
如何把二維決策變量變成一維決策變量? c=c(:)
其餘的看不懂了!這個a究竟是什麼鬼啊!!!
例2.8注意混合整數規劃中,lb ub怎麼寫。
非線性規劃
- 定義:若是目標函數或約束條件中包含非線性函數,就稱這種規劃問題爲非線性規劃問題。
- [x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
- fun是函數,要定義一個函數;nonlcon也要另外定義函數!
約束極值問題
- 規劃問題:帶有約束條件的極值問題;
- 二次規劃:自變量是二次函數,約束條件又全是線性的。===》 quadprog
- 罰函數法:轉化成求解無約束條件極值問題。
- 這個PPT寫的要比書上更清楚;
- 程序怎麼寫?
- 目標函數是delta*delta'
- 約束條件是1.不碰撞;2.調的角度最大三十度;
有關自定義函數:
function [output 1,....] = name(input1,...)
調用的話,函數必定要放在當前目錄下,要否則就報錯說「未定義函數或變量」。
有關極限的函數limit:
求導數:
diff(expr,v,n)
v是變量,n是階數。
對於一些簡單的運算:;
simplify:https://zhidao.baidu.com/question/208585283.html
各類化簡↑;
pretty 分數線居中顯示。
求極值:
對函數求導=0便可:
syms x y=balabalaba; dy=diff(y); dy_zero=solve(dy); dy_zero_num=double(dy_zero);%變成數值類型 ezplot(y);%畫圖
此處求得的是X軸座標,就算求出來的點也是駐點,不必定是極值點。
再利用高數的知識:
- 因此要求 Hessian陣:若是是正定陣,則是極小值,若是駐點處是負定陣則是極大值,若是是不定陣,則不是極值點。
Hessian矩陣的特徵值就是形容其在該點附近特徵向量方向的凹凸性,特徵值越大,凸性越強;
- subs():matlab中subs()是符號計算函數,表示將符號表達式中的某些符號變量替換爲指定的新的變量,經常使用調用方式爲:subs(S,OLD,NEW)
表示將符號表達式S中的符號變量OLD替換爲新的值NEW。
syms y
f=x^3-y^3+3*x^2+3*y^2-9*x;
df=jacobian(f); %求一階導
d2f=jacobian(df); %求hessian陣
[xx,yy]=solve(df) %求駐點
xx=double(xx);yy=double(yy);
for i=1:length(xx)
a=subs(d2f,{x,y},{xx(i),yy(i)});
b=eig(a); %求特徵值
f=subs(f,{x,y},{xx(i),yy(i)});f=double(f);
if all(b>0)
fprintf('(%.1f,%.1f)是極小值點,對應的極小值爲%.1f\n',xx(i),yy(i),f);
elseif all(b<0)
fprintf('(%.1f,%.1f)是極大值點,對應的極大值爲%.1f\n',xx(i),yy(i),f);
elseif any(b>0)&any(b<0)
fprintf('不是極值點\n');
else
fprintf('沒法判斷\n');
end
end
以上是符號解,如下是數值解
另外一種 fminunc函數和fminsearch函數等等等等一堆函數;
還有梯度法。
還能用optimtool,這個感受就是上面代碼的另外一種圖形化形式而已,不看了(實際上是不會哈哈哈)。
求積分:
不定積分:int(expr,v)
定積分:int(expr,v,a,b)
求級數:
symsum(expr,v,a,b)
cell數組的用法:
見臺大郭老師PPT。
structure:
和C很像。
求常微分方程:
初值問題是指在自變量的某值給出適當個數的附加條件,用來肯定微分方程的特解的這類問題
https://wenku.baidu.com/view/797c7be9998fcc22bcd10d64.html
syms y(x) dsolve(x.^2+y+(x-2*y)*diff(y)==0)
求高階微分方程:
- 必須變成一階微分方程組;
- 把一階方程組寫成兩個參數t和y,返回一個列向量的M文件F.m;
- [T,Y]=solver('F',tspan,y0)
- 輸入參數F是用M文件定義的常微分方程組,tspan是求解區間,y0是初值列向量,solver:ode45,ode23,ode113
後話:參考書是《數學建模算法與應用》,以上隨手記錄,增強印象~
![](http://static.javashuo.com/static/loading.gif)