缩短长表达式

时间:2012-02-01 09:37:44

标签: matlab vectorization

我想为函数创建一个函数句柄:

f = @(x) (x-1)*(x-2)*...*(x-50);

如果不输入所有50个术语,我怎么能在MATLAB中做到这一点?

2 个答案:

答案 0 :(得分:5)

这是一个矢量化解决方案:

y = prod((x-[1:50]))

或者如果你想要一个匿名函数:

f = @(x) ( prod((x-[1:50])) )

顺便说一下,由于Matlab JIT-Accelerator,它可能不会比@Chris解决方案更快(这很好,我赞成它)。

答案 1 :(得分:1)

你可以将它包装在一个函数中。例如,

function y = myfunc(x, n)
    y = 1.;
    for i = 1:n
        y = y*(x-i);
    end
end

您定义的函数基本上是product of a sequence,它们被简单地写成for循环。

在您的情况下,您希望计算50个术语的结果,因此您可以使用y = myfunc(x, 50),或者,如果您希望将其作为函数句柄,则可以定义

f = @(x) myfunc(x, 50);