2015-11-19 97 views
-1

假设我有2个变量F(i,j)它依赖于一个矩阵的行索引和列索引的函数,我想用这些值来填充矩阵M_ij = F(i,j)MATLAB创建矩阵M = F(I,J)

当然可以通过ij或甚至只有ij进行循环,如果函数F可以是矢量化的,但我想知道这样做的简便方法。

+1

我不明白你在问什么。你的功能是什么?什么是输入?你有什么尝试? SO不是代码写入服务。 – excaza

+2

提供一个F的例子。如果它需要向量输入,可以传入与M相同大小的i和j,其中i的每一行相同,j的每一列相同。 –

+2

答案完全取决于函数'F'。你需要告诉它是什么 –

回答

5

这是不可能的回答没有看到你的F但是让我们假设F被矢量如

F = @(x,y)x+y; 

那么你可以使用ndgrid

[I,J] = ndgrid(1:m,1:n); 
M = F(I,J) 

在上述情况下,这可能会很好也适用于你的情况,你也许可以直接使用像bsxfun这样的东西来矢量化函数:

M = bsxfun(@plus, 0:m-1, 1:n); 
+0

您的指数向后调整至F –

+0

@MadPhysicist固定 – Dan

+0

我的意思是'M = F(J,I)'或'[J. I] = meshgrid(...)',否则'M'将被转置。 –

2

无论您的功能F是否为矢量化的,您必须对每个值ij进行评估。如果F未被矢量化,则必须手动对索引执行循环。如果F基于MATLAB内建的像sin,log等,它很可能是矢量化的。在这种情况下,可以在ij传递是大小为M相同,并且在一个步骤得到的结果:

[j, i] = meshgrid(1:size(M, 2), 1:size(M, 3)) 
M = F(i, j) 

注意meshgrid取并返回参数X, Y,这是矩阵的逆索引顺序row, col