定义函数时,请说TEST = @(t) t.^2
。如果输入是矢量,请说[1,2,3,4]
,TEST([1,2,3,4]) = [1,4,9,16]
。
如果定义的函数是脚本形式,我们可以做类似的事吗?我的意思是,如果我有一个脚本,请说TEST.m使ret = TEST(x,y,z)
在知道x
,y
和z
的数值时输出一个值。假设我想计算z
的100个不同值,范围从1到100 x
,y
固定,分别为0,1。是否可以在不编写for循环或更改脚本TEST.m的任何内容的情况下输出TEST(0,1,1:1:100)
?
提出这样的问题的原因来自计算时间。通常,我的脚本可能有点复杂,因此单个值的计算可能需要几分钟的时间。编写for循环以输出它可能非常耗时。我想写parfor
循环,但计算时间对我来说还有很长的用途。我想知道我是否可以一次计算所有100个值。我是程序员的首发,我希望在这篇文章后我能得到满意的答案。谢谢你的帮助。
答案 0 :(得分:0)
您可以定义一个新的匿名函数,将固定值作为参数,将矢量作为输入。然后使用arrayfun
在数组的所有值上计算它。
说你有这个功能:
function ret = TEST(x,y,z)
ret = f(x)+g(y)+h(z);
end
function r = f(x)
r = x^2;
end
function r = g(y)
r = y^3;
end
function r = h(z)
r = z^4;
end
你从以下地方打电话:
x = 2;
y = 3;
z = 1:5;
T = @(z) TEST(x,y,z);
arrayfun(T,z)
所以T
是一个新功能,可将x
和y
视为常量,并且只有z
作为输入。然后arrayfun
获取T
并为z
中的每个元素计算它,然后得到:
ans =
32 47 112 287 656
现在,如果arrayfun
和[a,b,c] = arrayfun(T,z,w,v)
保持不变,您可以将x
与更多向量结合使用,例如y
。
希望它能回答你的问题;)