Filter löschen
Filter löschen

how can I do this mathmatical operation?

2 Ansichten (letzte 30 Tage)
Young Lee
Young Lee am 22 Okt. 2018
Kommentiert: Young Lee am 23 Okt. 2018
I wish to do sum and subtract in column 2 of 84x7 matrices between different rows of the element on the same column and produce the answers into an array. example @Column 3, a = [ 1 3 3 3 ; 2 2 2 2 ; 3 4 4 4 ; 4 0 1 0 ; 5 5 5 5 ; 1 1 1 1 ; 7 7 7 7 ] desired outcome: => b = [ 3 7 10 ]
  5 Kommentare
Kevin Chng
Kevin Chng am 22 Okt. 2018
Bearbeitet: Kevin Chng am 22 Okt. 2018
I guess what you want is
for i=1:2:(length(a(:,3))-2)
b(i)= a(i,3)-a(i+1,3)+(a(i+2,3)-a(i+1,3))
end
b(2:2:end)=[];
Why length(a(:,3)-2)? It is to avoid exceed the dimension.
Young Lee
Young Lee am 23 Okt. 2018
Thanks that worked out perfectly with little change @@

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Kevin Chng
Kevin Chng am 22 Okt. 2018
I guess what you want is
for i=1:2:(length(a(:,3))-2)
b(i)= a(i,3)-a(i+1,3)+(a(i+2,3)-a(i+1,3))
end
b(2:2:end)=[];
Why length(a(:,3)-2)? It is to avoid exceed the dimension.
  2 Kommentare
Jan
Jan am 22 Okt. 2018
Use size(a, 1) instead of length(a(:, 3)), because it is more efficient and nicer.
Rik
Rik am 22 Okt. 2018
To expand a bit on Jan's comment: using length can get you into trouble, because it is equivalent to max(size(A)). That means that you need to be sure that the dimension that is relevant for you will always be the largest. Using size with a specified dimension will avoid this problem. If you want to iterate through all elements of a vector, it is safest to use numel, which is equivalent to prod(size(A)).

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Jan
Jan am 22 Okt. 2018
Bearbeitet: Jan am 22 Okt. 2018
This works without a loop:
n = size(a, 1);
b = a(1:2:n-2, 3) - 2 * a(2:2:n-1, 3) + a(3:2:n, 3)

Community Treasure Hunt

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

Start Hunting!

Translated by