5
\$\begingroup\$

I have the following Matlab function:

function [res] = a3_funct(x)
    res = 0;
    for i = 1:size(x,1)
        res = res + abs(x(i))^(i+1);
    end
end

It's emulating this equation:

\$f(x) = \sum_{i=1}^{n}|x_i|^{i+1}\$

Here is an example use:

>> a3_funct([1,2,3]')

ans =

    90

I know I should be able to use the sum() function to make this faster, but how do I get the exponents in there?

\$\endgroup\$
7
\$\begingroup\$

Vectorized approach:

res = sum(abs(x(:).'.^(2:numel(x)+1)))

Read more about vectorization techniques here.

Thus, your function would look like this:

function res = a3_funct(x)
    res = sum(abs(x(:).'.^(2:numel(x)+1)));
return
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.