声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1716|回复: 7

[编程技巧] 如何改善這個程式效率

[复制链接]
发表于 2011-8-2 12:46 | 显示全部楼层 |阅读模式

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

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

x
各位前輩
        我的程式碼運作效率很慢,我如何改寫為陣列式寫法呢,謝謝大家幫忙
        function [Residual]=Residual(Data,Lag)
[n1]=size(Data,1) ;
[n2]= n1 -Lag;
[n3]= n1 -Lag-1;
[n4]= 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 = [One(i:i+Lag,1)   Data(i:i+Lag,2)];
    [b,bint] = regress(y,x);
    Estimates(i,1) = b(1,1);
    Estimates(i,2) = b(2,1);
    y = Data(i:i+Lag,2);
    x = [One(i:i+Lag,1)   Data(i:i+Lag,1)];
    [b,bint] = 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;
回复
分享到:

使用道具 举报

发表于 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
发表于 2011-8-4 12:27 | 显示全部楼层
回复 1 # Schuamcher 的帖子

能否提供程序运行所需的数据和参数
 楼主| 发表于 2011-8-4 12:50 | 显示全部楼层
回复 2 # ChaChing 的帖子

謝謝chaching哥的幫忙,但是功力太低還是想不出解法,有那位高手可以幫我矢量化這個程式嗎,謝謝
 楼主| 发表于 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
 楼主| 发表于 2011-8-15 10:37 | 显示全部楼层
回复 5 # Schuamcher 的帖子

對不起請問一下有誰可以幫幫我解決一下,真的找不到方法了,謝謝
发表于 2011-8-15 16:08 | 显示全部楼层

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

个人水平/时间有限, 实在看不清楚LZ程序的逻辑, 也不知道是否可去掉
个人以为没别人比LZ更清楚程序的逻辑, 应试著看看! 或待高人路过
 楼主| 发表于 2011-8-26 08:54 | 显示全部楼层
回复 7 # ChaChing 的帖子

覺得很難去搞定loop的問題,所以請教各位高手,謝謝
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-16 05:38 , Processed in 0.067934 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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