您的位置:首页 > 编程语言 > MATLAB

MATLAB在数学建模中的应用

2017-01-13 10:18 162 查看
线性规划linear programming
linprog函数

非线性规划nonlinear programming
fmincon函数

二次规划quadprog函数

灰色预测模型gray model

遗传算法

线性规划(linear programming)

目标函数(求min):f=cT∗x⃗

线性不等式约束:A∗x⃗ ≤b

线性等式约束:Aeq∗x⃗ =beq

eg.

c=[1 2 3]

x⃗ =[x1;x2;x3] 注:x⃗ 是列向量

f=cT∗x⃗ =x1+2∗x2+3∗x3

linprog函数

[x result]=linprog(c, A, b, Aeq, beq, LOW, UP, x0, options)


非线性规划(nonlinear programming)

fmincon函数

目标函数(求min):f(x)

线性约束:A∗x⃗ ≤b 、Aeq∗x⃗ =beq

非线性约束:C(x)≤0、Ceq(x)=0(注:线性约束也可以写这里)

‘func1’目标函数f(x)函数m文件:

function f=func1(x)
...


‘nonlinear’非线性函数m文件:

function [C Ceq]=nonlinear(x)
...


fmincon语法:

[x result]=fmincon('func1', A, b, Aeq, beq, LOW, UP, 'nonlinear',  options)


二次规划(quadprog函数)

目标函数变化成:(xTHx)/2+fTx

H对称矩阵两倍,fTx是一次函数部分

[x result]=quadprog(H, f, A, b, Aeq, beq, LOW, UP, x0, options)


灰色预测模型(gray model)

多个数据向量:X0=[x(0)(1),x(0)(2),...x(0)(n)]

令 x(1)(i)=∑x(0)(i)

则累积和向量:X1=[x(1)(1),x(1)(2),...x(1)(n)]

矩阵:E=⎡⎣⎢⎢⎢⎢1,1,...1,x(1)(1)+x(1)(2)x(1)(2)+x(1)(3)x(1)(n−1)+x(1)(n)⎤⎦⎥⎥⎥⎥

且:dx(1)/dt+ax(1)=u

设:a⃗ =[au]

用最小二乘法求a⃗ :

a⃗ =(ETE)−1ET∗[x(0)(1),x(0)(2),...x(0)(n)]T=(ETE)−1ETX0T

matlab代码:

clear
syms a b;
c=[a b]';
A=[89677 99215 109655 120333 135823 159878 182321 209407 246619 300670]; %求A=X0
B=cumsum(A); %求B=X1
n=length(A);
for i=1:(n-1)
C(i)=(B(i)+B(i+1))/2;
end

D=A;
D(1)=[];
D=D';
E=[-C;ones(1,n-1)]; %求E=E^T
c=inv(E*E')*E*D;
c=c';
a=c(1); b=c(2);  %求a u
F=[]; F(1)=A(1);
for i=2:(n+10)
F(i)=(A(1)-b/a)/exp(a*(i-1))+b/a;
end
G=[];G(1)=A(1);
for i=2:(n+10)
G(i)=F(i)-F(i-1);
end
t1=1999:2008;
t2=1999:2018;
G
plot(t1, A, 'o', t2, G)


遗传算法

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: