How do I find absolute max value in a vector without losing the sign when the value is negative in MatLab R2011b?
67 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Ineta Nausedaite
am 29 Okt. 2018
Kommentiert: Steven Lord
am 4 Feb. 2021
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.
0 Kommentare
Akzeptierte Antwort
Stephen23
am 29 Okt. 2018
Bearbeitet: Stephen23
am 29 Okt. 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 Kommentare
Stephen23
am 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].'
[~,R] = max(abs(M),[],1);
X = sub2ind(size(M),R,1:size(M,2));
V = M(X)
Steven Lord
am 4 Feb. 2021
M = [2,6,-7;-5,2,1;0,-3,9].'
[~, ind] = max(abs(M), [], 1, 'linear')
M(ind)
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Operators and Elementary Operations finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!