我写的matlab程序出错了,哪位大神 帮忙看下?
X0=[1387.491534.211864.142092.632275.492463.542822.61];functionGM1_1(X0)%formatlong;[...
X0=[1387.491534.211864.142092.632275.492463.542822.61];
function GM1_1(X0)
%format long ;
[m,n]=size(X0);
X1=cumsum(X0); %累加
X2=[];
for i=1:n-1
X2(i,:)=X1(i)+X1(i+1);
end
B=-0.5.*X2 ;
t=ones(n-1,1);
B=[B,t] ; % 求B矩阵
YN=X0(2:end) ;
P_t=YN./X1(1:(length(X0)-1)) %对原始数据序列X0进行准光滑性检验,
%序列x0的光滑比P(t)=X0(t)/X1(t-1)
A=inv(B.'*B)*B.'*YN.' ;
a=A(1)
u=A(2)
c=u/a ;
b=X0(1)-c ;
X=[num2str(b),'exp','(',num2str(-a),'k',')',num2str(c)];
strcat('X(k+1)=',X)
%syms k;
for t=1:length(X0)
k(1,t)=t-1;
end
k
Y_k_1=b*exp(-a*k)+c;
for j=1:length(k)-1
Y(1,j)=Y_k_1(j+1)-Y_k_1(j);
end
XY=[Y_k_1(1),Y] %预测值
CA=abs(XY-X0) ; %残差数列Theta=CA
%残差检验 绝对误差序列
XD_Theta= CA ./ X0 %残差检验 相对误差序列
AV=mean(CA); % 残差数列平均值
R_k=(min(Theta)+0.5*max(Theta))./(Theta+0.5*max(Theta)) ;% P=0.5
R=sum(R_k)/length(R_k) %关联度
Temp0=(CA-AV).^2 ;
Temp1=sum(Temp0)/length(CA);
S2=sqrt(Temp1) ; %绝对误差序列的标准差
%----------
AV_0=mean(X0); % 原始序列平均值
Temp_0=(X0-AV_0).^2 ;
Temp_1=sum(Temp_0)/length(CA);
S1=sqrt(Temp_1) ; %原始序列的标准差
TempC=S2/S1*100; %方差比
C=strcat(num2str(TempC),'%') %后验差检验 %方差比
%----------
SS=0.675*S1 ;
Delta=abs(CA-AV) ;
TempN=find(Delta<=SS);
N1=length(TempN);
N2=length(CA);
TempP=N1/N2*100;
P=strcat(num2str(TempP),'%') %后验差检验 %计算小误差概率 展开
function GM1_1(X0)
%format long ;
[m,n]=size(X0);
X1=cumsum(X0); %累加
X2=[];
for i=1:n-1
X2(i,:)=X1(i)+X1(i+1);
end
B=-0.5.*X2 ;
t=ones(n-1,1);
B=[B,t] ; % 求B矩阵
YN=X0(2:end) ;
P_t=YN./X1(1:(length(X0)-1)) %对原始数据序列X0进行准光滑性检验,
%序列x0的光滑比P(t)=X0(t)/X1(t-1)
A=inv(B.'*B)*B.'*YN.' ;
a=A(1)
u=A(2)
c=u/a ;
b=X0(1)-c ;
X=[num2str(b),'exp','(',num2str(-a),'k',')',num2str(c)];
strcat('X(k+1)=',X)
%syms k;
for t=1:length(X0)
k(1,t)=t-1;
end
k
Y_k_1=b*exp(-a*k)+c;
for j=1:length(k)-1
Y(1,j)=Y_k_1(j+1)-Y_k_1(j);
end
XY=[Y_k_1(1),Y] %预测值
CA=abs(XY-X0) ; %残差数列Theta=CA
%残差检验 绝对误差序列
XD_Theta= CA ./ X0 %残差检验 相对误差序列
AV=mean(CA); % 残差数列平均值
R_k=(min(Theta)+0.5*max(Theta))./(Theta+0.5*max(Theta)) ;% P=0.5
R=sum(R_k)/length(R_k) %关联度
Temp0=(CA-AV).^2 ;
Temp1=sum(Temp0)/length(CA);
S2=sqrt(Temp1) ; %绝对误差序列的标准差
%----------
AV_0=mean(X0); % 原始序列平均值
Temp_0=(X0-AV_0).^2 ;
Temp_1=sum(Temp_0)/length(CA);
S1=sqrt(Temp_1) ; %原始序列的标准差
TempC=S2/S1*100; %方差比
C=strcat(num2str(TempC),'%') %后验差检验 %方差比
%----------
SS=0.675*S1 ;
Delta=abs(CA-AV) ;
TempN=find(Delta<=SS);
N1=length(TempN);
N2=length(CA);
TempP=N1/N2*100;
P=strcat(num2str(TempP),'%') %后验差检验 %计算小误差概率 展开
2个回答
展开全部
这程序是你写的吗?
如果是你写的不至于这么简单的错误查不出吧。
主要问题:
1、调用的数据X0写的太混乱,各项数据都连到一起了,应为
X0=[1387.49 1534.21 1864.14 2092.63 2275.49 2463.54 2822.61];
GM1_1(X0)
2、下面这一行:
XD_Theta= CA ./ X0 %残差检验 相对误差序列
怀疑变量XD_Theta应为Theta,因为前者定义却未使用,后者使用了但没有定义。
改完这两点之后,程序可以运行到最后,至于结果是否正确,那是算法的问题了。
如果是你写的不至于这么简单的错误查不出吧。
主要问题:
1、调用的数据X0写的太混乱,各项数据都连到一起了,应为
X0=[1387.49 1534.21 1864.14 2092.63 2275.49 2463.54 2822.61];
GM1_1(X0)
2、下面这一行:
XD_Theta= CA ./ X0 %残差检验 相对误差序列
怀疑变量XD_Theta应为Theta,因为前者定义却未使用,后者使用了但没有定义。
改完这两点之后,程序可以运行到最后,至于结果是否正确,那是算法的问题了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询