Foad S. Farimani
Foad S. Farimani

Reputation: 14008

vectorize a function with multiple variables

Consider the arbitrary function:

function myFunc_ = myFunc(firstInput, secondInput)
    myFunc_ = firstInput * secondInput;
end

Now imagine I want to map the above function to an array for the first input firstInput, while the second input secondInput is constant. For example, something like:

firstVariable = linspace(0., 1.);

plot(firstVariable, map(myFunc, [firstVariable , 0.1]))

where 0.1 is an arbitrary scalar value for the secondInput and firstVariable array is an arbitrary array for the firstInput.

I have looked into the arrayfun() function. However, I don't know how to include the constant variable. Plus it seems like the syntax between MATLAB and Octave are different, or maybe I'm mistaken. It is important for me to have a cross-compatible code that I can share with colleagues.

Upvotes: 0

Views: 146

Answers (2)

Foad S. Farimani
Foad S. Farimani

Reputation: 14008

I'm afraid the arbitrary examples given in the original question were too simplified and as a result, they do not represent the actual issue I'm facing with my code. But I did manage to find the right syntax that works inside Octave:

plot(firstVariable, arrayfun(@(tempVariable) myFunc(tempVariable, 0.1), firstVariable))

basically the

@(tempVariable) myFunc(tempVariable, 0.1)

creates what is so-called an anonymous function and the

arrayfun(<function>, <array>)

maps the function over the given array.

Upvotes: 1

Tasos Papastylianou
Tasos Papastylianou

Reputation: 22215

Assuming in the original function you were multiplying two scalars and you want to vectorise, then

function myFunc_ = myFunc(firstInput, secondInput)
    myFunc_ = firstInput .* secondInput;
end

should work just fine.

Then plot it directly:

plot( firstVariable, myFunc(firstVariable , 0.1) )

Upvotes: 3

Related Questions