对于商人安全过河问题,我用“数学实验”书(张国权编,科学出版社)中的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,
) 都是和上面类似的结果,有人建议我自己编程,但我还不熟,所以想先通过修改这个书上的现有程序来先实现。
在这里请教大家,希望能尽快收到回复,谢谢
你把整个程序发上来看看~!
程序如下,运行出错,望指点
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
你这个主要问题是描述状态的矩阵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;
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |