数学建模--预测方法

预测方法

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 预测方法
  • 一、微分方程模型
  • 二、灰色预测模型
  • 三、马尔科夫预测
  • 四、时间序列
  • 五、插值与拟合
  • 六、神经元网络


一、微分方程模型

做出不同的假设,就得到不同的方程。比较典型的有传染病的预测模型、经济增长预测模型、兰彻斯特(Lanchester)战争预测模型、药物在体内的分布与排除预测模型、人口的预测模型、烟雾的扩散与消失预测模型等。其基本规律随着时间的增长趋势呈指数形式,根据变量的个数建立微分方程模型。微分方程模型的建立基于相关原理的因果预测法。


dxy=@(t,x)[-0.0544*x(2)+54000*(t>=0 & t<1)+...
    6000*(t>=2 & t<3)+13000*(t>=5 & t<6)
    -0.0106*x(1)];  %定义微分方程组右端项
[t,xy]=ode45(dxy,[0:36],[0,21500])
subplot(211), plot(t,xy(:,1),'r*',t,xy(:,2),'gD')
xlabel('时间t'),  ylabel('人数'), legend('美军','日军')
subplot(212),  plot(xy(:,1),xy(:,2))  %画微分方程组的轨线
xlabel('美军人数x'),  ylabel('日军人数y') 

二、灰色预测模型

灰色预测的主要特点是模型使用的不是原始数据序列,而是生成的数据序列。其核心体系是灰色模型(Grey Model,简称GM),即对原始数据作累加生成(或其它方法生成)得到近似的指数规律再进行建模的方法。优点是不需要很多的数据,一般只需要4个数据就够,能解决历史数据少、序列的完整性及可靠性低的问题;能利用微分方程来充分挖掘系统的本质,精度高;

clc,clear
x0=[71.1 72.4 72.4 72.1 71.4 72.0 71.6]'; %注意这里为列向量
n=length(x0);
lamda=x0(1:n-1)./x0(2:n)  %计算级比
range=minmax(lamda')  %计算级比的范围
x1=cumsum(x0)  %累加运算
B=[-0.5*(x1(1:n-1)+x1(2:n)),ones(n-1,1)];
Y=x0(2:n);
u=B\Y  %拟合参数u(1)=a,u(2)=b
syms x(t)
x=dsolve(diff(x)+u(1)*x==u(2),x(0)==x0(1)); %求微分方程的符号解
xt=vpa(x,6) %以小数格式显示微分方程的解
yuce1=subs(x,t,[0:n-1]); %求已知数据的预测值
yuce1=double(yuce1); %符号数转换成数值类型,否则无法作差分运算
yuce=[x0(1),diff(yuce1)]  %差分运算,还原数据
epsilon=x0'-yuce    %计算残差
delta=abs(epsilon./x0')  %计算相对误差
rho=1-(1-0.5*u(1))/(1+0.5*u(1))*lamda'  %计算级比偏差值,u(1)=a

数学建模--预测方法_第1张图片

clc,clear
x0=[41,49,61,78,96,104]; %原始序列
n=length(x0); 
x1=cumsum(x0)  %计算1次累加序列
a_x0=diff(x0)' %计算1次累减序列
z=0.5*(x1(2:end)+x1(1:end-1))'; %计算均值生成序列
B=[-x0(2:end)',-z,ones(n-1,1)]; 
u=B\a_x0   %最小二乘法拟合参数
syms x(t)
x=dsolve(diff(x,2)+u(1)*diff(x)+u(2)*x==u(3),x(0)==x1(1),x(5)==x1(6)); %求符号解
xt=vpa(x,6) %显示小数形式的符号解
yuce=subs(x,t,0:n-1); %求已知数据点1次累加序列的预测值
yuce=double(yuce) %符号数转换成数值类型,否则无法作差分运算
x0_hat=[yuce(1),diff(yuce)]; %求已知数据点的预测值
x0_hat=round(x0_hat) %四舍五入取整数
epsilon=x0-x0_hat    %求残差
delta=abs(epsilon./x0)  %求相对误差

数学建模--预测方法_第2张图片
数学建模--预测方法_第3张图片


clc,clear
x0=[4.93   2.33   3.87   4.35   6.63   7.15   5.37   6.39   7.81   8.35];
x1=cumsum(x0);  %1次累加序列
n=length(x0);
z=0.5*(x1(2:n)+x1(1:n-1));   %求x1的均值生成序列
B=[-z',z'.^2];
Y=x0(2:end)';
u=B\Y     %估计参数a,b的值
syms x(t)
x=dsolve(diff(x)+u(1)*x==u(2)*x^2,x(0)==x0(1));  %求符号解
xt=vpa(x,6) %显示小数形式的符号解
yuce=subs(x,t,[0:n-1]); %求已知数据点1次累加序列的预测值
yuce=double(yuce) %符号数转换成数值类型,否则无法作差分运算
x0_hat=[yuce(1),diff(yuce)] %求已知数据点的预测值
epsilon=x0-x0_hat    %求残差
delta=abs(epsilon./x0)  %求相对误差
writematrix([x0',x0_hat',epsilon',delta'], 'data15_5.xlsx')

三、马尔科夫预测

数学建模--预测方法_第4张图片

四、时间序列

数学建模--预测方法_第5张图片
数学建模--预测方法_第6张图片

clc, clear
a=[15.2	 15.9	18.7	22.4	26.9	28.3	30.5 ...
   33.8	 40.4	50.7	58	    66.7	81.2	83.4];
Rt=tiedrank(a)  %求原始时间序列的秩
n=length(a); t=1:n; 
Qs=1-6/(n*(n^2-1))*sum((t-Rt).^2)   %计算Qs的值
T=Qs*sqrt(n-2)/sqrt(1-Qs^2)   %计算T统计量的值
t_0=tinv(0.975,n-2)     %计算上alpha/2分位数
b=diff(a);   %求原始时间序列的一阶差分
m=ar(b,2,'ls')  %利用最小二乘法估计模型的参数
bhat=predict(m,b')  %求预测值,第二个参数必须为列向量
bhat(end+1)=forecast(m,b',1) %计算1个预测值,第二个参数必须为列向量
ahat=[a(1), a+bhat']  %求原始数据的预测值,并计算t=15的预测值
delta=abs((ahat(1:end-1)-a)./a)  %计算原始数据预测的相对误差
writematrix(ahat, 'anli15_1.xlsx')
writematrix(delta,'anli15_1.xlsx', 'Sheet', 1, 'Range', 'A3')

五、插值与拟合

数学建模--预测方法_第7张图片

六、神经元网络

数学建模--预测方法_第8张图片
数学建模--预测方法_第9张图片

你可能感兴趣的:(Matlab,python,机器学习,开发语言)