数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 2960|回复: 0

如何使用matlab进行多递归体编程

[复制链接]
发表于 2005-10-25 23:05:49 | 显示全部楼层 |阅读模式
<>利用matlab可以实现递归编程,但是功能好像不是太强,程序内只能允许有一个递归体,如果有多个递归体,就不能使用了,如下程序:</P>
<>function [src_x,src_y,des_x,des_y,dis,no]=fly_control(px,py,n)<BR>    <BR>    tx=ones(1,n);   %%&para;¨&Ograve;&aring;&para;&thorn;&Icirc;&not;&iquest;&Otilde;&frac14;&auml;&micro;&Auml;&Aacute;&frac12;&cedil;&ouml;&raquo;&reg;·&Ouml;p1&ordm;&Iacute;p2<BR>    ty=ones(1,n);<BR>    tx1=ones(1,n);<BR>    ty1=ones(1,n);<BR>    no=-1;<BR>      for i=1:n     %%p1&ordm;&Iacute;p2×&oslash;±ê&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;<BR>        tx(i)=Inf;<BR>        ty(i)=Inf;<BR>        tx1(i)=Inf;<BR>        ty1(i)=Inf;<BR>      end<BR>    if (n==1)<BR>        dis=inf; %&Ouml;&raquo;&Oacute;&ETH;&Ograve;&raquo;&cedil;&ouml;&micro;&atilde;&Ecirc;±,&frac34;à&Agrave;&euml;&Icirc;&ordf;&Icirc;&THORN;&Ccedil;&icirc;&acute;ó<BR>        src_x=px(1); %&frac14;&Ccedil;&Acirc;&frac14;&cedil;&Atilde;&micro;&atilde;&micro;&Auml;×&oslash;±ê<BR>        src_y=py(1); <BR>        no=1;   <BR>        return; %±ê&Ouml;&frac34;,±í&Atilde;÷&cedil;&Atilde;&iquest;&Otilde;&frac14;&auml;&Ouml;&ETH;&Ouml;&raquo;&Oacute;&ETH;&Ograve;&raquo;&cedil;&ouml;&micro;&atilde;<BR>    elseif (n==2)                %&Oacute;&ETH;&Aacute;&frac12;&cedil;&ouml;&micro;&atilde;&Ecirc;±,&frac34;à&Agrave;&euml;&Icirc;&ordf;&para;&thorn;&Otilde;&szlig;&Ouml;&reg;&frac14;&auml;&micro;&Auml;&frac34;à&Agrave;&euml;<BR>        dis=sqrt((px(1)-px(2))^2+(py(1)-py(2))^2);<BR>        src_x=px(1); %&frac14;&Ccedil;&Acirc;&frac14;&Otilde;&acirc;&Aacute;&frac12;&cedil;&ouml;&micro;&atilde;&micro;&Auml;×&oslash;±ê<BR>        src_y=py(1);<BR>        des_x=px(2);<BR>        des_y=py(2);<BR>        no=2;        %±ê&Ouml;&frac34;,±í&Atilde;÷&cedil;&Atilde;&iquest;&Otilde;&frac14;&auml;&Ouml;&ETH;&Ouml;&raquo;&Oacute;&ETH;&Aacute;&frac12;&cedil;&ouml;&micro;&atilde;<BR>        return;<BR>    else             %&para;à&cedil;&ouml;&micro;&atilde;&Ecirc;±&micro;&Auml;&Igrave;&Oslash;&Ecirc;&acirc;&Ccedil;é&iquest;&ouml;<BR>        m=mean(px);   %&Ccedil;ó&Ouml;&ETH;&Icirc;&raquo;&micro;&atilde;<BR>        <BR>        n1=0;    %&raquo;&reg;·&Ouml;&Aacute;&frac12;&cedil;&ouml;&iquest;&Otilde;&frac14;&auml;p1&ordm;&Iacute;p2<BR>        n2=0;<BR>        for i=1:n<BR>            if (px(i)&lt;=m)<BR>                n1=n1+1;<BR>                tx1(n1)=px(i);<BR>                ty1(n1)=py(i);<BR>            else<BR>                n2=n2+1;<BR>                tx2(n2)=px(i);<BR>                ty2(n2)=py(i);<BR>            end;<BR>        end;  <BR>      end;     %end if<BR>      <BR>      src_x1=0;<BR>      src_y1=0;<BR>      des_x1=0;<BR>      des_y1=0;<BR>      dis1=0;<BR>      no1=0;<BR>      <BR>      %&micro;&Yacute;&sup1;é&Ocirc;&Uacute;·&Ouml;&Agrave;í&sup3;&ouml;&micro;&Auml;&Aacute;&frac12;&cedil;&ouml;&iquest;&Otilde;&frac14;&auml;&Ouml;&ETH;&Agrave;&ucirc;&Oacute;&Atilde;·&Ouml;&Ouml;&Icirc;·¨&Ccedil;ó&frac12;&acirc;<BR>      [src_x1,src_y1,des_x1,des_y1,dis1,no1]=fly_control(tx1,ty1,n1);<BR>      [src_x2,src_y2,des_x2,des_y2,dis2,no2]=fly_control(tx2,ty2,n2);<BR>          <BR>             if (dis1&lt;dis2)  %&Otilde;&Ograve;&micro;&frac12;&Aacute;&frac12;&cedil;&ouml;&iquest;&Otilde;&frac14;&auml;&frac12;&acirc;&Ouml;&ETH;&micro;&Auml;×&icirc;&ETH;&iexcl;&Otilde;&szlig;<BR>                distemp=dis1;  %&frac34;à&Agrave;&euml;<BR>                src_xtemp=src_x1;  %×&oslash;±ê<BR>                src_ytemp=src_y1;<BR>                des_xtemp=des_x1;<BR>                des_ytemp=des_y1;<BR>            else<BR>                distemp=dis2;  %&frac34;à&Agrave;&euml;<BR>                src_xtemp=src_x2;  %×&oslash;±ê<BR>                src_ytemp=src_y2;<BR>                des_xtemp=des_x2;<BR>                des_ytemp=des_y2;<BR>            end<BR>            <BR>            %&ordm;&Iuml;&sup2;&cent;&Ccedil;°&frac12;á&sup1;&ucirc;&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;<BR>            discombine=Inf;  %&frac34;à&Agrave;&euml;&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;<BR>            src_xcombine=Inf;  %×&oslash;±ê&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;<BR>            src_ycombine=Inf;<BR>            des_xcombine=Inf;<BR>            des_ycombine=Inf;<BR>            <BR>            %&ordm;&Iuml;&sup2;&cent;<BR>            for i=1:n1<BR>              if (i&lt;n2)  %×&ouml;&Ograve;&raquo;&Iuml;&Acirc;&Aring;&ETH;&para;&Iuml;,·&Agrave;&Ouml;&sup1;p2&Ouml;&ETH;&micro;&Auml;×&oslash;±ê&Ocirc;&frac12;&frac12;&ccedil;<BR>                k=i;<BR>              else<BR>                k=n2;<BR>              end <BR>                  <BR>                 while_flag=1;<BR>              while(abs(ty2(k)-ty1(i))&gt;distemp)<BR>                      if ((ty2(k)-ty1(i))&gt;0)   %%&Egrave;·&para;¨&Eacute;¨&Atilde;è&iquest;&ordf;&Ecirc;&frac14;&micro;&atilde;<BR>                          k=k-1;<BR>                      else<BR>                          k=k+1;<BR>                      end   <BR>                        if ((k&lt;1)||(k&gt;n2))  %%&Iuml;&Acirc;±ê&Ocirc;&frac12;&frac12;&ccedil;&Ocirc;ò&Iacute;&Euml;&sup3;&ouml;<BR>                            while_flag=0;<BR>                            break;<BR>                        end    <BR>                        if  ((ty2(k)-ty1(i))&gt;distemp)&amp;&amp;((ty1(i)-ty2(k-1))&gt;distemp)   %%·&Agrave;&Ouml;&sup1;&Eacute;¨&Atilde;è&Ouml;&cedil;&Otilde;&euml;×÷&Icirc;&THORN;&Ccedil;&icirc;&Otilde;&ntilde;&micro;&acute;<BR>                            while_flag=0;<BR>                            break;<BR>                        end    <BR>              end              <BR>                  <BR>                  if   (while_flag==0)   %%&para;&Ocirc;&cedil;&oslash;&para;¨&micro;&Auml;p1(i)&para;&oslash;&Ntilde;&Ocirc;,p2&Ouml;&ETH;&Atilde;&raquo;&Oacute;&ETH;&Egrave;&Icirc;&ordm;&Icirc;&micro;&atilde;&ordm;&Iacute;&Euml;ü&iquest;&Eacute;&Auml;&Uuml;&sup1;&sup1;&sup3;&Eacute;×&icirc;&frac12;&Oacute;&frac12;ü&micro;&atilde;&para;&Ocirc;,&frac12;á&Ecirc;&oslash;±&frac34;&acute;&Icirc;&Ntilde;&shy;&raquo;·,&iquest;&frac14;&sup2;ì&micro;&atilde;p1(i+1)<BR>                      continue;<BR>                  end   <BR>                  <BR>                  %&iquest;&ordf;&Ecirc;&frac14;&ordm;&Iuml;&sup2;&cent;&sup2;é&Otilde;&Ograve;<BR>                 while(abs(ty2(k)-ty1(i))&lt;=distemp)  %&Eacute;¨&Atilde;è&Ouml;&cedil;&Otilde;&euml;&Ocirc;&frac14;&Ecirc;&oslash;<BR>                     distance=sqrt((tx1(i)-tx2(k))^2+(ty1(i)-ty2(k))^2);  %&Ccedil;ó&frac34;à&Agrave;&euml;<BR>                    <BR>                    if  (distance&lt;discombine)          %&Otilde;&Ograve;&micro;&frac12;&Ograve;&raquo;&cedil;&ouml;&cedil;ü&ETH;&iexcl;&micro;&Auml;&frac34;à&Agrave;&euml;<BR>                        discombine=distance;           %&frac34;à&Agrave;&euml;<BR>                        src_xcombine=tx1(i);  %×&oslash;±ê<BR>                        src_ycombine=ty1(i);<BR>                        des_xcombine=tx2(k);<BR>                        des_ycombine=ty2(k);<BR>                    end   <BR>                 end<BR>             end             %%end for<BR>               <BR>             if (discombine&lt;distemp)<BR>                   dis=discombine;<BR>                   src_x=src_xcombine;<BR>                   src_y=src_ycombine;<BR>                   des_x=des_xcombine;<BR>                   des_y=des_ycombine;<BR>                 <BR>               else<BR>                   dis=distemp;<BR>                   src_x=src_xtemp;<BR>                   src_y=src_ytemp;<BR>                   des_x=des_xtemp;<BR>                   des_y=des_ytemp;<BR>               end<BR>        这个函数的函数体是  </P>
<>function [src_x,src_y,des_x,des_y,dis,no]=fly_control(px,py,n),</P>
<P>里面用了两个递归[src_x1,src_y1,des_x1,des_y1,dis1,no1]=fly_contro</P>
<P>l(tx1,ty1,n1);   和 [src_x2,src_y2,des_x2,des_y2,dis2,no2]=fly_control(tx2,ty2,n2);</P>
<P>无法调试通过,不知道是什么原因,希望高手给予解答!!!!!!!!</P>
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-27 08:25 , Processed in 0.049517 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表