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.
我该如何编写打印以下内容的脚本?直到 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.