matlab中的元胞数组
元胞数组(Cell Array)将类型不同的相关数据集成到一个单一的变量中,使得大量相关数据的引用和处理变得简单方便。cell元胞数组,存储不同类型的数据。
1.元胞数组的创建
示例1
A={[1,2,3],ones(3),'matlab'}
%%%%%结果显示%%%%%%%
A =
1×3 cell 数组
[1×3 double] [3×3 double] 'matlab'
示例2
B=cell(1,3)
%%%%%%%%结果显示%%%%%%%
B =
1×3 cell 数组
[] [] []
2.元胞数组的赋值
%%
C(1,1)={'matlab'};
C(1,2)={[1 2 3;4 5 6;]};
C(1,3)={[]};
C(1,4)={3+2i};
%%%%%%%%%结果展示%%%%%%%%%%
C =
1×4 cell 数组
'matlab' [2×3 double] [] [3.0000 + 2.0000i]
3.元胞数组的索引
注意C()结果是元胞数组
和C{}结果是元素 的区别
>> C(1)
ans =
cell
'matlab'
>> C{1}
ans =
matlab
>> C(2)
ans =
cell
[2×3 double]
>> C{2}
ans =
1 2 3
4 5 6
4.元胞数组的删除
元胞数组删除操作区别就在于{}和()
a={1,2,3};
a{1}=[]; %并不能删除第一个cell单元,只是变成空值
a(1)=[]; %删除第一个单元
a(:)=[]; %一次性删除所有cell单元
灰色预测模型
原始序列:X(0)
累加序列:X(1)
由累加序列得出滑动平均,进而构建B,求a,u
利用matlab求解的程序(当然用excel也是可以的)
%%
% 本程序主要用来计算根据灰色理论建立的模型的预测值。
% 应用的数学模型是 GM(1,1)。
% 原始数据的处理方法是一次累加法。
y=input('请输入数据 ');
n=length(y); %%y是原始序列
yy=ones(n,1); %%yy矩阵初始化
yy(1)=y(1);
for i=2:n
yy(i)=yy(i-1)+y(i); %%构建yy为累加序列
end
B=ones(n-1,2);
for i=1:(n-1)
B(i,1)=-(yy(i)+yy(i+1))/2; %%构建B矩阵(滑动平均)
B(i,2)=1;
end
BT=B'; %%B的转置
for j=1:n-1
YN(j)=y(j+1); %%构建Yn矩阵/向量
end
YN=YN';
A=inv(BT*B)*BT*YN;
a=A(1);
u=A(2); %%解出a,u
t=u/a; %%令t=u/a
i=1:n+2;
yys(i+1)=(y(1)-t).*exp(-a.*i)+t; %表达式
yys(1)=y(1);
for j=n+2:-1:2
ys(j)=yys(j)-yys(j-1); %进行还原得到ys
end
x=1:n;
xs=2:n+2;
yn=ys(2:n+2);
plot(x,y,'^r',xs,yn,'*-b'); %原始数据和预测数据
都画入图内进行对比比较
精度计算
%%
%%%%%%%%%%%%%%%%%计算该方法的精度%%%%%%%%%%%%%%%%%%%
sum1=0;
sumpe=0;
for i=1:n
sumpe=sumpe+y(i);
end
pe=sumpe/n;
for i=1:n;
sum1=sum1+(y(i)-pe).^2;
end
s1=sqrt(sum1/n);
sumce=0;
for i=2:n
sumce=sumce+(y(i)-yn(i));
end
ce=sumce/(n-1);
sum2=0;
for i=2:n;
sum2=sum2+(y(i)-yn(i)-ce).^2;
end
s2=sqrt(sum2/(n-1));
c=(s2)/(s1);
disp(['后验差比值为:',num2str(c)]);
if c<0.35
disp('系统预测精度好')
else if c<0.5
disp('系统预测精度合格')
else if c<0.65
disp('系统预测精度勉强')
else
disp('系统预测精度不合格')
end
end
end
disp(['下个拟合值为 ',num2str(ys(n+1))]);
disp(['再下个拟合值为',num2str(ys(n+2))]);