我有一个函数HermitePCECoefficients
,它接受多个参数作为输入,包括一个列向量y
,并输出一个列向量Coefficients
,长度与y
:
Coefficients=HermitePCECoefficients(grid,weights,indices,y,mu,sigma,normalized)
现在假设这y
不是一个列向量,而是一个二维数组(矩阵),我想HermitePCECoefficients
在它的每一列上运行,将相应的输出存储在一个数组中。使用for
循环执行此操作简单明了,但需要很长时间:
Coefficients=zeros(size(y));
for i=1:size(y,2)
Coefficients(:,i)=HermitePCECoefficients(grid,weights,indices,y(:,i),mu,sigma,normalized);
end
因此,我投入bsxfun
了工作。由于bsxfun
仅适用于二进制函数,我创建了一个“虚拟”二进制函数 f,它实际上只是一个单一参数的函数:
f=@(a,b) HermitePCECoefficients(grid,weights,indices,a,mu,sigma,normalized);
然后这样使用bsxfun
:
Coefficients=bsxfun(f,y,omega_f);
这很好用,而且比for
循环快得多(不用担心omega_f
,它只是一个长度与 中的列数相对应的向量y
)。
问题1:您认为这是bsxfun
在这种情况下使用的正确方法吗?
问题2:也许更好的解决方案是直接修改HermitePCECoefficients
,以便它可以将通用数组y
作为输入。在函数内部,这是唯一需要y
为列向量的行:
Coefficients(i)=dot(weights,y.*Psi)/norm;
weights
和Psi
是两个列向量,所以如果我传递一个数组y
,MATLAB 会抱怨。关于如何修改它的任何建议?