How do I find absolute max value in a vector without losing the sign when the value is negative in MatLab R2011b?

65 visualizzazioni (ultimi 30 giorni)
I have many vectors that contain force and joint moment data and I need to find the max values without losing the sign. For example, if the values were [2 6 -7] I'd need to get -7, if the vector was [-2 5 6] I'd need to get 6. For certain reasons, I have to work with MatLab R2011b.

Risposta accettata

Stephen23
Stephen23 il 29 Ott 2018
Modificato: Stephen23 il 29 Ott 2018
Method one: use indexing to select from the original vector:
>> V = [2,6,-7];
>> [~,X] = max(abs(V));
>> V(X)
ans = -7
>> V = [-2,5,6];
>> [~,X] = max(abs(V));
>> V(X)
ans = 6
Method two: use sign to multiply with the output value:
>> V = [2,6,-7];
>> [A,X] = max(abs(V));
>> A.*sign(V(X))
ans = -7
>> V = [-2,5,6];
>> [A,X] = max(abs(V));
>> A.*sign(V(X))
ans = 6
  3 Commenti
Stephen23
Stephen23 il 4 Feb 2021
It would be nice if max et al would return linear indices. Your indexing is probably about the simplest, but because you hard-code the columns it is not very generalized. Here is a generalized solution:
M = [2,6,-7;-5,2,1;0,-3,9].'
M = 3×3
2 -5 0 6 2 -3 -7 1 9
[~,R] = max(abs(M),[],1);
X = sub2ind(size(M),R,1:size(M,2));
V = M(X)
V = 1×3
-7 -5 9
Steven Lord
Steven Lord il 4 Feb 2021
The max and min functions can return linear indices as of release R2019a.
M = [2,6,-7;-5,2,1;0,-3,9].'
M = 3×3
2 -5 0 6 2 -3 -7 1 9
[~, ind] = max(abs(M), [], 1, 'linear')
ind = 1×3
3 4 9
M(ind)
ans = 1×3
-7 -5 9

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Operators and Elementary Operations in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by