MATLAB實現灰色預測

????????久違了,前段時間由于學習壓力大,就沒怎么更新MATLAB相關的內容,今天實在學不進去了,換個內容更新一下~

????????本貼介紹灰色預測模型,這也是數學建模競賽常見算法中的一員,和許多預測模型一樣——底層原理是根據已知數據對未知進行預測~


一.理論部分

????????灰色預測是對既含有已知信息又含有不確定信息的系統進行預測,就是對在一定范圍內變化的、與時間有關的灰色過程進行預測。 灰色預測對原始數據進行生成處理來尋找系統變動的規律,并生成有較強規律性的數據序列,然后建立相應的微分方程模型,從而預測事物未來發展趨勢的狀況。
灰色系統理論運用灰色數學處理不確定性量化問題,并充分利用已知信息,尋求系統運動規律。其獨特之處在于適用于處理信息匱乏的系統。
灰色生成是通過對原始數據進行特定要求的處理,揭示出數據背后的內在規律。常用的生成方法包括累加生成、累減均值生成和級比生成。
所謂的GM(1,1)模型: Grey(Gray) Model,本質上就是一維層面的預測~
至于模型更底層復雜的數學原理就不展開詳解了,大家自行收集資料,此處主要講解套路~

二.例題講解

如下是有關棉花生產的數據:

年份單產種子費化肥費農藥費機械費灌溉費
kg/公頃/公頃/公頃/公頃/公頃/公頃
19901017106.05495.15305.145.956.1
19911036.5113.55561.45343.868.5593.3
1992792104.55584.8541473.2104.55
1993861132.75658.35453.7582.95107.55
1994901.5174.3904.05625.05114152.1
1995922.5230.41248.75834.45143.85176.4
1996916.5238.21361.55720.75165.15194.25
1997976.5260.11337.4727.65201.9291.75
19981024.5270.61195.8775.5220.5271.35
19991003.5286.21171.8610.95195284.55
20001069.5282.91151.55599.85190.65277.35
20011168.5317.851105.8553.8211.05290.1
20021228.5319.651213.05513.75231.6324.15
20031023368.41274.1567.45239.85331.8
20041144.5466.21527.9487.35408336.15
假設我們不知道2005-2007這三年的單產數據,請你用過去15年的數據來預測這三年的產量。

1.傳統GM模型的代碼

function [result, x0_hat, relative_residuals, eta] = gm11(x0, predict_num)n = length(x0); x1=cumsum(x0); z1 = (x1(1:end-1) + x1(2:end)) / 2;  y = x0(2:end); x = z1; k = ((n-1)*sum(x.*y)-sum(x)*sum(y))/((n-1)*sum(x.*x)-sum(x)*sum(x));b = (sum(x.*x)*sum(y)-sum(x)*sum(x.*y))/((n-1)*sum(x.*x)-sum(x)*sum(x));a = -k;  x0_hat=zeros(n,1);  x0_hat(1)=x0(1);   for m = 1: n-1x0_hat(m+1) = (1-exp(a))*(x0(1)-b/a)*exp(-a*m);endresult = zeros(predict_num,1);  for i = 1: predict_numresult(i) = (1-exp(a))*(x0(1)-b/a)*exp(-a*(n+i-1)); endabsolute_residuals = x0(2:end) - x0_hat(2:end);   relative_residuals = abs(absolute_residuals) ./ x0(2:end); class_ratio = x0(2:end) ./ x0(1:end-1) ;  eta = abs(1-(1-0.5*a)/(1+0.5*a)*(1./class_ratio));  
end

2.原始數據檢驗

此處選用【單產】作為示例~

