考虑任意函数:
function myFunc_ = myFunc(firstInput, secondInput)
myFunc_ = firstInput * secondInput;
end
现在想象一下,我想将上面的函数映射到第一个输入firstInput
的数组,而第二个输入secondInput
是常量。例如,类似这样的内容:
firstVariable = linspace(0., 1.);
plot(firstVariable, map(myFunc, [firstVariable , 0.1]))
其中0.1
是secondInput
的任意标量值,firstVariable
数组是firstInput
的任意数组。
我已经研究了arrayfun()
功能。但是,我不知道如何包含常量变量。另外,MATLAB 和 Octave 之间的语法似乎不同,或者我弄错了。对我来说,拥有一个可以与同事共享的交叉兼容代码很重要。
假设在原始函数中,您正在乘以两个标量并且想要矢量化,那么
function myFunc_ = myFunc(firstInput, secondInput)
myFunc_ = firstInput .* secondInput;
end
应该工作得很好。
然后直接绘制:
plot( firstVariable, myFunc(firstVariable , 0.1) )
恐怕原始问题中给出的任意示例过于简化,因此,它们并不代表我在代码中面临的实际问题。但我确实设法找到了在 Octave 中工作的正确语法:
plot(firstVariable, arrayfun(@(tempVariable) myFunc(tempVariable, 0.1), firstVariable))
基本上
@(tempVariable) myFunc(tempVariable, 0.1)
创建所谓的匿名函数和
arrayfun(<function>, <array>)
将函数映射到给定数组上。