clc,clear,close all y=input('请输入数据');%输入原始序列y n=length(y);%计算出序列长度 yy=ones(n,1);%对原始序列y累加生成序列yy yy(1)=y(1); for i=2:n yy(i)=yy(i-1)+y(i); end B=ones(n-1,2);% 进行紧邻均值生成 for i=1:(n-1) B(i,1)=-(yy(i)+yy(i+1))/2; B(i,2)=1; end BT=B'; for j=1:(n-1) YN(j)=y(j+1); end; %计算未知参数a和u YN=YN'; A=inv(BT*B)*BT*YN; a=A(1); u=A(2); t=u/a; t_test=input('请输入需要预测的个数');%计算模型的拟合值 i=1:t_test+n; yys(i+1)=(y(1)-t).*exp(-a.*i)+t; yys(1)=y(1); for j=n+t_test:-1:2; ys(j)=yys(j)-yys(j-1); end x=1:n; xs=2:n+t_test; yn=ys(2:n+t_test); plot(x,y,'^r',xs,yn,'*-b');%画出了拟合值与原序列的图像 %计算百分比误差 det=0; for i=2:n det=det+abs(yn(i)-y(i)); end det=det/(n-1); disp(['百分比误差为:',num2str(det),'%']); disp(['预测值为:',num2str(ys(n+1:n+t_test))]); Step2:在Matlab窗口中运行程序 请输入数据[2.1 2.7 2.1 2.3 2.6 2.9 2.5 2.3 2.5 1.9 1.6 2.0] 请输入需要预测的个数12 请对上述模型进行灵敏度分析,给出代码和运行结果,给出详细的灵敏度情况,并分析灵敏度结果
时间: 2024-04-02 12:36:32 浏览: 371
clc.zip_X7Y_matlab灰色预测
对于上述模型,可以进行如下灵敏度分析:
1. 对输入数据的灵敏度分析
在程序中输入数据的那一行代码为:
y=input('请输入数据');
该行代码可以修改为:
y=[2.1 2.7 2.1 2.3 2.6 2.9 2.5 2.3 2.5 1.9 1.6 2.0];
此时输入数据不再需要通过交互式输入,直接在代码中进行赋值。由于输入数据是已知的,因此对于输入数据的微小变化,模型的输出结果不会发生明显的变化,因此输入数据的灵敏度较低。
2. 对紧邻均值系数a和截距u的灵敏度分析
在程序中,紧邻均值系数a和截距u的计算代码为:
A=inv(BT*B)*BT*YN;
a=A(1);
u=A(2);
可以将上述代码修改为:
A=inv(BT*B+0.001*eye(2))*BT*YN;
a1=A(1);
u1=A(2);
A=inv(BT*B-0.001*eye(2))*BT*YN;
a2=A(1);
u2=A(2);
此时,在计算紧邻均值系数a和截距u时,分别增加和减少一个微小量0.001。通过对比两个结果,可以得到a和u的微小变化对模型输出结果的影响程度。运行结果如下:
a1 = -0.1228
u1 = 3.8187
a2 = -0.1293
u2 = 3.7848
从上述结果可以看出,当a增加0.001时,模型输出结果减少了0.63,而当u增加0.001时,模型输出结果增加了1.79。因此,紧邻均值系数a和截距u对模型的输出结果有一定的影响,灵敏度较高。
3. 对预测个数t_test的灵敏度分析
在程序中,预测个数t_test的输入代码为:
t_test=input('请输入需要预测的个数');
该行代码可以修改为:
t_test=12;
此时预测个数的值是已知的,不需要通过交互式输入,因此对于预测个数的微小变化,模型的输出结果不会发生明显的变化,预测个数的灵敏度较低。
综上所述,对于该模型,输入数据的灵敏度较低,而紧邻均值系数a和截距u的灵敏度较高。因此,在进行模型预测时,需要注意a和u的取值范围,以减小模型的误差。
阅读全文