如何在MATLAB中使用方程填充矩阵?

时间:2014-09-17 08:34:02

标签: matlab matrix

我有一个任意维度A x m的矩阵n,并希望使用等式填充它,例如,A的每个元素a_ij,i = 1,...,m和j = 1,...,n,我想,

a_ij = i ^ 2 + j ^ 2.

在手动填写的Matlab中,它看起来与此类似,

A = [1^2+1^2, 1^2+2^2, ..., 1^2+j^2, ..., 1^2+n^2;
     2^2+1^2, 2^2+2^2, ..., 2^2+j^2, ..., 2^2+n^2;

     .
     .
     .

     i^2+1^2, i^2+2^2, ..., i^2+j^2, ..., i^2+n^2;

     .                                       
     .
     .

     m^2+1^2, m^2+2^2, ..., m^2+j^2, ..., m^2+n^2]

所以前几个术语是:

[2, 5, 10,17,...

 5, 8, 13,20,...

 10,13,18,25,...

 17,20,25,32,...
]

2 个答案:

答案 0 :(得分:8)

基于

bsxfun 的解决方案 -

A = bsxfun(@plus,[1:m]'.^2,[1:n].^2)

bsxfunarray expansion执行singleton dimensions(即元素数量等于1的维度)并执行elementwise operation specified by the function handle 这将是bsxfun调用的第一个输入参数。

因此,对于我们的情况,如果我们使用column vector (mx1)和row vector (1xn),那么使用列出的bsxfun代码,这两个向量都会扩展为2D matrices和将执行elementwise summation of elements(因为函数句柄 - @plus),为我们提供所需的2D输出。所有这些步骤都由MATLAB内部执行。

注意:这对于运行时性能非常有效,因为bsxfun非常适合这些expansion相关问题,如前所述。

答案 1 :(得分:4)

使用ndgrid的替代方案:

[I, J] = ndgrid(1:m, 1:n);
A = I.^2 + J.^2;
相关问题