"Array indices must be positive integers or logical values".Error in (line 17) tij_lm(l, m) = min([i(l + 1) - i(l), i(l) - i(l - 1), j(m + 1) - j(m), j(m) - j(m - 1)]) / 2;
    4 views (last 30 days)
  
       Show older comments
    
Getting "Array indices must be positive integers or logical values". Error
Error in cross_correlation (line 17)
      tij_lm(l, m) = min([i(l + 1) - i(l), i(l) - i(l - 1), j(m + 1) - j(m), j(m) - j(m - 1)]) / 2;
Heres my code, why do I get the error?
% Example data for time series i and j
i = [1, 2, 3, 4, 5];
j = [1.5, 3, 4.5];
% Call the cross_correlation function with the example data
[Cxy, Jij, tij_lm] = cross_correlation(i, j);
function [Cxy, Jij, tij_lm] = cross_correlation(i, j)
  % Inputs:
  %   i - time series data for variable i
  %   j - time series data for variable j
  % Compute the length of time series i and j
  Si = length(i);
  Sj = length(j);
  % Initialize Jij and tij_lm matrices
  Jij = zeros(Si, Sj);
  tij_lm = zeros(Si, Sj);
  % Compute Jij and tij_lm for each l and m
  for l = 1:Si
    for m = 1:Sj
      tij_lm(l, m) = min([i(l + 1) - i(l), i(l) - i(l - 1), j(m + 1) - j(m), j(m) - j(m - 1)]) / 2;
      if 0 < i(l) - j(m) && i(l) - j(m) < tij_lm(l, m)
        Jij(l, m) = 1;
      elseif i(l) == j(m)
        Jij(l, m) = 0.5;
      else
        Jij(l, m) = 0;
      end
    end
  end
  % Compute the cross correlation value C(x/y)
  Cxy = sum(sum(Jij));
end
2 Comments
  Dyuman Joshi
      
      
 on 11 Feb 2023
				Indexing in MATLAB starts with 1
When l and m are 1, l-1 and m-1 are 0, which throws the error you are receiving.
""Array indices must be positive integers ...
for l = 1:Si
    for m = 1:Sj
        tij_lm(l, m) = min([i(l + 1) - i(l), i(l) - i(l - 1), j(m + 1) - j(m), j(m) - j(m - 1)]) / 2;
Since I don't know what you want to do with this line of code, I can't suggest any changes.
  Arif Hoq
      
 on 11 Feb 2023
				i = [1, 2, 3, 4, 5];
j = [1.5, 3, 4.5];
l=1:5;
i(l) - i(l - 1)
when l=1
i(1)=1
i(1-1)= i(0) % which shows an error.
also same here
j(m) - j(m - 1)
index should be an integer.
Can you please explain what you want here? please give an example.
tij_lm(l, m) = min([i(l + 1) - i(l), i(l) - i(l - 1), j(m + 1) - j(m), j(m) - j(m - 1)]) / 2;
Accepted Answer
  Arif Hoq
      
 on 11 Feb 2023
        if you start your index from 2 then, this can be one approach:
% Example data for time series i and j
i = [1, 2, 3, 4, 5];
j = [1.5, 3, 4.5];
% Call the cross_correlation function with the example data
[Cxy, Jij, tij_lm] = cross_correlation(i, j)
function [Cxy, Jij, tij_lm] = cross_correlation(x, y)
  % Inputs:
  %   i - time series data for variable i
  %   j - time series data for variable j
  % Compute the length of time series i and j
  xlength = length(x);
  ylength = length(y);
  % Initialize Jij and tij_lm matrices
  Jij = zeros(xlength, ylength);
  tij_lm = zeros(xlength, ylength);
  % Compute Jij and tij_lm for each l and m
  for i = 2:xlength
    for j = 2:ylength
      tij_lm(i, j) = min([x(i) - x(i), x(i) - x(i - 1), y(j) - y(j), y(j) - y(j - 1)]) / 2;
      if 0 < x(i) - y(j) && x(i) - y(j) < tij_lm(i, j)
        Jij(i, j) = 1;
      elseif x(i) == y(j)
        Jij(i, j) = 0.5;
      else
        Jij(i, j) = 0;
      end
    end
  end
  % Compute the cross correlation value C(x/y)
  Cxy = sum(sum(Jij));
end
0 Comments
More Answers (0)
See Also
Categories
				Find more on Cell Arrays in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!