basic_maths 发表于 2007-12-23 22:50

商人安全过河matlab程序碰到一个问题:矩阵下标越界

<p>对于商人安全过河问题,我用“数学实验”书(张国权编,科学出版社)中的matlab程序运行的结果是:<br/>??? Index exceeds matrix dimensions.<br/>Error in ==&gt;<br/>On line 40  ==&gt; <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编辑过]

madio 发表于 2007-12-30 23:28

<p>你把整个程序发上来看看~!</p>

basic_maths 发表于 2008-1-1 15:10

<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编辑过]

madio 发表于 2008-1-1 19:09

<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>

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

运行出来什么结果都没有,哎,前面点还能看懂,后面不行了
页: [1]
查看完整版本: 商人安全过河matlab程序碰到一个问题:矩阵下标越界