日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MATLAB线性规划相关函数用法

發布時間:2023/12/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MATLAB线性规划相关函数用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.線性規劃的Matlab標準形式及軟件求解

1. MATLAB中規定線性規劃的標準形式為

其中c和 x為n 維列向量, A、 Aeq 為適當維數的矩陣,b 、beq為適當維數的列向量。 (Aeq 對應約束條件中等式約束的系數矩陣,A為約不等式約束的系數矩陣)

2. MATLAB函數用法——linprog

[x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,OPTIONS)

這里 x返回最優值對應自變量大多數是一個向量,fval 返回目標函數的最優值,A是不等式矩陣,b不等式右邊的列向量,Aeq等式約束矩陣,beq等式右邊的列向量,LB 和 UB 分別是變量 x的下界和上界, OPTIONS 是控制參數。(b,beq,LB,UB均為列向量)

3.例題

clc;clear; c=[2;3;-5]; A=[-2,5,-1;1,3,1]; b=[-10;12]; Aeq=[1,1,1]; beq=7; [x,fval]=linprog(-c,A,b,Aeq,beq,zeros(3,1)); %MATLAB中所給函數求的是最小值因為題目中求最大值所以-c fval=-fval;

4.可以轉化為線性規劃的問題
①對絕對值的處理

對于“x=u-v”和“|x|=u+v”,任何一個數都可以被兩個非負數表示如果這個數為正數+,那么x=u,v=0;如果這個數為負數-,那么x=v,u=0.
②例題

clc;clear; c=1:4; c=[c,c]'; A=[1 -1 -1 1;1 -1 1 -3;1 -1 -2 3]; A=[A,-A]; %構造變換矩陣 b=[-2 -1 -0.5]'; [y,fval]=linprog(c,A,b,[],[],zeros(8,1));%沒有等式約束,對應空矩陣[] x=y(1:4)-y(5:end); %變回到原問題x=u-v,對于y前四個為u,后四個為v

對于這個方法我看到只能用一個字形容——妙啊

二.整數線性規劃的Matlab求解

1. 線性規劃中實際情況中,很多情況要求自變量為整數

2. 整數線性規劃函數——intlinprog*

[x,fval]=intlinprog(c,intcon,A,b,Aeq,beq,LB,UB,x0,OPTIONS)

這里intcon為代表了整數決策變量所在的位置,x0為初始變量(在求之前對所求變量做一個預估)。其它和linprog函數中的含義一樣。

3. 例題

clc;clear; c=[-3 -2 -1]'; intcon=3; %整數變量的位置為3 如果有3個都是整數則intcon=[1,2,3] A=ones(1,3); b=7; Aeq=[4,2,1]; beq=12; LB=zeros(3,1); UB=[Inf;Inf;1];%對于x1,x2都是非負數,而x3為0-1之間的整數即x3=0或者1 [x,fval]=intlinprog(c,intcon,A,b,Aeq,beq,LB,UB);

3.非線性規劃的Matlab標準形式及軟件求解

1.MATLAB中規定非線性規劃的標準形式為

這里c(x)和ceq(x)為非線性向量函數

2. 非線性規劃函數——fmincon

[x,fval]=fmincon(fun,x0,A,b,Aeq,beq,LB,UB,nonlcon,OPTIONS)

這里fun是用M文件定義的函數f(x),x0是x的初始值,nonlcon是用M文件定義的非線性向量函數c(x)和ceq(x)。
其它和linprog函數中的含義一樣。

3. 例題

%% 編寫函數fun function f=fun1(x) f=sum(x.^2)+8; end %% 編寫函數nonlcon function [g,h]=fun2(x) g=[-x(1)^2+x(2)-x(3)^2,x(1)+x(2)^2+x(3)^2-20];%非線性不等式約束 h=[-x(1)-x(2)^2+2,x(2)+2*x(3)^2-3];%非線性等式約束 end %% 主文件程序 clc;clear; [x,fval]=fmincon(@fun1,rand(3,1),[],[],[],[],zeros(3,1),[],@fun2);

4.二次規劃的Matlab標準形式及軟件求解

1. MATLAB中規定二次規劃的標準形式為

