数学建模社区-数学中国

标题: 商人安全过河matlab程序碰到一个问题:矩阵下标越界 [打印本页]

作者: basic_maths    时间: 2007-12-23 22:50
标题: 商人安全过河matlab程序碰到一个问题:矩阵下标越界

对于商人安全过河问题,我用“数学实验”书(张国权编,科学出版社)中的matlab程序运行的结果是:
??? Index exceeds matrix dimensions.
Error in ==>
On line 40 ==>
if s(i, + (-1)^i * d(j, == a(k,
我上网查阅了资料,网上似乎说是矩阵下标越界,但我不知道如何改正这个程序,补充:不管改为 if (s(i, + (-1)^i * d(j, ) == a(k, 或是if (s(i, + (-1)^i * d(j, == a(k, ) 都是和上面类似的结果,有人建议我自己编程,但我还不熟,所以想先通过修改这个书上的现有程序来先实现。

在这里请教大家,希望能尽快收到回复,谢谢

[此贴子已经被作者于2008-1-1 15:13:00编辑过]

作者: madio    时间: 2007-12-30 23:28

你把整个程序发上来看看~!


作者: basic_maths    时间: 2008-1-1 15:10

程序如下,运行出错,望指点

clear all;
clc;

a = [
0, 0;
0, 1;
0, 2;
0, 3;
3, 1;
3, 2;
3, 3;
1, 1;
2, 2;
]; % 10 enabled states



d = [
0, 2;
2, 0;
1, 1;
0, 1;
1, 0;
]; % 5 enabled decisions

i = 1;
j = 1;
k = 1;

s(1, = [3, 3];

disp('This shore - On Boat - That shore')

for i = 1:12



for j = 1:5
t = 0;
r = mod(i, 2);
m = r;
u = 0;
for k = 1:10
if s(i, + (-1)^i * d(j, == a(k,
t = 1;
end
end
end



if t==1
if u==0
s(i+1, = s(i, + (-1)^i * d(j, ;
c(i+1, = d(j, ;
break;
elseif u==1
continue;
end
else continue;
end
end



if t==0
disp('No Result');
break;
end;



b(i+1, = [3, 3] - s(i+1, ;



play = sprintf('{%d, %d}-{%d, %d}-{%d, %d}', s(i, 1), s(i, 2), c(i+1, 1), c(i+1, 2), b(i+1, 1), b(i+1, 2));



disp(play)



if s(i+1, ==[0, 0]
break;
end;



end

[此贴子已经被作者于2008-1-1 15:15:32编辑过]

作者: madio    时间: 2008-1-1 19:09

你这个主要问题是描述状态的矩阵s没有定义,我加了一个定义,不一定对,你可以修改,另外我的matlab是2007a版,与原来的代码有一定的区别,主要是break函数应该换成return,修改后的代码如下:

a = [
0, 0;
0, 1;
0, 2;
0, 3;
3, 0;
3, 1;
3, 2;
3, 3;
1, 1;
2, 2;
]; % 10 enabled states
s=[0, 0;
0, 1;
0, 2;
0, 3;
1, 0;
1, 1;
1, 2;
1, 3;
2, 0;
2, 1;
2, 2;
2, 3;
3, 0;
3, 1;
3, 2;
3, 3;
];

d = [
0, 2;
2, 0;
1, 1;
0, 1;
1, 0;
]; % 5 enabled decisions

i = 1;
j = 1;
k = 1;

s(1, = [3, 3];

disp('This shore - On Boat - That shore')

for i = 1:12


for j = 1:5
t = 0;
r = mod(i, 2);
m = r;
u = 0;
for k = 1:10
if s(i, + (-1)^i * d(j, == a(k,
t = 1;
end
end
end


if t==1
if u==0
s(i+1, = s(i, + (-1)^i * d(j, ;
c(i+1, = d(j, ;
return;
elseif u==1
continue;
end
else continue;
end

end;

if t==0
disp('No Result');
return;
end;


b(i+1, = [3, 3] - s(i+1, ;


play = sprintf('{%d, %d}-{%d, %d}-{%d, %d}', s(i, 1), s(i, 2), c(i+1, 1), c(i+1, 2), b(i+1, 1), b(i+1, 2));


disp(play)


if s(i+1, ==[0, 0]
return;
end;


作者: fhfhappy    时间: 2009-5-7 18:43
很想学这个程序,不过怎么这么多笑脸呢?
作者: fhfhappy    时间: 2009-5-7 18:44
笑脸的意思是什么?madio,你可以帮下忙告诉我么
作者: fhfhappy    时间: 2009-5-7 18:44
试了一下知道了,谢谢啦
作者: dark0421    时间: 2011-6-29 15:54
运行出来什么结果都没有,哎,前面点还能看懂,后面不行了




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5