Schuamcher 发表于 2011-8-2 12:46

如何改善這個程式效率

各位前輩
      我的程式碼運作效率很慢,我如何改寫為陣列式寫法呢,謝謝大家幫忙
      function =Residual(Data,Lag)
=size(Data,1) ;
= n1 -Lag;
= n1 -Lag-1;
= n1 -2*Lag;

One = zeros(n1,1);
One = One +1 ;
Estimates = zeros(n2,6);
Residual =zeros(n4,6);
ResidualStas = zeros(n4,8);
for i= 1 : (n1 - Lag)
    y = Data(i:i+Lag,1);
    x = ;
    = regress(y,x);
    Estimates(i,1) = b(1,1);
    Estimates(i,2) = b(2,1);
    y = Data(i:i+Lag,2);
    x = ;
    = regress(y,x);
    Estimates(i,3) = b(1,1);
    Estimates(i,4) = b(2,1);
    if i > 1
       Residual(i-1,1) = Data(i,1) - (Estimates(i-1,1) + Estimates(i-1,2)* Data(i,2));
       Residual(i-1,2) = Data(i,2) - (Estimates(i-1,3) + Estimates(i-1,4)* Data(i,1));
    end
    if i >= Lag+1
       ResidualStas(i - Lag ,1) =Residual(i-1,1);
       ResidualStas(i - Lag ,2) =mean(Residual(i-Lag:i-1,1));
       ResidualStas(i - Lag ,3) =std(Residual(i-Lag:i-1,1));
       ResidualStas(i - Lag ,4) =Residual(i-1,2)
       ResidualStas(i - Lag ,5) =mean(Residual(i-Lag:i-1,2));
       ResidualStas(i - Lag ,6) =std(Residual(i-Lag:i-1,2));
       ResidualStas(i - Lag ,7) =Estimates(i-1,2);
       ResidualStas(i - Lag ,8) =Estimates(i-1,4);
    end
   
end
Residual = ResidualStas;

ChaChing 发表于 2011-8-3 00:54

没空试! LZ看看
1.[原创] 提高matlab运行速度的一点心得 http://forum.vibunion.com/thread-25305-1-1.html
[原创] 提高matlab运行速度的一点心得(之二) http://forum.vibunion.com/thread-26449-1-1.html
[原创]提高matlab运行速度和节省空间的一点心得(之三) http://forum.vibunion.com/thread-33199-1-1.html
[原创]关于Profiler的介绍和使用心得 http://forum.vibunion.com/thread-32293-1-1.html
matlab 的内存如何管理 http://forum.vibunion.com/thread-35912-1-1.html
2.matlab矢量化编程技巧集锦 http://forum.vibunion.com/thread-41583-1-1.html

tenglang 发表于 2011-8-4 12:27

回复 1 # Schuamcher 的帖子

能否提供程序运行所需的数据和参数

Schuamcher 发表于 2011-8-4 12:50

回复 2 # ChaChing 的帖子

謝謝chaching哥的幫忙,但是功力太低還是想不出解法,有那位高手可以幫我矢量化這個程式嗎,謝謝

Schuamcher 发表于 2011-8-9 15:45

回复 3 # tenglang 的帖子

對不起忘了提供數據,假設數據如下,因為實際數據為十多萬列
1,25
2,26
3,27
4,28
5,29
6,30
7,31
8,32
9,33
10,34
11,35
12,36
13,37
14,38
15,39
16,40
17,41
18,42
19,43
20,44
21,45
22,46
23,47
24,48
25,49
26,50
27,51
28,52

Schuamcher 发表于 2011-8-15 10:37

回复 5 # Schuamcher 的帖子

對不起請問一下有誰可以幫幫我解決一下,真的找不到方法了,謝謝

ChaChing 发表于 2011-8-15 16:08

Schuamcher 发表于 2011-8-9 15:45 static/image/common/back.gif
回复 3 # tenglang 的帖子

對不起忘了提供數據,假設數據如下,因為實際數據為十多萬列


实际数据为十多万列? 也就是n1为十多万, 一个十多万loop本来就需花时间吧! 要快就得想法去掉那个loop

个人水平/时间有限, 实在看不清楚LZ程序的逻辑, 也不知道是否可去掉
个人以为没别人比LZ更清楚程序的逻辑, 应试著看看! 或待高人路过

Schuamcher 发表于 2011-8-26 08:54

回复 7 # ChaChing 的帖子

覺得很難去搞定loop的問題,所以請教各位高手,謝謝
页: [1]
查看完整版本: 如何改善這個程式效率