声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1854|回复: 7

[综合讨论] MATLAB 代码的详细解释问题

[复制链接]
发表于 2013-10-28 09:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
如下的两个matlab程序代码,本人能看懂一小部分,搞不清楚它的意思,希望有人帮忙解释一下每一句代码的详细解释,不胜感激。
  1. clear all
  2. data=load('b0.txt');   
  3. %A=data(:,[4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96]);
  4. A=data(100:300,[2:2:48]);
  5. m1=200;
  6. m2=m1+1;
  7. for i=1:m2
  8.   for j=1:24
  9.     X((i-1)*24+j,1)=A(i,j);
  10.    end
  11. end
  12. roll=X;%取X数据
  13. len=m1*24;
  14. oldroll=roll;
  15. AverRoll=roll-mean(roll);
  16. roll=AverRoll;
  17. mtbp=6;
  18. taow=mtbp;
  19. deltaT=0.5;
  20. tao=6;
  21. taowdivtao=round(taow/tao);
  22. d=2;%taowdivtao+1;
  23. prestep=24;
  24. N = length(roll)-prestep;
  25. MaxStep = 24;
  26. Step = 1 : 1 : MaxStep;
  27. [PredictedData] = FunctionChaosPredict(roll(1:N),N,mtbp,deltaT,tao,d,MaxStep);
  28. subplot(2,1,1);plot(roll(1:len+MaxStep)+mean(oldroll));
  29. hold on;
  30. subplot(2,1,1);
  31. plot(Step + N,PredictedData+mean(oldroll),'r:');
  32. hold on;
  33. subplot(2,1,2);
  34. plot(Step + N,PredictedData+mean(oldroll),'r:');
  35. hold on;
  36. subplot(2,1,2);
  37. plot(Step + N,oldroll(Step + N),'b-');
复制代码
  1. %AOLMM多步预测函数
  2. function [FChaosPredict] = FunctionChaosPredict(Data,N,mtbp,deltaT,tao,d,MaxStep)
  3. %Data是一维信号时间序列,N是信号数据长度,mtbp,deltaT,tao,d分别是重构相空间的平均时间序列、采样周期、时延及嵌入维

  4. roll=Data;%取横摇数据
  5. M = N - (d - 1)*tao;
  6. for i = 1 : M
  7.     for j = 1 : d
  8.         MatrixX(i,j) = roll(i + (j - 1)*tao);
  9.     end
  10. end

  11. %计算相空间中第M点与各点的距离
  12. for j = 1 : (M - 1)
  13.          Dis(j) = norm(MatrixX(M,:) - MatrixX(j,:),2);
  14. end
  15. %排序计算相空间中第M点的(m+1)个参考邻近点
  16. for i = 1 : (d + 1)
  17.     NearDis(i) = Dis(i);
  18.     NearPos(i) = i;
  19. end
  20. for i = (d + 2) : (M - mtbp)
  21.     for j = 1 : (d + 1)
  22.         if (abs(i-j)>mtbp) %& abs(i-j)<10*mtbp
  23.         if(Dis(i) < NearDis(j))
  24.             NearDis(j) = Dis(i);
  25.             NearPos(j) = i;
  26.             break;
  27.         end
  28.         end
  29.     end
  30. end
  31. SortedDis = sort(NearDis);
  32. MinDis = SortedDis(1);
  33. %计算第M点的(m+1)个参考邻近点的权P[i]
  34. SumP = 0;
  35. for i = 1 : (d + 1)
  36.     P(i) = exp(-NearDis(i)/MinDis);
  37.     SumP = SumP + P(i);
  38. end
  39. P = P/SumP;
  40. %用最小二乘法计算a[],b[]
  41. for step=1:1:MaxStep
  42.     aCoe1 = 0;
  43.     aCoe2 = d;
  44.     bCoe1 = 0;
  45.     bCoe2 = 0;
  46.     e = 0;
  47.     f = 0;
  48.     for i = 1 : (d + 1)
  49.         aCoe1 = aCoe1 + P(i)*sum(MatrixX(NearPos(i),:));
  50.         bCoe1 = bCoe1 + P(i)*(MatrixX(NearPos(i),:)*MatrixX(NearPos(i),:)');
  51.         e = e + P(i)*(MatrixX(NearPos(i) + step,:)*MatrixX(NearPos(i),:)');
  52.         f = f + P(i)*sum(MatrixX(NearPos(i) + step,:));
  53.     end
  54.     bCoe2 = aCoe1;
  55.     CoeMatrix = [aCoe1,bCoe1;aCoe2,bCoe2];
  56.     ResultMatrix = [e;f];
  57.     abResult = pinv(CoeMatrix)*ResultMatrix;
  58.     a = abResult(1);
  59.     b = abResult(2);
  60. for j = 1 : d
  61. %     MatrixX(M + step,j) = a + b*MatrixX(M,j); %以历史上相近点的演化规律作为中心点的演化规律以中心点为基准进行预报
  62.    
  63.     MatrixX(M + step,j) = 0;
  64.     for i = 1 : (d + 1)
  65.         MatrixX(M + step,j) = MatrixX(M + step,j) + P(i)*(a + b*MatrixX(NearPos(i),j)); %以历史上相近点的演化加权和直接作为中心点的演化点进行预报
  66.     end
  67. end
  68. %误差修正
  69.     if M-tao+step+(d-1)*tao < N+1
  70.         for j=1:d-1
  71.             err(j)=MatrixX(M + step,j)-roll(M+step+(j-1)*tao);
  72.         end
  73.         ppp=1:d-1;ttt=err;neterr=newrbe(ppp,ttt);xxx=2:d;errp=sim(neterr,xxx);
  74.         PredictedData(step) = MatrixX(M + step,d) - errp(d-1);
  75.         roll(N+step)=PredictedData(step);
  76.     else    PredictedData(step) = MatrixX(M + step,d);
  77.     end%        roll(N+k)=PredictedData(k);
  78. FChaosPredict(step) = PredictedData(step);
  79. % FChaosPredict(step) = MatrixX(M + step,d);
  80. end
复制代码


回复
分享到:

使用道具 举报

发表于 2013-11-7 14:48 | 显示全部楼层
每一句代码的详细解释

这要求有点难...
发表于 2013-11-8 12:05 | 显示全部楼层
这个全部解释有点困难吧,我学习别人程序就是一边运行,一边学习

点评

赞成: 5.0
赞成: 5
me too  发表于 2013-11-8 14:10

评分

1

查看全部评分

 楼主| 发表于 2013-11-8 17:10 | 显示全部楼层
 楼主| 发表于 2013-11-8 17:10 | 显示全部楼层
muzhicai 发表于 2013-11-8 12:05
这个全部解释有点困难吧,我学习别人程序就是一边运行,一边学习

您的方法不错,支持,学习中。
发表于 2013-12-7 10:34 | 显示全部楼层
原来是小飞 发表于 2013-11-8 17:10
您的方法不错,支持,学习中。

这确实是个好办法,其实学习Matlab编程,关键是调试里面的Bug,只是最重要的。遇到bug,自己耐心调试,不会的可以百度之类的……我之前学习编程,就是慢慢的调试运行!!
发表于 2013-12-8 21:04 | 显示全部楼层
学习学习  好方法
发表于 2013-12-8 22:06 | 显示全部楼层
嗯,在学习之中。。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-28 23:50 , Processed in 0.056850 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表