Matlab 中的三角乘法 Table

Triangle Multiplication Table in Matlab

我该如何编写打印以下内容的脚本?直到 n。用户在哪里输入 n?

1
2 4
3 6 9
4 8 12 16
5 10 15 25 30
n......

因为这看起来像是一道作业题,我可以给你一些提示。这绝不是最快或最优雅的解决方案,但它可能会帮助您进行构建。

首先,给定 n,算出矩阵的大小,比如 A。写 A = zeros(#rows,#columns)

其次,确定一个模式。第一栏是[1,1,3,4,5,6,7,8,9,...,n]你应该能想出办法来完成这一栏。

现在观察 A 的第二列是 A 的第一列的 2 倍。A 的第三列是 A 的第一列的 3 倍。模式继续。您可以执行 forloop 来完成剩余的列。

最后,使用命令tril(A)取矩阵A的下三角部分

看来你已经想通了。所以,是时候介绍一些更 MATLABy 的方法来做到这一点了。

正如您现在所了解的,tril 只能用于获取矩阵的下三角部分。知道了这一点,问题真的只有:How to make a multiplication table in MATLAB.

首先,要获得用户的输入,请使用... input:

n = input('Select a value for n: ') % Please use a space at the end of the string. 
                                    % "Select a value for n:10" looks horrible (IMO).   

让我们来看看几个选项:

朴素的循环方法:

A = zeros(n)  % Create a nxn matrix. You should never let matrices "grow" 
              % inside loops, so allocate the memory first and substitute the 
              % values afterwards.  

for ii = 1:n  % Note that I used ii, not i as the variable, see note below explaining why
   for jj = 1:n
      A(ii,jj) = ii*jj;
   end
end

看起来真的不是很好吗?

不那么幼稚的循环方法:

A = zeros(n);
for ii = 1:n
   A(ii,:) = (1:n)*ii;
end

使用一些内置的 MATLAB 函数怎么样? meshgrid 创建一个矩形值网格。 cumsum取每一列的累加和(如果输入是矩阵,不指定维度)。因此,通过将两者结合起来,您可以非常简单地得到乘法 table:

meshgrid(1:4)
ans =    
   1   2   3   4
   1   2   3   4
   1   2   3   4
   1   2   3   4
A = cumsum(meshgrid(1:n));
A =    
   1    2    3    4
   2    4    6    8
   3    6    9   12
   4    8   12   16

现在,这是最适合 MATLAB 的方法吗?它实际上还不错,但还有其他选择。

您可以将值为 1:n 的水平向量乘以具有相同值的垂直向量以获得乘法 table:

(1:n)'*(1:n)
ans =    
    1    2    3    4
    2    4    6    8
    3    6    9   12
    4    8   12   16 

您可以使用每个人最喜欢的函数 bxsfun,尽管在这种情况下很冗长:

A = bsxfun(@times, 1:n, (1:n)')
A =
    1    2    3    4
    2    4    6    8
    3    6    9   12
    4    8   12   16

当然,对于上述所有解决方案:

tril(A)
ans =    
    1    0    0    0
    2    4    0    0
    3    6    9    0
    4    8   12   16

总而言之,一堆机会,其中一个只需要 18 个字符:

tril((1:n)'*(1:n))

* i and j are used to denote the imaginary variable in MATLAB.