📄 原始数据的光滑处理.txt
字号:
%这种方法稍微好一些
clear
x=input('请输入数据');
n=length(x);
for i=2:n-1
y(i)=(x(i)*2+x(i-1)+x(i+1))/4;
end
y(1)=x(1);y(n)=x(n);
n=length(y);
yy=ones(n,1); %这里是说yy是一个n行1列的列阵
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
%好,到这里b矩阵建好了
BT=B';%这个应该就是B的转制吧
for j=1:n-1
YN(j)=y(j+1);%你前面也没有定义过yn是个什么东西,是否就是说只要出现yn(j)的形式,那么就默认yn为向量
end
YN=YN';
A=inv(BT*B)*BT*YN;%奥,原来求逆运算是使用inv这样一个函数
a=A(1);
u=A(2);
%这样系数就出来了
t=u/a;
t_test=input('请输入需要预测个数:');
i=1:t_test+n-1;
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
ys
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%对数变换法-----没用,预测值比原来没有光滑处理时还要大呢
clear
x=input('请输入数据');
n=length(x);
for i=1:n
y(i)=log(x(i));
end
n=length(y);
yy=ones(n,1); %这里是说yy是一个n行1列的列阵
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
%好,到这里b矩阵建好了
BT=B';%这个应该就是B的转制吧
for j=1:n-1
YN(j)=y(j+1);%你前面也没有定义过yn是个什么东西,是否就是说只要出现yn(j)的形式,那么就默认yn为向量
end
YN=YN';
A=inv(BT*B)*BT*YN;%奥,原来求逆运算是使用inv这样一个函数
a=A(1);
u=A(2);
%这样系数就出来了
t=u/a;
t_test=input('请输入需要预测个数:');
i=1:t_test+n-1;
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
for i=1:(n+t_test)
gg(i)=exp(ys(i));
end
gg
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%开n次方变换法,这个方法也不行
clear
x=input('请输入数据');
y=x.^0.5;
n=length(y);
yy=ones(n,1); %这里是说yy是一个n行1列的列阵
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
%好,到这里b矩阵建好了
BT=B';%这个应该就是B的转制吧
for j=1:n-1
YN(j)=y(j+1);%你前面也没有定义过yn是个什么东西,是否就是说只要出现yn(j)的形式,那么就默认yn为向量
end
YN=YN';
A=inv(BT*B)*BT*YN;%奥,原来求逆运算是使用inv这样一个函数
a=A(1);
u=A(2);
%这样系数就出来了
t=u/a;
t_test=input('请输入需要预测个数:');
i=1:t_test+n-1;
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
gg=ys.^2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -