在matlab中
a = zeros(1,2); b= ones(2,1)
那么它是错的a + b;
但X=zeros(2,2), X(:,1)=a
效果很好,为什么?
答案 0 :(得分:1)
好问题。确切的答案可以在页面底部附近的Matlab site找到:
分配索引
将一个矩阵的值分配给 另一个矩阵,你可以使用任何索引样式 这个部分。矩阵赋值语句也具有以下内容 要求。在作业
A(J,K,...) = B(M,N,…)
中,下标J, K, M, N,
等。 可以是标量,向量或数组,只要满足以下所有条件 是的:
- 为B指定的下标数,不包括尾随 下标等于1,不超过ndims(B)。
- 数量 为A指定的非标量下标等于非标量的数量 为B指定的下标。例如,
A(5, 1:4, 1, 2) = B(5:8)
是 有效,因为等式的两边都使用一个非标量下标。
- 为A指定的所有非标量下标的顺序和长度 匹配为B指定的非标量下标的顺序和长度 例如,左
A(1:4, 3, 3:9) = B(5:8, 1:7)
是有效的,因为双方都有效 等式(忽略一个标量下标3)使用一个4元素 下标后跟7个元素的下标。
当您查看示例时,它会遵循上面的最后一点:尽管您要分配X(:,2)
这是2x1
列向量,右侧是{{1行向量,规则“为A指定的所有非标量下标的顺序和长度匹配为B指定的非标量下标的顺序和长度。”
请注意,当您想添加两个矩阵时,情况并非如此 - 在这种情况下,它们实际上需要具有完全相同的形状(因此您无法添加1x2
和{{1 }} matrix,尽管两者都有两个元素。)
答案 1 :(得分:0)
使用" X(:,1)= b",您要求MATLAB将列向量b的值复制到X的第一列.b有两行,X也是如此。所以价值分配有效。
对于" a + b",矩阵 - 矩阵加法需要尺寸的精确匹配。