基于MATLAB的灰色预测模型GM(2,1)的GUI计算界面

基于MATLAB的灰色预测模型GM(2,1)的GUI计算界面

技术教程gslnedu2025-08-02 17:45:362A+A-

GM(2,1)灰色预测模型是一种比较常用的预测模型,于非单调的摆动发展序列或有饱和的S形序列,可以考虑建立GM(2,1)。

GM(2,1)的模型原理和检验指标与GM(1,1)类似,区别在于:GM(2,1)是通过建立二阶微分方程进行预测运算。模型的白化方程如下:

其中a1、a2,b是模型参数。

具体原理可以参考CSDN博主zstar-_的文章《数学建模学习笔记(二十二)灰色预测(下下)GM(2,1)》,链接如下:
https://blog.csdn.net/qq1198768105/article/details/113575695

同样地,基于MATLAB的GUI界面设计了一个操作简单计算预测功能界面如下:

点击导入数据按键——输入原始数据起始年份、原始数据最终年份、预测数据的最终年份、预测数据个数、x轴坐标名称、y轴坐标名称——点击开始计算即可出现结果,同时会在当前文件夹下生成预测数据的excel文件“预测的数据.xlsx”、预测.jpg、预测的绝对误差.jpg和预测的相对误差.jpg。需要基于MATLAB的灰色预测模型GM(2,1)的GUI计算界面完整GUI程序,可以进行赞赏后截图(20元及以上),进行联系,或者在微信公众号云龙派内回复截图,几小时内会回复。界面编程不易,还请见谅!


界面举例计算:

数据为内蒙古2015-2021年货品运输数量

预测了2022-2026年的五年数据:

1、点击加载数据,选择数据excel文件

2、输入参数

3、点击开始计算按键

4、结果


GUI主要程序如下


function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global data
A = data(:,2);
n0 = str2num(get(handles.edit6,'string'));
n1 = str2num(get(handles.edit7,'string'));
ne = str2num(get(handles.edit8,'string'));
N  = str2num(get(handles.edit9,'string'));
str1 = get(handles.edit10,'string');
str2 = get(handles.edit11,'string');
num = N;
 [y2,a1,a2,b,Q,C,P,n,strs]=GM21(A,num);
 y = y2;
figure;
plot(data(:,1),data(:,2),'ob');
grid on;
hold on;
plot(n0:ne,y,'r-*');
xlabel(str1);
ylabel(str2);
legend('原始数据','预测数据','location','northwest');
saveas(gcf,'预测.jpg');%保存生成的图片
close(gcf);
axes(handles.axes1);
plot(data(:,1),data(:,2),'ob');
grid on;
hold on;
plot(n0:ne,y,'r-*');
xlabel(str1);
ylabel(str2);
legend('原始数据','预测数据','location','northwest');

error = y(1:(length(y)-N))-data(:,2); %绝对误差
error1 = (error./data(:,2))*100;%相对误差(%)
figure;
plot(data(:,1),error,'r*-');
legend('预测数据绝对误差');
xlabel(str1);
ylabel(str2);
saveas(gcf,'预测数据绝对误差.jpg');
close(gcf);
axes(handles.axes2);
plot(data(:,1),error,'r*-');
legend('预测数据绝对误差');
xlabel(str1);
ylabel(str2);
% saveas(handles.axes2,'预测数据绝对误差.jpg');
figure;
plot(data(:,1),abs(error1),'ro-');
legend('预测数据相对误差/%');
xlabel(str1);
ylabel(str2);
saveas(gcf,'预测数据相对误差.jpg');
close(gcf);
axes(handles.axes3);
plot(data(:,1),abs(error1),'ro-');
legend('预测数据相对误差/%');
xlabel(str1);
ylabel(str2);
% saveas(handles.axes3,'预测数据相对误差.jpg');
set(handles.uitable1,'data',y');
xishu = [a1 a2 b];
set(handles.edit2,'string',[strs 'a1,a2和b:' num2str(xishu)]);
set(handles.edit3,'string',['相对残差Q检验:' num2str(Q)]);
set(handles.edit4,'string',['方差比C检验:' num2str(C)]);
set(handles.edit5,'string',['小误差概率P检验:' num2str(P)]);
xlswrite('预测的数据.xlsx',y');

作 者 | 郭志龙
编 辑 | 郭志龙
校 对 | 郭志龙

本文内容来源于网络,仅供参考学习,如内容、图片有任何版权问题,请联系处理,24小时内删除。

点击这里复制本文地址 以上内容由朽木教程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

朽木教程网 © All Rights Reserved.  蜀ICP备2024111239号-8