year =[1995:1:2001]';  % 橫坐標表示年份,寫成列向量的形式(加'就表示轉置)
yield= [1017
1036.5
792
861
901.5
922.5
916.5
976.5
1024.5
1003.5
1069.5
1168.5
1228.5
1023
1144.5
]';  %原始數據序列,寫成列向量的形式(加'就表示轉置)
ERROR = 0;  % 建立一個錯誤指標,一旦出錯就指定為1
% 判斷是否有負數元素
if sum(yield<0) > 0 disp('灰色預測的時間序列中不能有負數!')ERROR = 1;
end% 判斷數據量是否太少
n = length(yield);  % 計算原始數據的長度
disp(strcat('原始數據的長度為',num2str(n)))    
if n<=3disp('數據量太小')ERROR = 1;
end% 數據太多時提示可考慮使用其他方法
if n>10disp('考慮使用其他的方法')
end% 判斷數據是否為列向量,如果輸入的是行向量則轉置為列向量
if size(yield,1) == 1yield = yield';
end
if size(year,1) == 1year = year';
end

3.準指數規律檢驗

if ERROR == 0    disp('準指數規律檢驗')x1 = cumsum(yield);  rho = yield(2:end) ./ x1(1:end-1) ;   rhofigure(2)plot(year(2:end),rho,'o-',[year(2),year(end)],[0.5,0.5],'-'); grid on;text(year(end-1)+0.2,0.55,'臨界線')   set(gca,'xtick',year(2:1:end)) xlabel('年份');  ylabel('原始數據的光滑度');  disp(strcat('指標1:光滑比小于0.5的數據占比為',num2str(100*sum(rho<0.5)/(n-1)),'%'))disp(strcat('指標2:除去前兩個時期外,光滑比小于0.5的數據占為',num2str(100*sum(rho(3:end)<0.5)/(n-3)),'%'))disp('參考標準:指標1一般要大于60%, 指標2要大于90%!')   Judge = input('你認為可以通過準指數規律的檢驗嗎?可以通過請輸入1,不能請輸入0:');if Judge == 0disp('灰色預測模型不適合你的數據!')ERROR = 1;end
end

4.傳統的GM(1,1)預測

        if n > 7test_num = 3;elsetest_num = 2;endtrain_yield = yield(1:end-test_num);  disp('訓練數據是: ')disp(mat2str(train_yield')) test_yield = yield(end-test_num+1:end); disp('試驗數據是: ')disp(mat2str(test_yield')) 

?

disp(' ')disp('***下面是傳統的GM(1,1)模型預測的詳細過程***')result1 = gm11(train_yield, test_num);

5.評估誤差精度

    %% 殘差檢驗average_relative_residuals = mean(relative_residuals); disp(strcat('平均相對殘差為',num2str(average_relative_residuals)))if average_relative_residuals<0.1disp('該模型對原數據的擬合程度非常不錯!')elseif average_relative_residuals<0.2disp('該模型對原數據的擬合程度達到一般要求!')elsedisp('該模型對原數據的擬合程度不太好!')end%% 級比偏差檢驗average_eta = mean(eta);   % 計算平均級比偏差disp(strcat('平均級比偏差為',num2str(average_eta)))if average_eta<0.1disp('該模型對原數據的擬合程度非常不錯!')elseif average_eta<0.2disp('該模型對原數據的擬合程度達到一般要求!')elsedisp('該模型對原數據的擬合程度不太好!')enddisp(' ')

答案如下,大家自己嘗試(每個單獨預測一遍,因為GM(1,1)只針對一維數據~)

年份單產種子費化肥費農藥費機械費灌溉費
kg/公頃/公頃/公頃/公頃/公頃/公頃
20051122449.851703.25555.15402.3358.8
20061276.55371888.5637.2480.75428.4
20071233565.52009.85715.65562.05456.9

?

三.實戰案例

1.2022年美賽C題

?

????????根據現有數據,通過灰色預測模型,預測比特幣和黃金兩種波動資產的走向,擬合優度較高,殘差與級比偏差均很低,預測模型的可信度較高~

2.2022亞太賽C題

上圖是準指數檢驗~

?通過BP神經網絡、多元線性回歸以及灰色預測3種方式預測氣溫變化~結果可信度較高

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/162634.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/162634.shtml
英文地址,請注明出處:http://en.pswp.cn/news/162634.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

監控員工上網有什么軟件丨三款好用的員工上網管理軟件推薦

