MATLAB: Is b = a – a(1,:) not equal to a = a – a(1,:) where a is a column vector.

bugerrorsubtractionvector

A colleague was removing the offset of her capured data time vector (subtracting the first element from all elements such that the new time vector starts at time t = 0) when she encountered a problem. For a column vector a, the command a = a – a(1,:) only subtracts a(1,:) from some of the first elements.
Code to recreate the problem:
a = 0.01*transpose(1:2048) + 0.7;
t = transpose(1:2048) - 1;
b = a - a(1,:);
a = a - a(1,:);
plot(t,a,t,b);
legend('a','b');

Best Answer

From Tech Support:
I am writing in reference to your Service Request, Case #00977058 regarding 'Vectors with Multiple Subscripts'.
I was able to reproduce the issue. This seems to be a problem with the MATLAB Just in Time (JIT) accelerator which analyzes the code in the editor and makes optimizations. This works in debug mode since JIT is not active in debug mode.
I have notified our developers about this issue and they may consider addressing it in a future release of MATLAB.
As a workaround, you can turn of the JIT feature by the following command:
>> feature accel off
Now the results of 'a' and 'b' should be identical.
You can turn the JIT back on using the following command:
>> feature accel on
One other workaround is to use a(1) instead of a(1,:).
Please feel free to reply back, if you have any further queries in this regard. I will be happy to reopen the case and assist you.
Please preserve the Reference ID below in any further correspondence on this query. This will allow our systems to automatically assign your reply to the appropriate Case.