Arrays have incompatible sizes for this operation.

8 views (last 30 days)
I have the for loop shown below. It is giving me this error:
"Arrays have incompatible sizes for this operation.
Error in EMP_ASCO_Waveform_Analyzer_9_15_r2 (line 186)
xm(k1) = interp1(y(idxrng2+(-3:3)), x(idxrng2+(-3:3)), hafmax(k1));
Related documentation "
Please help me understand what it is doing and why it is giving the error.
Thanks
--------------------------------------
for k1 = 1:numel(hafmax)% Finds the halfmax rise and fall numbers
idxrng1 = find(y(1:idx)<hafmax(:,k1), 1, 'last');
idxrng2 = find(y(idx:numel(x))<hafmax(:,k1),1,'first')+idx;
xm(k1) = interp1(y(idxrng1+(-3:3)), x(idxrng1+(-3:3)), hafmax(k1));
xm(k1) = interp1(y(idxrng2+(-3:3)), x(idxrng2+(-3:3)), hafmax(k1));
end

Accepted Answer

Jan
Jan on 6 Oct 2021
Use the debugger to identify the problem. Type this in the command window:
dbstop if error
and run the code again. When Matlab stops at the error, check the sizes of the arrays. I guess it is here:
idxrng1 = find(y(1:idx)<hafmax(:,k1), 1, 'last');
size(y(1:idx))
size(hafmax(:,k1))
There might be another problem:
for k1 = 1:numel(hafmax)
idxrng1 = find(y(1:idx)<hafmax(:,k1), 1, 'last');
If hafmax is not a vector, counting the 2nd index until the number of all elements must fail. If it is a vector, write "hafmax(k1)", which is nicer and even faster.
Hint: y(idxrng1+(-3:3)) is slower than y(idxrng1-3:idxrng1+3). In the later case only the first and last index is checked to be inside the valid range, while in the first case this test is performed for each index. If the number of indices is 7, the difference is not tragic, but for larger index vectors is helps to reduce the runtime.

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!