About the end used in vector append

조회 수: 1 (최근 30일)
Gary Bikini
Gary Bikini 2021년 2월 1일
댓글: Gary Bikini 2021년 2월 2일
% run the following code, there will be wrong
% I wanna know why
a=[];
a(end+1:2)=[8,9];
a(end+1:2)=[8,9]; % wrong, why

채택된 답변

Steven Lord
Steven Lord 2021년 2월 1일
% run the following code, there will be wrong
% I wanna know why
a=[];
a(end+1:2)=[8,9]
a = 1×2
8 9
% a(end+1:2)=[8,9] % wrong, why
I've commented out that third line of code so the three lines later in this post can execute. The error message it throws is "Unable to perform assignment because the left and right sides have a different number of elements."
When you run the third line of code, a has 2 elements and so the linear end of a is element 2. This makes end+1 equal to 3 and the section of a that goes from element 3 to element 2 in steps of 1 is empty. You can't store two elements on the right into no elements on the left. [MATLAB performs the addition before calling colon based on the operator precedence table.]
If instead you want to perform the colon first, use parentheses to force it to go first.
b = [];
b(end+(1:2)) = [8 9]
b = 1×2
8 9
b(end+(1:2)) = [0 1]
b = 1×4
8 9 0 1
In the third line in this code, the linear end of b is element 2, and 2+(1:2) is the vector [3 4]. You can assign two elements (on the right) to two elements (on the left.)

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by