若某非線性規劃的目標函數為自變量x的二次函數,約束條件又全是線性的,就稱這種規劃為二次規劃

2. 二次規劃函數——quadprog

[x,fval]=quadprog(H,f,A,b,Aeq,beq,LB,UB,x0,OPTIONS)

這里H為實對稱矩陣,f相當于除去二次的線性規劃系數

3. 例題

clc;clear; H=[4,-4;-4,8]; f=[-6,-3]'; A=[1 1;4 1]; b=[3 9]'; [x,fval]=quadprog(H,f,A,b,[],[],zeros(2,1));%沒有等式約束

5.無約束極值問題的數值解

1. fminunc和fminsearch

[x,fval] = fminunc(fun,x0,OPTIONS) [x,fval] = fminsearch(fun,x0,OPTIONS)

使用optimset可以設置OPTIONS
fminsearch只能求出給定初值附近的一個極小值點(如果要求極大值求相反數)
2. 例題

clc;clear; f=@(x)x(1)^3-x(2)^3+3*x(1)^2+3*x(2)^2-9*x(1); g=@(x)-f(x); [x1,fval1]=fminunc(f,rand(2,1)); %求極小值 [x2,fval2]=fminsearch(g,rand(2,1));%求極大值 fval2=-fval2;

6.約束極值問題的數值解

1. 單變量非線性函數極小值——fminbnd

[x,fval]=fminbnd(fun,x1,x2,OPTIONS)

fun是用M文件定義的函數、匿名函數(@)或者Matlab中單變量數學函數。x∈[x1,x2]

clc;clear; f=@(x)(x-3)^2-1; [f,fval]=fminbnd(f,0,5);

2.fseminf函數

這里c(x),ceq(x)為向量函數,Ki(x,wi)為標量函數,w1,w2,…,wn為附加變量。

[x,fval]=fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,LB,UB,OPTIONS)

這里ntheta為半無窮約束Ki(x,wi)的個數,seminfcon用于定義非線性不等式約束c(x)、非線性等式約束ceq(x)和半無窮約束Ki(x,wi)的函數,seminfcon有兩個輸入參數x和s,s是推薦步長,也可以不使用。

%% 編寫fun函數文件 function f=fun1(x) f=sum((x-0.5).^2); end %% 編寫seminfcon函數文件 function [c,ceq,k1,k2,s]=fun2(x,s) c=[];ceq=[];%這里沒有非線性等式和不等式約束 if isnan(s(1,1))%如果s是NaN s=[0.2,0;0.2,0]; end %取樣值 w1=1:s(1,1):100; w2=1:s(2,1):100; %半無窮約束 k1=sin(w1*x(1)).*cos(w1*x(2))-1/1000*(w1-50).^2-sin(w1*x(3))-x(3)-1; k2=sin(w2*x(2)).*cos(w2*x(1))-1/1000*(w2-50).^2-sin(w2*x(3))-x(3)-1; %畫圖 plot(w1,k1,'-',w2,k2,'+'); end %% 編寫主程序 clc;clear; x0=[0.5;0.2;0.3];%如果初值不合適可能得不到可行解 [x,feval]=fseminf(@fun1,x0,2,@fun2);

3. fminimax函數

[x,fval]=fminimax(fun,x0,A,b,Aeq,beq,LB,UB,nonlcon,OPTIONS)

這里nonlcon是用M文件定義的非線性向量函數c(x)和ceq(x)。

%% 編寫函數文件 function f=fun(x) f=[2*x(1)^2+x(2)^2-48*x(1)-40*x(2)+304,-x(1)^2-3*x(2)^2,x(1)+3*x(2)-18,-x(1)-x(2),x(1)+x(2)-8]; end %% 編寫主程序調用函數文件 clc;clear; [x,fval]=fminimax(@fun,rand(2,1));

2020/2/11今天看了數學建模線性相關的知識,感覺有很多不知道的函數用法,所以自己總結一下,以上全部來自于《數學建模算法與應用》。第一次寫CSDN,可能寫的有點亂。這些函數如果不經常用很可能忘所以記下來方便以后復習,重要的是大家一起分享吧!!!

總結

以上是生活随笔為你收集整理的MATLAB线性规划相关函数用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。