线性规划(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)