監控員工上網行為是企業管理中不可或缺的一部分&#xff0c;因此&#xff0c;選擇一款好的監控員工上網的軟件至關重要。目前市場上存在多種監控員工上網的軟件&#xff0c;它們具有各種特點和功能&#xff0c;但企業需要仔細評估和選擇。 一、域之盾軟件 這是一款優秀的監控員…

利用GenericMenu創建上下文菜單或下拉菜單

使用GenericMenu 創建自定義上下文菜單和下拉菜單豐富自己的編輯器功能。 GenericMenu 介紹 變量 allowDuplicateNames 允許菜單具有多個同名的菜單項。 公共函數 AddDisabledItem 向菜單添加已禁用的項。 AddItem 向菜單添加一個項。 AddSeparator 向菜單添加一個分隔符項…

grafana二次啟動失敗

背景 安裝grafana后啟動使用正常&#xff0c;但是關機后再啟動顯示啟動失敗&#xff0c;但是看日志又沒有報錯信息&#xff0c;但是就是啟動不了 原因分析 其實是/var/lib/grafana/grafana.db文件損壞了&#xff0c;所以需要把這個文件刪掉之后重新啟動就正常了&#xff0c;…

如何在AppLink配置金蝶云星空預算使用單流程

上一篇有提到金蝶云星空如何通過AppLink平臺配置銷售訂單操作&#xff0c;這次來演示下如何“保存預算使用單”、“調撥單定時自動審核”以及“預算使用單反審核后刪除”操作。 根據請求數據保存預算使用單 當webhook接收到數據時觸發流程 步驟1&#xff1a;根據webhook的請…

OpenGL YUV 和 RGB 圖像相互轉換出現的偏色問題怎么解決?

未經作者(微信ID:Byte-Flow)允許,禁止轉載 文章首發于公眾號:字節流動 早上知識星球里的一位同學,遇到 yuv2rgb 偏色問題,這個問題比較典型,今天展開說一下。 省流版 首先 yuv2rgb 和 rgb2yuv 之間的轉換要基于相同的標準,轉換使用不同的標準肯定會引起偏色,常見的…

短視頻矩陣系統源碼搭建部署分享

一、 短視頻矩陣系統源碼搭建部署分享 目錄 一、 短視頻矩陣系統源碼搭建部署分享 二、短視頻矩陣系統搭建功能設計 三、 抖音矩陣號矩陣系統功能設計原則 四、 短視頻矩陣開發部分源碼展示 很高興能夠幫助您&#xff0c;以下是短視頻矩陣系統源碼搭建部署分享&#xff1a…

怎么快速卸載office365

怎么快速卸載office365 根據官網提供的兩種解決方案即點即用或MSIMicrosoft Store 根據官網提供的兩種解決方案 官網地址&#xff1a;https://support.microsoft.com/zh-cn/office/%E4%BB%8E-pc-%E5%8D%B8%E8%BD%BD-office-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8#OfficeVersio…

sql經典練習(包括運行通過代碼)

建庫 導入數據庫并運行 # 學生表 Student&#xff1a; ? create table Student( ? SId varchar(10) , ? Sname varchar(10), ? Sage datetime, ? Ssex varchar(10)); ? insert into Student values(01 , 趙鐵柱 , 1990-01-01 , 男); ? insert into Student values(02 …

智能優化算法 | Matlab實現金豺優化算法(GJO)(內含完整源碼)

文章目錄 效果一覽文章概述源碼設計參考資料效果一覽 文章概述 智能優化算法 | Matlab實現金豺優化算法(GJO)(內含完整源碼) 源碼設計 %%clear clc close SearchAgents_no=30; % Number of search agents Max_iteration=1000

PHP 正則式 全能匹配URL(UBB)

PHP 正則式 全能匹配URL&#xff08;UBB&#xff09; 語言&#xff1a;PHP 注明&#xff1a;正則式 無語言限制&#xff08;js、PHP、JSP、ASP、VB、.net、C#...&#xff09;一切皆可。 簡介&#xff1a;PHP UBB 正則式 全能匹配URL 自動加超級鏈接。網上找了很多都不匹配或…

數字化轉型過程中面臨最大的問題是什么?如何借助數字化工具實現快速轉型?

