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



我有一个任意维度m x n的矩阵A,并希望使用一个方程来填充它,例如,对于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,...
]

bsxfun基于的解决方案

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

bsxfunsingleton dimensions(即元素数量等于1的维度)执行array expansion,并执行elementwise operation specified by the function handle这将是CCD_ 10调用的第一个输入自变量。

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

注意:这必须在运行时性能方面非常高效,因为bsxfun非常适合于这些与expansion相关的问题,正如前面所描述的那样。

使用ndgrid:的替代方案

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

最新更新