商人安全过河matlab程序碰到一个问题:矩阵下标越界
<p>对于商人安全过河问题,我用“数学实验”书(张国权编,科学出版社)中的matlab程序运行的结果是:<br/>??? Index exceeds matrix dimensions.<br/>Error in ==><br/>On line 40 ==> <br/>if s(i, :) + (-1)^i * d(j, :) == a(k, :)<br/>我上网查阅了资料,网上似乎说是矩阵下标越界,但我不知道如何改正这个程序,补充:不管改为 if (s(i, :) + (-1)^i * d(j, :)) == a(k, :) 或是if (s(i, :) + (-1)^i * d(j, :) == a(k, :)) 都是和上面类似的结果,有人建议我自己编程,但我还不熟,所以想先通过修改这个书上的现有程序来先实现。</p><p>在这里请教大家,希望能尽快收到回复,谢谢</p>[此贴子已经被作者于2008-1-1 15:13:00编辑过] <p>你把整个程序发上来看看~!</p> <p>程序如下,运行出错,望指点</p><p>clear all;<br/>clc;</p><p>a = [<br/> 0, 0;<br/> 0, 1;<br/> 0, 2;<br/> 0, 3;<br/> 3, 1;<br/> 3, 2;<br/> 3, 3;<br/> 1, 1;<br/> 2, 2; <br/> ]; % 10 enabled states<br/><br/><br/>
<br/>d = [<br/> 0, 2;<br/> 2, 0;<br/> 1, 1;<br/> 0, 1;<br/> 1, 0;<br/> ]; % 5 enabled decisions</p><p>i = 1;<br/>j = 1;<br/>k = 1;</p><p>s(1, :) = ;</p><p>disp('This shore - On Boat - That shore')</p><p>for i = 1:12<br/><br/><br/>
<br/>for j = 1:5<br/> t = 0;<br/> r = mod(i, 2);<br/> m = r;<br/> u = 0;<br/> for k = 1:10<br/> if s(i, :) + (-1)^i * d(j, :) == a(k, :)<br/> t = 1;<br/> end<br/> end<br/>end<br/><br/><br/>
<br/>if t==1<br/> if u==0<br/> s(i+1, :) = s(i, :) + (-1)^i * d(j, :);<br/> c(i+1, :) = d(j, :);<br/> break;<br/> elseif u==1<br/> continue;<br/> end<br/> else continue;<br/> end<br/>end<br/><br/><br/>
<br/>if t==0<br/> disp('No Result');<br/> break;<br/>end;<br/><br/><br/>
<br/>b(i+1, :) = - s(i+1, :);<br/><br/><br/>
<br/>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));<br/><br/><br/>
<br/>disp(play)<br/><br/><br/>
<br/>if s(i+1, :)==<br/> break;<br/>end;<br/><br/><br/>
<br/> end</p>
[此贴子已经被作者于2008-1-1 15:15:32编辑过] <p>你这个主要问题是描述状态的矩阵s没有定义,我加了一个定义,不一定对,你可以修改,另外我的matlab是2007a版,与原来的代码有一定的区别,主要是break函数应该换成return,修改后的代码如下:</p><p>a = [<br/>0, 0;<br/>0, 1;<br/>0, 2;<br/>0, 3;<br/>3, 0;<br/>3, 1;<br/>3, 2;<br/>3, 3;<br/>1, 1;<br/>2, 2; <br/>]; % 10 enabled states<br/>s=;</p><p></p><p>d = [<br/>0, 2;<br/>2, 0;<br/>1, 1;<br/>0, 1;<br/>1, 0;<br/>]; % 5 enabled decisions</p><p>i = 1;<br/>j = 1;<br/>k = 1;</p><p>s(1, :) = ;</p><p>disp('This shore - On Boat - That shore')</p><p>for i = 1:12<br/>
<br/>
<br/>for j = 1:5<br/>t = 0;<br/>r = mod(i, 2);<br/>m = r;<br/>u = 0;<br/>for k = 1:10<br/>if s(i, :) + (-1)^i * d(j, :) == a(k, :)<br/>t = 1;<br/>end<br/>end<br/>end</p><p></p><p><br/>if t==1<br/>if u==0<br/>s(i+1, :) = s(i, :) + (-1)^i * d(j, :);<br/>c(i+1, :) = d(j, :);<br/>return;<br/>elseif u==1<br/>continue;<br/>end<br/>else continue;<br/>end</p><p>end;</p><p></p><p>if t==0<br/>disp('No Result');<br/>return;<br/>end;</p><p></p><p><br/>b(i+1, :) = - s(i+1, :);</p><p></p><p><br/>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));</p><p></p><p><br/>disp(play)</p><p></p><p><br/>if s(i+1, :)==<br/>return;<br/>end;</p> 很想学这个程序,不过怎么这么多笑脸呢? 笑脸的意思是什么?madio,你可以帮下忙告诉我么 试了一下知道了,谢谢啦 运行出来什么结果都没有,哎,前面点还能看懂,后面不行了
页:
[1]