柚子快報激活碼778899分享:matlab 預(yù)測篇:灰色預(yù)測
柚子快報激活碼778899分享:matlab 預(yù)測篇:灰色預(yù)測
應(yīng)用
灰色預(yù)測模型是通過少量的、不完全的信息,建立數(shù)學(xué)模型并做出預(yù)測的一種預(yù)測方法。是處理小樣本(4個就可以)預(yù)測問題的有效工具,而對于小樣本預(yù)測問題回歸和神經(jīng)網(wǎng)絡(luò)的效果都不太理想。
灰色預(yù)測數(shù)列
1.累加生成數(shù)列
從前依次往后對初始數(shù)列進行累加,生成累加數(shù)列,這一步是為了挖掘數(shù)據(jù)之間的關(guān)系的,也許原始數(shù)據(jù)之間的關(guān)系并不明顯,不過累加生成數(shù)列的規(guī)律很明顯。
2.加權(quán)鄰值生成數(shù)列
將相鄰兩項的累加生成數(shù)列進行加權(quán)相加。
一般取a為0.5,生成等權(quán)鄰值生成數(shù)。
灰色預(yù)測步驟
1.對原始數(shù)據(jù)進行檢驗
使用灰色預(yù)測之前首先要對原始數(shù)據(jù)進行級比檢驗,判斷數(shù)據(jù)是否滿足準指數(shù)規(guī)律。其中級比公式如下,X0表示原始數(shù)據(jù)。
代碼如下:
x=input('請輸入數(shù)據(jù)');
n=length(x);
jibi = ones(1,n-1);
for i = 2:n
jibi(i-1) = x(i-1)/x(i);
end
max1 = max(jibi);
min1 = min(jibi);
fanwei = exp(2/(n+2))-exp(-2/(n+1))
if max1 - min1 disp(['數(shù)據(jù)通過級比檢驗']); else disp(['數(shù)據(jù)不通過級比檢驗']); end 灰色預(yù)測步驟 再通過級比檢驗之后,就可以進行灰色預(yù)測了。 1.首先生成累加數(shù)列。 2.再通過加權(quán)鄰值生成等權(quán)鄰值生成數(shù)。 3.通過推導(dǎo)可知我們生成的等權(quán)鄰值生成數(shù)滿足一定的指數(shù)規(guī)律,我們的目標就是求出下列灰微分方程中a,b的值: 于是我們構(gòu)造出以下矩陣對a,b進行求解,其中Y = B*u。 4.得到灰微分方程后我們就可以對數(shù)據(jù)進行預(yù)測了。 5.最后進行檢驗,本文用了兩種常見的檢驗方式。 (1)殘差檢驗: 當(dāng)所有殘差的絕對值小于0.1時,認為模型達到較高要求;當(dāng)所有殘差的絕對值小于0.2時,認為模型達到一般要求。 (2)后驗差檢驗 1)先根據(jù)預(yù)測值X1算出預(yù)測值X0。 2)在每一個預(yù)測值和初始值的殘差 3)計算原始序列的方差S1和殘差的方差S2。 4)計算后驗差比。 5)根據(jù)查表得出預(yù)測效果的好壞。 灰色預(yù)測代碼如下: function [result, x0_hat, relative_residuals, eta] = gm11(x0, predict_num) % 函數(shù)作用:使用傳統(tǒng)的GM(1,1)模型對數(shù)據(jù)進行預(yù)測 % x0:要預(yù)測的原始數(shù)據(jù) % predict_num: 向后預(yù)測的期數(shù) % 輸出變量 (注意,實際調(diào)用時該函數(shù)時不一定輸出全部結(jié)果,就像corrcoef函數(shù)一樣~,可以只輸出相關(guān)系數(shù)矩陣,也可以附帶輸出p值矩陣) % result:預(yù)測值 % x0_hat:對原始數(shù)據(jù)的擬合值 % relative_residuals: 對模型進行評價時計算得到的相對殘差 % eta: 對模型進行評價時計算得到的級比偏差 n = length(x0); % 數(shù)據(jù)的長度 x1=cumsum(x0); % 計算一次累加值 z1 = (x1(1:end-1) + x1(2:end)) / 2; % 計算緊鄰均值生成數(shù)列(長度為n-1) % 將從第二項開始的x0當(dāng)成y,z1當(dāng)成x,來進行一元回歸 y = kx +b y = x0(2:end); x = z1; % 下面的表達式就是第四講擬合里面的哦~ 但是要注意,此時的樣本數(shù)應(yīng)該是n-1,少了一項哦 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; %注意:k = -a哦 % 注意: -a就是發(fā)展系數(shù), b就是灰作用量 disp('現(xiàn)在進行GM(1,1)預(yù)測的原始數(shù)據(jù)是: ') disp(mat2str(x0')) % mat2str可以將矩陣或者向量轉(zhuǎn)換為字符串顯示 disp(strcat('最小二乘法擬合得到的發(fā)展系數(shù)為',num2str(-a),',灰作用量是',num2str(b))) disp('***************分割線***************') x0_hat=zeros(n,1); x0_hat(1)=x0(1); % x0_hat向量用來存儲對x0序列的擬合值,這里先進行初始化 for m = 1: n-1 x0_hat(m+1) = (1-exp(a))*(x0(1)-b/a)*exp(-a*m); end result = zeros(predict_num,1); % 初始化用來保存預(yù)測值的向量 for i = 1: predict_num result(i) = (1-exp(a))*(x0(1)-b/a)*exp(-a*(n+i-1)); % 帶入公式直接計算 end % 計算絕對殘差和相對殘差 absolute_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) ; % 計算級比 sigma(k) = x0(k)/x0(k-1) eta = abs(1-(1-0.5*a)/(1+0.5*a)*(1./class_ratio)); % 計算級比偏差 end 主函數(shù)代碼如下: clear;clc year =[1995:1:2004]'; % 橫坐標表示年份,寫成列向量的形式(加'就表示轉(zhuǎn)置) x0 = [174,179,183,189,207,234,220.5,256,270,285]'; %原始數(shù)據(jù)序列,寫成列向量的形式(加'就表示轉(zhuǎn)置) % year = [2009:2015]; % 其實本程序?qū)懗闪诵邢蛄恳部梢?,因為我怕你們真的這么寫了,所以在后面會有判斷。 % x0 = [730, 679, 632, 599, 589, 532, 511]; % year = [2010:2017]'; % 該數(shù)據(jù)很特殊,可以通過準指數(shù)規(guī)律檢驗,但是預(yù)測效果卻很差 % x0 = [1.321,0.387,0.651,0.985,1.235,0.987,0.854,1.021]'; % year = [2014:2017]'; % x0 = [2.874,3.278,3.337,3.390]'; % 畫出原始數(shù)據(jù)的時間序列圖 figure(1); % 因為我們的圖形不止一個,因此要設(shè)置編號 plot(year,x0,'o-'); grid on; % 原式數(shù)據(jù)的時間序列圖 set(gca,'xtick',year(1:1:end)) % 設(shè)置x軸橫坐標的間隔為1 xlabel('年份'); ylabel('排污總量'); % 給坐標軸加上標簽 %% 因為我們要使用GM(1,1)模型,其適用于數(shù)據(jù)期數(shù)較短的非負時間序列 ERROR = 0; % 建立一個錯誤指標,一旦出錯就指定為1 % 判斷是否有負數(shù)元素 if sum(x0<0) > 0 % x0<0返回一個邏輯數(shù)組(0-1組成),如果有數(shù)據(jù)小于0,則所在位置為1,如果原始數(shù)據(jù)均為非負數(shù),那么這個邏輯數(shù)組中全為0,求和后也是0~ disp('親,灰色預(yù)測的時間序列中不能有負數(shù)哦') ERROR = 1; end % 判斷數(shù)據(jù)量是否太少 n = length(x0); % 計算原始數(shù)據(jù)的長度 disp(strcat('原始數(shù)據(jù)的長度為',num2str(n))) % strcat()是連接字符串的函數(shù),第一講學(xué)了,可別忘了哦 if n<=3 disp('親,數(shù)據(jù)量太小,我無能為力哦') ERROR = 1; end % 數(shù)據(jù)太多時提示可考慮使用其他方法(不報錯) if n>10 disp('親,這么多數(shù)據(jù)量,一定要考慮使用其他的方法哦,例如ARIMA,指數(shù)平滑等') end % 判斷數(shù)據(jù)是否為列向量,如果輸入的是行向量則轉(zhuǎn)置為列向量 if size(x0,1) == 1 x0 = x0'; end if size(year,1) == 1 year = year'; end %% 對一次累加后的數(shù)據(jù)進行準指數(shù)規(guī)律的檢驗(注意,這個檢驗有時候即使能通過,也不一定能保證預(yù)測結(jié)果非常好,例如上面的第三組數(shù)據(jù)) if ERROR == 0 % 如果上述錯誤均沒有發(fā)生時,才能執(zhí)行下面的操作步驟 disp('------------------------------------------------------------') disp('準指數(shù)規(guī)律檢驗') x1 = cumsum(x0); % 生成1-AGO序列,cumsum是累加函數(shù)哦~ 注意:1.0e+03 *0.1740的意思是科學(xué)計數(shù)法,即10^3*0.1740 = 174 rho = x0(2:end) ./ x1(1:end-1) ; % 計算光滑度rho(k) = x0(k)/x1(k-1) % 畫出光滑度的圖形,并畫上0.5的直線,表示臨界值 figure(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,'臨界線') % 在坐標(year(end-1)+0.2,0.55)上添加文本 set(gca,'xtick',year(2:1:end)) % 設(shè)置x軸橫坐標的間隔為1 xlabel('年份'); ylabel('原始數(shù)據(jù)的光滑度'); % 給坐標軸加上標簽 disp(strcat('指標1:光滑比小于0.5的數(shù)據(jù)占比為',num2str(100*sum(rho<0.5)/(n-1)),'%')) disp(strcat('指標2:除去前兩個時期外,光滑比小于0.5的數(shù)據(jù)占比為',num2str(100*sum(rho(3:end)<0.5)/(n-3)),'%')) disp('參考標準:指標1一般要大于60%, 指標2要大于90%,你認為本例數(shù)據(jù)可以通過檢驗嗎?') Judge = input('你認為可以通過準指數(shù)規(guī)律的檢驗嗎?可以通過請輸入1,不能請輸入0:'); if Judge == 0 disp('親,灰色預(yù)測模型不適合你的數(shù)據(jù)哦~ 請考慮其他方法吧 例如ARIMA,指數(shù)平滑等') ERROR = 1; end disp('------------------------------------------------------------') end %% 當(dāng)數(shù)據(jù)量大于4時,我們利用試驗組來選擇使用傳統(tǒng)的GM(1,1)模型、新信息GM(1,1)模型還是新陳代謝GM(1,1)模型; 如果數(shù)據(jù)量等于4,那么我們直接對三種方法求一個平均來進行預(yù)測 if ERROR == 0 % 如果上述錯誤均沒有發(fā)生時,才能執(zhí)行下面的操作步驟 if n > 4 % 數(shù)據(jù)量大于4時,將數(shù)據(jù)分為訓(xùn)練組和試驗組(根據(jù)原數(shù)據(jù)量大小n來取,n為5-7個則取最后兩年為試驗組,n大于7則取最后三年為試驗組) disp('因為原數(shù)據(jù)的期數(shù)大于4,所以我們可以將數(shù)據(jù)組分為訓(xùn)練組和試驗組') % 注意,如果試驗組的個數(shù)只有1個,那么三種模型的結(jié)果完全相同,因此至少要取2個試驗組 if n > 7 test_num = 3; else test_num = 2; end train_x0 = x0(1:end-test_num); % 訓(xùn)練數(shù)據(jù) disp('訓(xùn)練數(shù)據(jù)是: ') disp(mat2str(train_x0')) % mat2str可以將矩陣或者向量轉(zhuǎn)換為字符串顯示, 這里加一撇表示轉(zhuǎn)置,把列向量變成行向量方便觀看 test_x0 = x0(end-test_num+1:end); % 試驗數(shù)據(jù) disp('試驗數(shù)據(jù)是: ') disp(mat2str(test_x0')) % mat2str可以將矩陣或者向量轉(zhuǎn)換為字符串顯示 disp('------------------------------------------------------------') % 使用三種模型對訓(xùn)練數(shù)據(jù)進行訓(xùn)練,返回的result就是往后預(yù)測test_num期的數(shù)據(jù) disp(' ') disp('***下面是傳統(tǒng)的GM(1,1)模型預(yù)測的詳細過程***') result1 = gm11(train_x0, test_num); %使用傳統(tǒng)的GM(1,1)模型對訓(xùn)練數(shù)據(jù),并預(yù)測后test_num期的結(jié)果 disp(' ') disp('***下面是進行新信息的GM(1,1)模型預(yù)測的詳細過程***') result2 = new_gm11(train_x0, test_num); %使用新信息GM(1,1)模型對訓(xùn)練數(shù)據(jù),并預(yù)測后test_num期的結(jié)果 disp(' ') disp('***下面是進行新陳代謝的GM(1,1)模型預(yù)測的詳細過程***') result3 = metabolism_gm11(train_x0, test_num); %使用新陳代謝GM(1,1)模型對訓(xùn)練數(shù)據(jù),并預(yù)測后test_num期的結(jié)果 % 現(xiàn)在比較三種模型對于試驗數(shù)據(jù)的預(yù)測結(jié)果 disp(' ') disp('------------------------------------------------------------') % 繪制對試驗數(shù)據(jù)進行預(yù)測的圖形(對于部分數(shù)據(jù),可能三條直線預(yù)測的結(jié)果非常接近) test_year = year(end-test_num+1:end); % 試驗組對應(yīng)的年份 figure(3) plot(test_year,test_x0,'o-',test_year,result1,'*-',test_year,result2,'+-',test_year,result3,'x-'); grid on; set(gca,'xtick',year(end-test_num+1): 1 :year(end)) % 設(shè)置x軸橫坐標的間隔為1 legend('試驗組的真實數(shù)據(jù)','傳統(tǒng)GM(1,1)預(yù)測結(jié)果','新信息GM(1,1)預(yù)測結(jié)果','新陳代謝GM(1,1)預(yù)測結(jié)果') % 注意:如果lengend擋著了圖形中的直線,那么lengend的位置可以自己手動拖動 xlabel('年份'); ylabel('排污總量'); % 給坐標軸加上標簽 % 計算誤差平方和SSE SSE1 = sum((test_x0-result1).^2); SSE2 = sum((test_x0-result2).^2); SSE3 = sum((test_x0-result3).^2); disp(strcat('傳統(tǒng)GM(1,1)對于試驗組預(yù)測的誤差平方和為',num2str(SSE1))) disp(strcat('新信息GM(1,1)對于試驗組預(yù)測的誤差平方和為',num2str(SSE2))) disp(strcat('新陳代謝GM(1,1)對于試驗組預(yù)測的誤差平方和為',num2str(SSE3))) if SSE1 if SSE1 choose = 1; % SSE1最小,選擇傳統(tǒng)GM(1,1)模型 else choose = 3; % SSE3最小,選擇新陳代謝GM(1,1)模型 end elseif SSE2 choose = 2; % SSE2最小,選擇新信息GM(1,1)模型 else choose = 3; % SSE3最小,選擇新陳代謝GM(1,1)模型 end Model = {'傳統(tǒng)GM(1,1)模型','新信息GM(1,1)模型','新陳代謝GM(1,1)模型'}; disp(strcat('因為',Model(choose),'的誤差平方和最小,所以我們應(yīng)該選擇其進行預(yù)測')) disp('------------------------------------------------------------') %% 選用誤差最小的那個模型進行預(yù)測 predict_num = input('請輸入你要往后面預(yù)測的期數(shù): '); % 計算使用傳統(tǒng)GM模型的結(jié)果,用來得到另外的返回變量:x0_hat, 相對殘差relative_residuals和級比偏差eta [result, x0_hat, relative_residuals, eta] = gm11(x0, predict_num); % 先利用gm11函數(shù)得到對原數(shù)據(jù)擬合的詳細結(jié)果 % % 判斷我們選擇的是哪個模型,如果是2或3,則更新剛剛由模型1計算出來的預(yù)測結(jié)果 if choose == 2 result = new_gm11(x0, predict_num); end if choose == 3 result = metabolism_gm11(x0, predict_num); end %% 輸出使用最佳的模型預(yù)測出來的結(jié)果 disp('------------------------------------------------------------') disp('對原始數(shù)據(jù)的擬合結(jié)果:') for i = 1:n disp(strcat(num2str(year(i)), ' : ',num2str(x0_hat(i)))) end disp(strcat('往后預(yù)測',num2str(predict_num),'期的得到的結(jié)果:')) for i = 1:predict_num disp(strcat(num2str(year(end)+i), ' : ',num2str(result(i)))) end %% 如果只有四期數(shù)據(jù),那么我們就沒必要選擇何種模型進行預(yù)測,直接對三種模型預(yù)測的結(jié)果求一個平均值~ else disp('因為數(shù)據(jù)只有4期,因此我們直接將三種方法的結(jié)果求平均即可~') predict_num = input('請輸入你要往后面預(yù)測的期數(shù): '); disp(' ') disp('***下面是傳統(tǒng)的GM(1,1)模型預(yù)測的詳細過程***') [result1, x0_hat, relative_residuals, eta] = gm11(x0, predict_num); disp(' ') disp('***下面是進行新信息的GM(1,1)模型預(yù)測的詳細過程***') result2 = new_gm11(x0, predict_num); disp(' ') disp('***下面是進行新陳代謝的GM(1,1)模型預(yù)測的詳細過程***') result3 = metabolism_gm11(x0, predict_num); result = (result1+result2+result3)/3; disp('對原始數(shù)據(jù)的擬合結(jié)果:') for i = 1:n disp(strcat(num2str(year(i)), ' : ',num2str(x0_hat(i)))) end disp(strcat('傳統(tǒng)GM(1,1)往后預(yù)測',num2str(predict_num),'期的得到的結(jié)果:')) for i = 1:predict_num disp(strcat(num2str(year(end)+i), ' : ',num2str(result1(i)))) end disp(strcat('新信息GM(1,1)往后預(yù)測',num2str(predict_num),'期的得到的結(jié)果:')) for i = 1:predict_num disp(strcat(num2str(year(end)+i), ' : ',num2str(result2(i)))) end disp(strcat('新陳代謝GM(1,1)往后預(yù)測',num2str(predict_num),'期的得到的結(jié)果:')) for i = 1:predict_num disp(strcat(num2str(year(end)+i), ' : ',num2str(result3(i)))) end disp(strcat('三種方法求平均得到的往后預(yù)測',num2str(predict_num),'期的得到的結(jié)果:')) for i = 1:predict_num disp(strcat(num2str(year(end)+i), ' : ',num2str(result(i)))) end end %% 繪制相對殘差和級比偏差的圖形(注意:因為是對原始數(shù)據(jù)的擬合效果評估,所以三個模型都是一樣的哦~~~) figure(4) subplot(2,1,1) % 繪制子圖(將圖分塊) plot(year(2:end), relative_residuals,'*-'); grid on; % 原數(shù)據(jù)中的各時期和相對殘差 legend('相對殘差'); xlabel('年份'); set(gca,'xtick',year(2:1:end)) % 設(shè)置x軸橫坐標的間隔為1 subplot(2,1,2) plot(year(2:end), eta,'o-'); grid on; % 原數(shù)據(jù)中的各時期和級比偏差 legend('級比偏差'); xlabel('年份'); set(gca,'xtick',year(2:1:end)) % 設(shè)置x軸橫坐標的間隔為1 disp(' ') disp('****下面將輸出對原數(shù)據(jù)擬合的評價結(jié)果***') %% 殘差檢驗 average_relative_residuals = mean(relative_residuals); % 計算平均相對殘差 mean函數(shù)用來均值 disp(strcat('平均相對殘差為',num2str(average_relative_residuals))) if average_relative_residuals<0.1 disp('殘差檢驗的結(jié)果表明:該模型對原數(shù)據(jù)的擬合程度非常不錯') elseif average_relative_residuals<0.2 disp('殘差檢驗的結(jié)果表明:該模型對原數(shù)據(jù)的擬合程度達到一般要求') else disp('殘差檢驗的結(jié)果表明:該模型對原數(shù)據(jù)的擬合程度不太好,建議使用其他模型預(yù)測') end %% 級比偏差檢驗 average_eta = mean(eta); % 計算平均級比偏差 disp(strcat('平均級比偏差為',num2str(average_eta))) if average_eta<0.1 disp('級比偏差檢驗的結(jié)果表明:該模型對原數(shù)據(jù)的擬合程度非常不錯') elseif average_eta<0.2 disp('級比偏差檢驗的結(jié)果表明:該模型對原數(shù)據(jù)的擬合程度達到一般要求') else disp('級比偏差檢驗的結(jié)果表明:該模型對原數(shù)據(jù)的擬合程度不太好,建議使用其他模型預(yù)測') end disp(' ') disp('------------------------------------------------------------') %% 繪制最終的預(yù)測效果圖 figure(5) % 下面繪圖中的符號m:洋紅色 b:藍色 plot(year,x0,'-o', year,x0_hat,'-*m', year(end)+1:year(end)+predict_num,result,'-*b' ); grid on; hold on; plot([year(end),year(end)+1],[x0(end),result(1)],'-*b') legend('原始數(shù)據(jù)','擬合數(shù)據(jù)','預(yù)測數(shù)據(jù)') % 注意:如果lengend擋著了圖形中的直線,那么lengend的位置可以自己手動拖動 set(gca,'xtick',[year(1):1:year(end)+predict_num]) % 設(shè)置x軸橫坐標的間隔為1 xlabel('年份'); ylabel('排污總量'); % 給坐標軸加上標簽 end ?我使用的數(shù)據(jù)是:[71.1 72.4 72.4 72.1 71.4 72. 71.6],得到的結(jié)果是: ? 補充: 在上述的模型的基礎(chǔ)上可以加以改進。在清風(fēng)的課程中,清風(fēng)講到了兩種基于灰色預(yù)測模型的改進: 新信息灰色預(yù)測:將預(yù)測得到的值作為已知的數(shù)據(jù),然后再接著進行預(yù)測。新陳代謝灰色預(yù)測:將預(yù)測得到的值作為已知的數(shù)據(jù),同時刪除之前的第一個值,然后接著進行預(yù)測。 新信息灰色預(yù)測: function [result] = new_gm11(x0, predict_num) % 函數(shù)作用:使用新信息的GM(1,1)模型對數(shù)據(jù)進行預(yù)測 % 輸入變量 % x0:要預(yù)測的原始數(shù)據(jù) % predict_num: 向后預(yù)測的期數(shù) % 輸出變量 % result:預(yù)測值 result = zeros(predict_num,1); % 初始化用來保存預(yù)測值的向量 for i = 1 : predict_num result(i) = gm11(x0, 1); % 將預(yù)測一期的結(jié)果保存到result中 x0 = [x0; result(i)]; % 更新x0向量,此時x0多了新的預(yù)測信息 end end 新陳代謝灰色預(yù)測: function [result] = metabolism_gm11(x0, predict_num) % 函數(shù)作用:使用新陳代謝的GM(1,1)模型對數(shù)據(jù)進行預(yù)測 % 輸入變量 % x0:要預(yù)測的原始數(shù)據(jù) % predict_num: 向后預(yù)測的期數(shù) % 輸出變量 % result:預(yù)測值 result = zeros(predict_num,1); % 初始化用來保存預(yù)測值的向量 for i = 1 : predict_num result(i) = gm11(x0, 1); % 將預(yù)測一期的結(jié)果保存到result中 x0 = [x0(2:end); result(i)]; % 更新x0向量,此時x0多了新的預(yù)測信息,并且刪除了最開始的那個向量 end end 大家在做灰色預(yù)測的時候可以試一下三種預(yù)測效果的好壞,最后選擇一個最好。 柚子快報激活碼778899分享:matlab 預(yù)測篇:灰色預(yù)測 參考閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。