用matlab理解任务中的语法

问题描述 投票:-2回答:3

有人可以帮助理解MAtlab这个:

k=2
n = (0:-1:-4)+k

结果; 2 1 0 -1 -2

这个怎么运作?

arrays matlab
3个回答
1
投票

你正在同时处理colon operator和矢量化的和。让我们将问题分解为更小的独立问题:

  1. 在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]
  2. Matlab中的column operator可用于许多情况:索引,迭代和矢量创建。在你的情况下,它的目的是第三个,它的语法是START(:STEP):END。如果没有指定,默认的STEP1。永远不会超过STARTEND参数。例: 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 = []
  3. 在所有编程语言中,定义了运算符优先级标准,以便使用多个运算符的单行计算被原子化为较小的计算,这些计算遵循给定的优先级,除非使用括号来重新定义默认标准...就像共同的一样数学。例 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

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

0
投票

括号表达式确定数组。第一个数字是第一个元素,第二个是步骤,最后一个是最后一个元素。所以括号返回0 -1 -2 -3 -4。接下来,我们将k=2添加到导致2 1 0 -1 -2的每个元素

© www.soinside.com 2019 - 2024. All rights reserved.