gusucode.com > 《matlab在数学建模中的应用》一书 所有的 源代码 > 第15章/P15-2/gm_1_1.m

    %灰色模型被调用子函数,该子函数命名为gm_1_1.m
function [y,p,e]=gm_1_1(X,k)   
x_orig=X; 
predict=k; 
x=cumsum(x_orig); 
n=length(x_orig); 
%生成灰色函数 
for i=1:(n-1); 
B(i)=-(x(i)+x(i+1))/2; 
end 
B=[B' ones(n-1,1)]; 
for i=1:(n-1); 
y(i)=x_orig(i+1); 
end 
Y=y'; 
au=(inv(B'*B))*(B'*Y); 
coef1=au(2)/au(1); 
coef2=x_orig(1)-coef1; 
coef3=0-au(1); 
costr1=num2str(coef1); 
costr2=num2str(abs(coef2)); 
costr3=num2str(coef3); 
eq=strcat(costr1,'+',costr2,'e^',costr3,'*(t-1))'); 
for t=1:n+predict 
   mcv(t)=coef1+coef2*exp(coef3*(t-1)); 
end 
x_mcv0=diff(mcv); 
x_mcve=[x_orig(1) x_mcv0]; 
x_mcv=diff(mcv(1:end-predict)); 
x_orig_n=x_orig(2:end); 
x_c_error=x_orig_n-x_mcv; 
x_error=mean(abs(x_c_error./x_orig_n)); 
%灰色模型误差的检验 
if x_error>0.2 
   disp('model disqualification!'); 
elseif x_error>0.1 
   disp('model check out'); 
else 
   disp('model is perfect!'); 
end 
e=x_error; 
p=x_mcve(end-predict+1:end);