網站首頁 編程語言 正文
模型介紹
略微帶過一下原理:
灰色預測對于趨勢不強的數據,將其原始數據進行累加后得到具有明顯趨勢的新數據進行擬合,假設原數據為:?
則新數據集X(1)中數據為:
通常認為累加數據服從指數分布,欸那我們直接假設:
直接進行一個非線性擬合不就完事了,但是,從小學二年級開始,老師就教導我們,像這用指數函數擬合啊,各個參數的變化對于整體曲線的影響效果差別很大啊,直接擬合誤差會很大啊,怎么能給他整成一個線性擬合啊?(直接擬合我有試過,能夠大體描述趨勢并做出預測,但是誤差會比灰色預測大一點)。
指數函數一般符合一個微分方程:?
解常微分方程易得:?
這樣我們只需要將a,u這倆常數求出來就能得到x(1)(t) ,就能得到X(1)序列然后逐項做差就能得到X(0)序列。
當k≤t≤k+1時,有:
帶入回之前的微分方程就有:?
實際上直接進行線性擬合就好了,當然我們也可以拿最小二乘法裝模作樣的分析一下,令:?
基礎代碼
核心代碼非常短,只有六行,代碼中給出了詳細的注釋,基礎繪圖還是MATLAB風比較簡陋,后面會給出圖像修飾代碼。
X0=[15 16.1 17.3 18.4 18.7 19.1 19.9 21.3 22.5];
t=1:9; % 原始數據自變量范圍
pt=10:12; % 預測數據自變量范圍
X1=cumsum(X0); % 累加生成趨勢明顯新序列
Z=X1(1:end-1)+diff(X1)./2; % 均值,即(X1(1:end-1)+X1(2:end))./2
a_u=polyfit(-Z,X0(2:end),1); % a_u=(B'*B)\B'*Y,B=[-Z,ones]
a=a_u(1);u=a_u(2);
P=(X1(1)-u/a)./exp(a.*([t,pt]-1))+u/a; % 求X1擬合值
P=[P(1),diff(P)]; % X1逐項做差求預測值
% 繪圖
plot([t,pt],P,'*-');
hold on
plot(t,X0,'s-')
legend('預測值','真實值');
基礎代碼+修飾
X0=[15 16.1 17.3 18.4 18.7 19.1 19.9 21.3 22.5];
t=1:9; % 原始數據自變量范圍
pt=10:12; % 預測數據自變量范圍
X1=cumsum(X0); % 累加生成趨勢明顯新序列
Z=X1(1:end-1)+diff(X1)./2; % 均值,即(X1(1:end-1)+X1(2:end))./2
a_u=polyfit(-Z,X0(2:end),1); % a_u=(B'*B)\B'*Y,B=[-Z,ones]
a=a_u(1);u=a_u(2);
P=(X1(1)-u/a)./exp(a.*([t,pt]-1))+u/a; % 求X1擬合值
P=[P(1),diff(P)]; % X1逐項做差求預測值
% 繪圖
plot([t,pt],P,'s-','Color',[82,124,179]./255,'MarkerFaceColor',[82,124,179]./255,...
'MarkerEdgeColor',[1,1,1],'LineWidth',2,'MarkerSize',16)
hold on
plot(t,X0,'d-.','Color',[169,64,71]./255,'MarkerFaceColor',[169,64,71]./255,...
'MarkerEdgeColor',[1,1,1],'LineWidth',2,'MarkerSize',16)
% 增添圖例
lgd=legend('fitting result','original data');
lgd.Location='best';
lgd.FontSize=16;
% 坐標區域修飾
ax=gca;grid on;box off
ax.LineWidth=2;
ax.Color=[249,250,245]./255;
ax.XMinorTick='on';
ax.YMinorTick='on';
ax.GridLineStyle='-.';
ax.XColor=[1,1,1].*.2;
ax.YColor=[1,1,1].*.2;
ax.FontName='Cambria';
ax.FontSize=14;
原文鏈接:https://mp.weixin.qq.com/s/VQieLxYll0keo6fGhipmkA
相關推薦
- 2022-10-29 前端rem適配如何具體去使用
- 2023-11-14 樹莓派上如何安裝anaconda/miniconda環境配置
- 2022-02-27 通用mapper的查詢,selectByPrimaryKey、select、selectByExam
- 2022-02-17 RuntimeError: CUDA error: device-side assert trigg
- 2022-07-30 windows安裝matplotlib方法(cmd+pycharm)+cmd不運行python命令解
- 2022-02-15 eclipse配置Tomcat和Tomcat出現無效端口解決辦法_Tomcat
- 2022-08-19 python查看自己安裝的所有庫并導出的命令_python
- 2022-05-13 顯示類型轉換 const_cast, static_cast, dynamic_cast, tein
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支