MATLAB Answers

How to Use arrayfun with a Multivariate Function of n Variables?

3 views (last 30 days)
Kareem Elgindy
Kareem Elgindy on 3 Aug 2020
Commented: Arthur Roué on 4 Aug 2020
Suppose f(X) is a function of a vector X = [x1, x2, ..., xn]. How to evaluate the function at a certain range of values, say y1, y2, ..., ym, for the variable xi while keeping all other variables fixed?
To make it simple: Say x1, ..., x59, x61, ..., x100 = 10, and we want to evaluate the function for three different values for x60, say at 1.5, -3, and 12. Can we do this without for loops?

  0 Comments

Sign in to comment.

Answers (2)

Arthur Roué
Arthur Roué on 3 Aug 2020
Edited: Arthur Roué on 3 Aug 2020
arrayfun is generally not faste than a for loop, becaut it has an internal for loop. read this for more details : https://fr.mathworks.com/matlabcentral/answers/324130-is-arrayfun-faster-much-more-than-for-loop
So I reccomend something like
X = [x1 .. xn];
x60 = [1.5, -3, 12];
Y = NaN(1, numel(x60)); % Pre-allocation (not required for small vectors)
for idx = 1:numel(x60)
X(60) = x60(idx)
Y(idx) = yourFun(X)
end

  4 Comments

Show 1 older comment
Arthur Roué
Arthur Roué on 3 Aug 2020
Anotherway is to vectorize the operation in the function. The idea is to create a matrix 3xN where each line is a different version of X and calculate all results in one time.
Kareem Elgindy
Kareem Elgindy on 3 Aug 2020
OK. But how to calculate the 3xN matrix quickly then. Can we do it without for loops?

Sign in to comment.


Souradeep Mukhopadhyay
Souradeep Mukhopadhyay on 3 Aug 2020
You should make 3 different X arrays here X1, X2, X3 and then pass the 3 arrays in function 3 times to compute y 3 times.

  0 Comments

Sign in to comment.

Tags

Products


Release

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!