可以帮助理解MAtlab:
k=2
n = (0:-1:-4)+k
结果; 2 1 0 -1 -2
它是如何工作的?
答案 0 :(得分:1)
您正在同时处理colon operator和向量化的和。让我们将问题分解为更小的独立问题:
在Matlab中,如果在标量值与矩阵之间加或减,则以vectorized
方式对矩阵的所有元素执行算术运算。例如:
A = [1 2; 3 4]; % 2-by-2 matrix
S1 = A + 2 % output: S1 = [3 4; 5 6]
B = [1 2 3 4] % 1-by-5 matrix, also called column vector
S2 = B - 5 % output: S2 = [3 4 5 6]
Matlab中的column operator
可用于许多情况:索引,迭代和矢量创建。在你的情况下,它的目的是第三个,它的语法是START(:STEP):END
。如果未指定,默认STEP
为1
。永远不会超出START
和END
参数。例如:
A = 1:5 % output: A = [1 2 3 4 5]
B = -2.5:2.5:6 % output: B = [-2.5 0 2.5 5]
C = 1:-1:-5 % output: C = [1 0 -1 -2 -3 -4 -5]
D = -4:-2:0 % output: D = []
在所有编程语言中,定义了运算符优先级标准,以便使用多个运算符的单行计算被雾化为较小的计算,这些计算遵循给定的优先级,除非使用括号来重新定义默认标准。 ..就像常见的数学一样。实施例
A = 2 * 5 + 3 % output: A = 13
B = 2 * (5 + 3) % output: B = 16
让我们把所有这些放在一起为你提供一个解释:
n = (0:-1:-4) + k
% vector creation has parentheses, so it's executed first
% then, the addition is executed on the result of the first operation
让我们将计算细分为中间步骤:
n_1 = 0:-1:-4 % output: n_1 = [0 -1 -2 -3 -4]
n_2 = n_1 + k % output: n_2 = [2 1 0 -1 -2]
n = n_2
想看看没有括号的情况会发生什么?
n = 0:-1:-4+k % output: n = [0 -1 -2]
为什么呢?因为加法优先于冒号运算符。这就像编写n = 0:-1:(-4+k)
并将k
添加到冒号运算符的END
参数。让我们将计算细分为中间步骤:
n_1 = -4 + k % output: n_1 = -2
n_2 = 0:-1:n_1 % output: n_2 = [0 -1 -2]
n = n_2
答案 1 :(得分:0)
基本的Matlab语法,您正在处理范围运算符。有两种模式:
[start]:[end]
和
[start]:[step]:[end]
这样的模式导致数组/向量/" 1D矩阵"。
在您的示例中,您将首先获得一个向量,逐步执行数字0到-4(步骤== -1)。然后,您将k == 2添加到此向量中的所有数字。
octave:1> k = 2
k = 2
octave:2> n = (0:-1:-4)+k
n =
2 1 0 -1 -2
octave:3> 0:-1:-4
ans =
0 -1 -2 -3 -4
答案 2 :(得分:0)
parenthesizes表达式确定一个数组。第一个数字是第一个元素,第二个是步骤,最后一个是最后一个元素。所以括号返回0 -1 -2 -3 -4
。接下来,我们将k=2
添加到导致2 1 0 -1 -2