Search All of the Math Forum:
Views expressed in these public forums are not endorsed by
NCTM or The Math Forum.


Curious
Posts:
2,359
Registered:
12/6/04


Re: ??? Index exceeds matrix dimensions.
Posted:
Feb 13, 2013 1:34 PM


AbderRahman Ali <abder.rahman.ali@gmail.com> wrote in message <7deb209523674ea1b9217126187692ab@googlegroups.com>... > I have the following code (part of a larger program) in `matlab`: > > while(k<n) > C.(sprintf('Cnew')) = C.(sprintf('C%d',k)); > d1 = equalize_dimension(a.F, C.(sprintf('Cnew'))); > distance_new = distance(d1.x, d1.y); > k = k + 1; > end > > If you want to substitute values since I have included part of the program, this would be as follows: > > C.(sprintf('Cnew')): > > 78 > > And, for `a.F` it is as follows: > > > 78 82 84 80 > > 80 84 86 82 > > 82 87 88 85 > > 82 87 89 86 > > > For the `equalize_dimension(x,y)` function, it is as follows: > > function n = equalize_dimension (x,y) > [r1 c1] = size(x); > [r2 c2] = size(y); > > if r1<r2 > e= r2r1; > for i=1:e > x(r1+1,1)=0; > r1 = r1 + 1; > end > [r1 c1] = size(x); > n.x =x; > n.y = y; > end > > if r1>r2 > e = r1r2; > for i=1:e > y(r2+1,1)=0; > r2 = r2 + 1; > end > [r2 c2] = size(y); > n.x = x; > n.y = y; > end > > if c1<c2 > e= c2c1; > for i=1:e > x(1,c1+1)=0; > c1 = c1 + 1; > end > [r1 c1] = size(x); > n.x = x; > n.y = y; > end > > if c1>c2 > e = c1c2; > for i=1:e > y(1,c2+1)=0; > c2 = c2 + 1; > end > [r2 c2] = size(y); > n.x = x; > n.y = y; > end > > if r1==r2 && c1==c2 > n.x = x; > n.y = y; > end > > And, for the `distance(x,y)` function, it is as follows: > > function m = distance(x,y) > [r c] = size(x); > for i=1:r > for j=1:c > summation = (sum(sum(pdist2(x,y)))); > end > end > m=summation; > end > > When I run the program, I get the following error: > > ??? Index exceeds matrix dimensions. > > Error in ==> fs at 36 > distance_new = distance(d1.x, d1.y); > > Why is that? > > Thanks.
Are you sure d1.x and d1.y are the same size? I think you should check that.
In function distance you have: [r c] = size(x); See if [r2 c2] = size(y); gives the same result. If not, thats one thing you need to fix.



