编写脚本时是否可以同时计算所有值?

时间:2016-07-19 03:06:14

标签: matlab

定义函数时,请说TEST = @(t) t.^2。如果输入是矢量,请说[1,2,3,4]TEST([1,2,3,4]) = [1,4,9,16]

如果定义的函数是脚本形式,我们可以做类似的事吗?我的意思是,如果我有一个脚本,请说TEST.m使ret = TEST(x,y,z)在知道xyz的数值时输出一个值。假设我想计算z的100个不同值,范围从1到100 xy固定,分别为0,1。是否可以在不编写for循环或更改脚本TEST.m的任何内容的情况下输出TEST(0,1,1:1:100)

提出这样的问题的原因来自计算时间。通常,我的脚本可能有点复杂,因此单个值的计算可能需要几分钟的时间。编写for循环以输出它可能非常耗时。我想写parfor循环,但计算时间对我来说还有很长的用途。我想知道我是否可以一次计算所有100个值。我是程序员的首发,我希望在这篇文章后我能得到满意的答案。谢谢你的帮助。

1 个答案:

答案 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是一个新功能,可将xy视为常量,并且只有z作为输入。然后arrayfun获取T并为z中的每个元素计算它,然后得到:

ans =

    32    47   112   287   656

现在,如果arrayfun[a,b,c] = arrayfun(T,z,w,v)保持不变,您可以将x与更多向量结合使用,例如y

希望它能回答你的问题;)