?? functionchaospredict.asv
字號:
%AOLMM多步預測函數
function [FChaosPredict] = FunctionChaosPredict(Data,N,mtbp,deltaT,tao,d,MaxStep)
%Data是一維信號時間序列,N是信號數據長度,mtbp,deltaT,tao,d分別是重構相空間的平均時間序列、采樣周期、時延及嵌入維
%第一段:取橫搖數據,重構相空間
%MatrixX是M行d列的矩陣,是相空間矩陣的轉置
roll=Data;
M = N - (d - 1)*tao;
for i = 1 : M
for j = 1 : d
MatrixX(i,j) = roll(i + (j - 1)*tao);
end
end
%第二段:尋找臨近點,并依據各臨近點到中心點的距離為各點賦值
%1、計算相空間中第M點與各點的歐式距離
for j = 1 : (M - 1)
Dis(j) = norm(MatrixX(M,:) - MatrixX(j,:),2);
end
%2、排序計算相空間中第M點的(m+1)個參考鄰近點
%這段代碼的具體原理是:
%第一個for循環將相空間中離中心點最遠的d+1個點與中心點的距離賦給neardis向量,
%這些距離通常較大,并將這些點的序號賦給nearpos序列
for i = 1 : (d + 1)
NearDis(i) = Dis(i);
NearPos(i) = i;
end
%將與中心點更近的點距離與以上neardis距離進行對比,將更小的距離賦給neardis.
%這個for循環的結果是,將距離最小的d+1各點賦給neardis,并記錄序號nearpos
for i = (d + 2) : (M - mtbp)
for j = 1 : (d + 1)
if (abs(i-j)>mtbp) %& abs(i-j)<10*mtbp
if(Dis(i) < NearDis(j))
NearDis(j) = Dis(i);
NearPos(j) = i;
break;
end
end
end
end
SortedDis = sort(NearDis);%對neardis序列進行排序,由小到大
MinDis = SortedDis(1);
%第三段:計算第M點的(m+1)個參考鄰近點的權P[i]
SumP = 0;
for i = 1 : (d + 1)
P(i) = exp(-NearDis(i)/MinDis);
SumP = SumP + P(i);
end
P = P/SumP;
%第四段:用最小二乘法計算a[],b[]
for step=1:1:MaxStep
aCoe1 = 0;
aCoe2 = d;
bCoe1 = 0;
bCoe2 = 0;
e = 0;
f = 0;
for i = 1 : (d + 1)
aCoe1 = aCoe1 + P(i)*sum(MatrixX(NearPos(i),:));
bCoe1 = bCoe1 + P(i)*(MatrixX(NearPos(i),:)*MatrixX(NearPos(i),:)');
e = e + P(i)*(MatrixX(NearPos(i) + step,:)*MatrixX(NearPos(i),:)');
f = f + P(i)*sum(MatrixX(NearPos(i) + step,:));
end
bCoe2 = aCoe1;
CoeMatrix = [aCoe1,bCoe1;aCoe2,bCoe2];
ResultMatrix = [e;f];
abResult = pinv(CoeMatrix)*ResultMatrix;
a = abResult(1);
b = abResult(2);
for j = 1 : d
% MatrixX(M + step,j) = a + b*MatrixX(M,j); %以歷史上相近點的演化規律作為中心點的演化規律以中心點為基準進行預報
MatrixX(M + step,j) = 0;
for i = 1 : (d + 1)
MatrixX(M + step,j) = MatrixX(M + step,j) + P(i)*(a + b*MatrixX(NearPos(i),j)); %以歷史上相近點的演化加權和直接作為中心點的演化點進行預報
end
end
%誤差修正
if M-tao+step+(d-1)*tao < N+1
for j=1:d-1
err(j)=MatrixX(M + step,j)-roll(M+step+(j-1)*tao);
end
ppp=1:d-1;ttt=err;neterr=newrbe(ppp,ttt);xxx=2:d;errp=sim(neterr,xxx);
PredictedData(step) = MatrixX(M + step,d) - errp(d-1);
roll(N+step)=PredictedData(step);
else PredictedData(step) = MatrixX(M + step,d);
end% roll(N+k)=PredictedData(k);
FChaosPredict(step) = PredictedData(step);
% FChaosPredict(step) = MatrixX(M + step,d);
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -