MATLAB:从for循环转换为无循环
问题描述:
我有一个由教师提供的功能,它不能让我们看到内部运作。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是开始/结束参数。
答
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
当你尝试没有循环,函数会给出错误? – 2014-10-05 21:29:06
*我们错了吗?反正该函数不支持向量?*是的,该函数可能只接受标量,而不是向量作为输入。可以肯定的是,您应该向您的教师询问有关该功能语法的更多细节。或者像@ ParagS.Chandakkar建议的那样,尝试为它提供载体,并查看是否出现错误。 – Jubobs 2014-10-05 23:38:47
另外,即使您找到某种方式来向量化,也可能不会使程序运行得更快,因为您正在更改函数“intdef()”的工作方式。所以可能不值得调查。 – 2014-10-05 23:50:53