MATLAB:从for循环到no循环的转换
我有一个由讲师提供的功能,我们无法查看内部工作 此函数基本上集成了您输入的任何内容 这是我们的循环:MATLAB:从for循环到no循环的转换,matlab,loops,Matlab,Loops,我有一个由讲师提供的功能,我们无法查看内部工作 此函数基本上集成了您输入的任何内容 这是我们的循环: 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
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是开始/结束参数。当您尝试不使用循环时,函数是否给出错误?我们是否错了?函数是否不支持向量?是的,函数可能只接受标量,而不接受向量作为输入。为了确保这一点,您应该向讲师询问有关函数语法的更多详细信息。或者按照@ParagS.Chandakkar的建议,尝试向其输入向量,看看是否有错误。此外,即使找到某种方式来输入向量,也可能不会使程序运行得更快,因为您正在更改函数
intdef()
的工作方式。所以可能不值得调查。这是如何回答问题的?@Jubobs是的,黑盒测试(正如OP所说的问题所属)不是一个能够直接回答你问题的领域。我们和OP都不知道函数实现的内部细节。尽管如此,即使是黑盒测试也可能间接证明一个通过/失败的困境,不管函数(与许多精心设计/性能优化的lib一样)的内部设计是否支持一种修正的操作方式。
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()