規劃問題(一)

線性規劃

  • 定義:在一組線性約束條件的限制下,求一線性目標函數最大或最小的問題。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

用法和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便可:

solve函數

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 x
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

 

 

 

 

後話:參考書是《數學建模算法與應用》,以上隨手記錄,增強印象~

 

初值問題是指在自變量的某值給出適當個數的附加條件,用來肯定微分方程的特解的這類問題
[Chū zhí wèntí shì zhǐ zài zì biànliàng de mǒu zhí gěi chū shìdàng gè shǔ de fùjiā tiáojiàn, yòng lái quèdìng wéifēn fāngchéng de tè jiě de zhè lèi wèntí]
The initial value problem is an additional condition that gives an appropriate number of values ​​for an independent variable to determine such a special solution to a differential equation.
相關文章
相關標籤/搜索