2014-10-05 91 views
0

我有一个由教师提供的功能,它不能让我们看到内部运作。MATLAB:从for循环转换为无循环

该功能基本上集成了您输入的任何内容。

这里是我们的循环:

for i = 1:length(time)-1 
    intdefValues(i) = intdef(t, r, time(i), time(i+1)); 
end 

我们正在努力做到这一点:

intdefValues = intdef(t, r, time(1:end-1), time(2:end)); 

难道我们错了吗?无论如何,该功能不支持向量?

函数的语法,以防万一您好奇;

intdef(t, x, a, b) 

其中t =时间矢量,x =函数,a,b是开始/结束参数。

+1

当你尝试没有循环,函数会给出错误? – 2014-10-05 21:29:06

+0

*我们错了吗?反正该函数不支持向量?*是的,该函数可能只接受标量,而不是向量作为输入。可以肯定的是,您应该向您的教师询问有关该功能语法的更多细节。或者像@ ParagS.Chandakkar建议的那样,尝试为它提供载体,并查看是否出现错误。 – Jubobs 2014-10-05 23:38:47

+0

另外,即使您找到某种方式来向量化,也可能不会使程序运行得更快,因为您正在更改函数“intdef()”的工作方式。所以可能不值得调查。 – 2014-10-05 23:50:53

回答

-1
tic();        % ------------ 
            % TEST ALSO 
            % PERFORMANCE: 

            % prepare another "vectorOfTimeENDs", 
            % aligned with your loop-ing strategy 
            % for a fully vectorised call 

startsVector = time(1:end-1);  % just a syntax-sugar, may omit for speed == time(1:end-1) 
    endsVector = time(2:end);   % this one is important 

intdefValues = intdef(tVector, rFunction, startsVector, endsVector); 
toc() 

% --------------------------------------------------------------------------- 
tic();        % COMPARE WITH THE ORIGINAL FOR/LOOP: 
for i = 1:length(time)-1 
    intdefValues(i) = intdef(tVector, rFunction, time(i), time(i+1)); 
end 
toc() 
+0

这是如何回答这个问题的? – Jubobs 2014-10-05 23:41:48

+0

@Jubobs正确的,黑盒测试(因为OP说明问题属于)不是一个能够直接回答你的问题的领域。我们和OP都不知道函数实现的内部细节。尽管如此,即使是黑盒测试,IMHO也可以间接地证明PASS/FAIL的困境,这个函数是否在内部设计,以支持一个严格的操作数。 – user3666197 2014-10-06 00:45:32