24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1895  |  回复: 7

s20090281

银虫 (小有名气)

[求助] 缩短程序运行时间的方法

CODE:
function [out]=fitness(in)
        a1=in(1)   
        a2=in(2)   
        a3=in(3)
         a4=in(4)   
         b1=in(5)
         u=load('C:\测试记录控制.txt');u1=u(2:399);                          %调用数据进行下面的饮运算
          y=load('C:\测试记录反馈.txt');y1=y(2:400);
          for k=3:399
                 f=[y(k)-a1*y1(k-1)-a2*y1(k-2)-a3*y1(k-3)-b1*u1(k-1)]^2        %求出各级数据的平方和并逐渐相加得到一组对对应变量的适应度        
             Msum(k)=c
           end
out=Msum(:,k);                %输出适应度

我想问问大家可不可以帮我把这段程序的运行时间缩短一些,
我用profiler看吧一下,主要是这两句被调用了两千多次,用了150多秒
u=load('C:\测试记录控制.txt');u1=u(2:399);                        
y=load('C:\测试记录反馈.txt');y1=y(2:400);
请大家帮我想想办法
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

信彼南山

木虫 (著名写手)

【答案】应助回帖


s20090281(金币+3): 2011-09-22 20:02:04
xiegangmai(金币+1): 谢谢应助! 2011-09-22 22:04:40
很明显么,不要在循环中使用读写文件的指令
把这个指令放在你这个函数以外就是了
2楼2011-09-22 19:05:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

s20090281

银虫 (小有名气)

引用回帖:
2楼: Originally posted by 信彼南山 at 2011-09-22 19:05:53:
很明显么,不要在循环中使用读写文件的指令
把这个指令放在你这个函数以外就是了

要不你就给我举个例子,我数实在是愚笨。可是我这个函数就是要求算300多次的和,那如果不放这怎么求啊?
3楼2011-09-22 20:01:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

信彼南山

木虫 (著名写手)

【答案】应助回帖


s20090281(金币+7): 2011-09-22 22:15:12
xiegangmai(金币+1): 谢谢应助! 2011-09-22 22:34:43
CODE:
   u=load('C:\测试记录控制.txt');u1=u(2:399);                          %调用数据进行下面的饮运算
          y=load('C:\测试记录反馈.txt');y1=y(2:400);

function [out]=fitness(in,y,u)
        a1=in(1)   
        a2=in(2)   
        a3=in(3)
         a4=in(4)   
         b1=in(5)
                for k=3:399
                 f=[y(k)-a1*y1(k-1)-a2*y1(k-2)-a3*y1(k-3)-b1*u1(k-1)]^2        %求出各级数据的平方和并逐渐相加得到一组对对应变量的适应度        
             Msum(k)=c
           end
out=Msum(:,k);                %输出适应度

这样不就完了,不把那个放你的函数里面
其实,你这个程序完全没有比较用子函数调用,直接在一个文件里面多一个循环就是了么
4楼2011-09-22 22:11:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

信彼南山

木虫 (著名写手)

说实话,有教你怎么改的这功夫程序我都编完八遍了
5楼2011-09-22 22:12:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

s20090281

银虫 (小有名气)

引用回帖:
4楼: Originally posted by 信彼南山 at 2011-09-22 22:11:04:
[code]
   u=load('C:\测试记录控制.txt');u1=u(2:399);                          %调用数据进行下面的饮运算
          y=load('C:\测试记录反馈.txt');y1=y(2:400);

function [out]=fitness(in,y,u)
    ...

恩,你讲的很有道理,主要是我编程的时候上面计算完,下面的x要改变,改变了之后还要用这个函数计算,在这我就不会弄了,只好弄个函数调用了,呵呵,谢谢你的解答。
6楼2011-09-22 22:14:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

s20090281

银虫 (小有名气)

引用回帖:
4楼: Originally posted by 信彼南山 at 2011-09-22 22:11:04:
[code]
   u=load('C:\测试记录控制.txt');u1=u(2:399);                          %调用数据进行下面的饮运算
          y=load('C:\测试记录反馈.txt');y1=y(2:400);

function [out]=fitness(in,y,u)
    ...

可是这样写是不对的,会出现错误的
??? Error: File: myfun.m Line: 3 Column: 1
Function definitions are not permitted at the prompt or in scripts.

Error in ==> myPSO at 12
    fitness(i)=myfun(pop(i,);          %通过调用myfun计算适应度大小
7楼2011-09-22 22:18:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

s20090281

银虫 (小有名气)

引用回帖:
5楼: Originally posted by 信彼南山 at 2011-09-22 22:12:36:
说实话,有教你怎么改的这功夫程序我都编完八遍了

那你教教我怎么编程吧,从何学起,我只是以前学过matlab但是从来没用来编程这是第三个程序吧,还是参考别人的做的。我觉得你是个高手教我几招吧,我也好好修炼修炼
8楼2011-09-22 22:20:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 s20090281 的主题更新
信息提示
请填处理意见