在科技快速發展的時代&#xff0c;數字化轉型已經成為企業的重要戰略。當企業努力適應數字化時代并取得成功時&#xff0c;他們可能會面臨各種必須有效應對的挑戰。   數字化轉型不僅僅是將新技術應用到企業的運營中&#xff0c;還需要對企業的運營方式、與客戶的互動方式和價…

數字人直播系統開發要注意的陷阱

數字人做為元宇宙的底層基座&#xff0c;BAT都在跑步進場&#xff0c;目前具有前瞻性的公司都在布局數字人產業。數字人可以應用于很多業務場景&#xff0c;對今年來說&#xff0c;無疑數字人直播系統是最火的。像去年數字人直播SAAS系統定制開發的話沒有個百把萬是下不來的。但…

求臻醫學六周年,我們的故事值得被記錄

6載光陰求臻醫學持續以科技創新推動產業升級在腫瘤精準診療領域持續深耕致力于為腫瘤患者生命續航每一位求臻人都是我們前進的力量也是我們不斷創新的源泉我們不拘泥于一種聲音以多元化的視角探索前行

app小程序定制的重點|軟件定制開發|網站搭建

app小程序定制的重點|軟件定制開發|網站搭建 App小程序定制開發是近年來快速發展的一項技術服務&#xff0c;隨著移動互聯網的普及和用戶需求的不斷升級&#xff0c;越來越多的企業和個人開始關注和需求定制化的小程序開發。那么&#xff0c;對于app小程序定制開發來說&#xf…

基于枚舉實現的橋接模式

基于枚舉實現的橋接模式 這里是基于枚舉方式來維護的橋接模式&#xff0c;維護抽象化和實現化的關系。 橋接模式的應用場景&#xff1a; 當一個類內部具備兩種或多種變化維度時&#xff0c;使用橋接模式可以解耦這些變化的維度&#xff0c;使高層代碼架構穩定。 橋接模式通常…

【微信小程序】繪制二維碼實現及解決canvas層級問題最佳實踐

前言 很久沒寫微信小程序的需求了&#xff0c;今天來活兒要做個二維碼掃碼相關的需求&#xff0c;本來以為是灑灑水的事情&#xff0c;誰知道也折磨了大半天&#xff0c;今天特此記錄一下~ 需求&#xff1a;點擊按鈕&#xff0c;彈出二維碼&#xff0c;二維碼內容固定為test …

獨孤思維:不喜愛的再賺錢也別碰,因為你愛無能

很多人都說什么工作收入高做什么&#xff1b; 很多女人說哪個男人有錢嫁哪個&#xff1b; 很多粉絲說什么項目賺錢做什么。 本質上不是你愛這個工作&#xff0c;愛這個男人&#xff0c;愛這個項目。 而是你愛錢。 但是愛錢&#xff0c;要付出代價。 工作收入高&#xff0…

Dubbo框架

1&#xff1a;簡介 Dubbo 是阿里巴巴公司開源的一個Java高性能優秀的服務框架 Apache Dubbo 是一款 RPC 服務開發框架&#xff0c;用于解決微服務架構下的服務治理與通信問題 這是Dubbo官網的介紹&#xff0c;下面是我對這dubbo的理解 首先介紹下什么是RPC&#xff1a; 常…

為什么說品牌低價不是一件好事

消費者貨比三價為的是買到低價質優的產品&#xff0c;而網絡電商平臺的公開&#xff0c;也促進了消費者及品牌進行比價&#xff0c;那品牌低價一定就是好事嗎&#xff0c;一定會拉高品牌銷量嗎。其實是不一定的&#xff0c;低價意味著成本的降低&#xff0c;也可能滋生很多產品…

【精選】改進的YOLOv5:紅外遙感圖像微型目標的高效識別系統

1.研究背景與意義 隨著科技的不斷發展&#xff0c;紅外遙感技術在軍事、安防、環境監測等領域中得到了廣泛應用。紅外遙感圖像具有獨特的優勢&#xff0c;可以在夜間或惡劣天氣條件下獲取目標信息&#xff0c;因此在小目標檢測方面具有重要的應用價值。然而&#xff0c;由于紅…