1 view (last 30 days)

Show older comments

Unable to perform assignment because the indices on the left side are not compatible with the

size of the right side.

X1_bar_i =[9.59547499999917

58282.181075

35.4837749999997

58288.903275

-35.4750250000006

58455.670975

-9.60422500000095

58462.389975]

X2_bar_i =[9.59557499999937

58282.183075

35.4903749999994

58288.908875

-35.4809250000008

58455.676575

-9.60502500000075

58462.394475]

for i=1:size(X1_bar_i)

H(i,1)= [0 X1_bar_i(i+1,1) X1_bar_i(i,1) -X1_bar_i(i+1,1) 0 1;X1_bar_i(i+1,1) X1_bar_i(i,1) 0 X1_bar_i(i,1) 1 0];

i=i+1;

end

The dimension of the H should be 2*6. How can I do it?

Scott MacKenzie
on 2 Jul 2021

In MATLAB, the loop index variable in a for-loop cannot be changed via code in the loop. So, the line

i = i + 1;

has no bearing on the value of the variable i as used in the loop.

Other issues... X1_bar_i is a vector, not a matrix. Accessing elements require one index, not two.

Also, accessing the element in position i+1 of X1_bar_i is not possible in the last iteration when i is equal to the length of the vector. That is an attempt to access the element past the end of the vector, which is not possible.

So, there are a few issues to think about here. Good luck.

DGM
on 2 Jul 2021

Edited: DGM
on 2 Jul 2021

Start here

X1_bar_i =[9.59547499999917

58282.181075

35.4837749999997

58288.903275

-35.4750250000006

58455.670975

-9.60422500000095

58462.389975]

X2_bar_i =[9.59557499999937

58282.183075

35.4903749999994

58288.908875

-35.4809250000008

58455.676575

-9.60502500000075

58462.394475]

% preallocate.

% since each iteration calculates a 2D array, i'm going to stack them on dim3

% if you want them edge-concatenated, you'll have to make that change.

H = zeros(2,6,size(X1_bar_i,1)-1);

% size(X1...) is [8 1]. pick one dimension explicitly, or use numel()

% since array indexing offsets +1, i can't extend to the end

% don't know if that's what you were hoping for

% for i=1:size(X1_bar_i)

for i = 1:size(X1_bar_i,1)-1

H(:,:,i) = [0 X1_bar_i(i+1) X1_bar_i(i) -X1_bar_i(i+1) 0 1;

X1_bar_i(i+1) X1_bar_i(i) 0 X1_bar_i(i) 1 0];

% i=i+1; % this doesn't do anything. don't set the loop iterator inside the loop

end

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

Start Hunting!