回 帖 发 新 帖 刷新版面

主题:函数的嵌套调用怎么用?

function [x1,y1]=incipience(r0,e,h,rr)
s0=(r0^2-e^2)^0.5;
s=myfile1(t);
x=myfile2(s,t);y=myfile3(s,t);
alpha=myfile4(s,t);
k=myfile5(t);l=myfile6(t);
p=myfile7(t);
x1=myfile8(x,l);y1=myfile9(y,k);
    function x1=myfile8(x,l)
        x1=x+(-1)^n*rr*l;
    end
    function y1=myfile9(y,k)
        y1=y+(-1)^n*rr*k;
    end
    function k=myfile5(t)
         k=dx/(dx^2+dy^2)^0.5;
    end
    function l=myfile6(t)
         l=-dy/(dx^2+dy^2)^0.5;
    end
       function x=myfile2(s,t)
           x=(s0+s)*sin(t)+e*cos(t);
       end
       function y=myfile3(s,t)
           y=(s0+s)*cos(t)-e*sin(t);
       end

         function s=myfile1(t)
         switch myfile1(t)
            case 0<=t<2*pi/3
                s=h*(3*t/2*pi-sin(3*t)/2*pi)
            case 2*pi/3<=t<5*pi/6
                s=50
            case 5*pi/6<=t<7*pi/6
                s=h*(1+cos(3*t))/2
            case 7*pi/6<=t<2*pi
                s=0
         end    
        function alpha=myfile4(s,t)
        alpha=(ds-e)/(s0+s);
     function p=myfile7(t)
        m1=dx;n1=dy;
        m2=dm1;n2=dn1;
        p=(m2+n2)^1.5/(m1*n2-m2*n1);
     if min(alpha)>pi/6
       disp('wujie'),return;
     else if min(p)<=rr
             n=0;
         else 
           n=0,1;
         end
     end
for t=0:0.1:2*pi   plot(x1,y1,'r')
      end
   请高手指点:怎么嵌套后能把x1,y1的图像画出来?谢谢!!!      




[em15][em15]

回复列表 (共5个回复)

沙发

好乱,嵌套函数必须要有函数尾加上end的,这和非嵌套函数不同。
建议用子函数,层次感觉会好很多

板凳

是是是,就是很乱很乱,内层函数又嵌套另一个内层函数,不知道该怎么调用,我写的是每一个“子函数”,??对吗?除了最后那个嵌套,可这个嵌套又必须用到前面的函数,如果用子函数,该怎么办??

3 楼

这些函数内在的功能对不对这个我就不知道了,想应该没有什么人会认真看这段代码吧。
单从格式来看,没必要搞成内嵌函数,用子函数就可以完全解决,以下按我的理解稍作整理,或许有点帮助
function [x1,y1]=incipience(r0,e,h,rr)
    s0=(r0^2-e^2)^0.5;
    s=myfile1(t);
    x=myfile2(s,t);y=myfile3(s,t);
    alpha=myfile4(s,t);
    k=myfile5(t);l=myfile6(t);
    p=myfile7(t);
    x1=myfile8(x,l);y1=myfile9(y,k);
end    
    
    
    %-----------子函数1
    function x1=myfile8(x,l)
        x1=x+(-1)^n*rr*l;
    end
    %-----------子函数2
    function y1=myfile9(y,k)
        y1=y+(-1)^n*rr*k;
    end
    %-----------子函数3
    function k=myfile5(t)
         k=dx/(dx^2+dy^2)^0.5;
    end

    %-----------子函数4
    function l=myfile6(t)
         l=-dy/(dx^2+dy^2)^0.5;
    end
    %-----------子函数5
    function x=myfile2(s,t)
        x=(s0+s)*sin(t)+e*cos(t);
    end
    %-----------子函数6
    function y=myfile3(s,t)
       y=(s0+s)*cos(t)-e*sin(t);
    end
    %-----------子函数7
    function s=myfile1(t)
        switch myfile1(t)
        case 0<=t<2*pi/3
            s=h*(3*t/2*pi-sin(3*t)/2*pi)
        case 2*pi/3<=t<5*pi/6
            s=50
        case 5*pi/6<=t<7*pi/6
            s=h*(1+cos(3*t))/2
        case 7*pi/6<=t<2*pi
            s=0
        end 
    end
    %-----------子函数8
    function alpha=myfile4(s,t)
        alpha=(ds-e)/(s0+s);
    end    
    %-----------子函数9        
    function p=myfile7(t)
        m1=dx;n1=dy;
        m2=dm1;n2=dn1;
        p=(m2+n2)^1.5/(m1*n2-m2*n1);
        if min(alpha)>pi/6
            disp('wujie'),return;
        elseif min(p)<=rr
            n=0;
        else 
            n=0,1;
        end
        for t=0:0.1:2*pi  
            plot(x1,y1,'r')
        end
    end

4 楼

谢谢,谢谢,好像这种的就可以,谢谢您的帮助

5 楼


我按照上面的程序输入incipience(1,2,3,4),会提示:
??? Undefined function or variable 't'.

Error in ==> incipience at 4
    s=myfile1(t);
其中的t是函数的自变量,其实是一个0到2*pi的变量
所以我把程序首句该为
function [x1,y1]=incipience(r0,e,h,rr,t)  
输入incipience(1,2,3,4,pi) 
可提示为:
??? Maximum recursion limit of 500 reached. Use set(0,'RecursionLimit',N)
to change the limit.  Be aware that exceeding your available stack space can
crash MATLAB and/or your computer.

Error in ==> incipience>myfile1 at 40
        switch myfile1(t)
这个是怎么回事?是不是运算量太大了,matlab无法计算?


是不是switch函数用法错误?怎么会提示呢?

我来回复

您尚未登录,请登录后再回复。点此登录或注册