debugging - Why does my Matlab code not work correctly? -


my code

    b(abs(b(1:3:length(b))) > 0.75) = 0.75 

what it's supposed do:

    b1 = b(1:3:end);     b1(abs(b1)>0.75) = 0.75;     b(1:3:end) = b1; 

how these 2 not same?

the indexing part b(1:3:end) returns short vector of zeros , ones, change i-th entry of b (for i in first third-ish of b) 0.75 if absolute value of 3*i + 1-th entry greater 0.75.

for example:

b = [-0.684; 0.941; 0.914; -0.029; 0.6; -0.716; -0.156; 0.831; 0.584; 0.919]; b_index = abs(b(1:3:length(b)))>0.75 

would return

b_index =       0      0      0      1 

and b(b_index) = 0.75 change 4th entry of b 0.75.

one way of doing one-liner is

b(1:3:end) = b(1:3:end).*(abs(b(1:3:end))<=0.75)) + 0.75*((b(1:3:end)>0.75)); 

but think three-liner bit clearer.


Comments

Popular posts from this blog

javascript - Chart.js (Radar Chart) different scaleLineColor for each scaleLine -

apache - Error with PHP mail(): Multiple or malformed newlines found in additional_header -

java - Android – MapFragment overlay button shadow, just like MyLocation button -