我需要在一个被调用多次的函数中使用一系列变量,我想以最快的方式做到这一点

时间:2015-11-06 21:52:43

标签: matlab

我必须在函数的开头定义一系列变量。由于我多次使用该功能(10,000次),我希望以最快的方式执行此操作。目前我刚刚在主脚本中创建了一系列全局变量,我在函数的开头调用它们,如下所示:

global x
global y
global z

但是,我注意到它仍然相当耗时(与函数的其余代码相比)。由于我不是专家MATLAB程序员,我想知道是否有更优化的"做到这一点的方法。 谢谢。

function [Mosk,D]= Moskovitz(x,t,INTC)

global v
global densc
global densm
global w
global IC
global LBC
global RBC
global nic
global nlbc
global nrbc
global alpha1
global alpha2
global alpha3
global dx
global dt

i=round(t/dt);
j=round(x/dx);

D=0;
N=-10^36;

        for k=1:nic
            if IC(3,k)<=densc
                if (IC(2,k)+v*t >=x) & (IC(1,k)-w*t<=x)
                    if (IC(1,k)+v*t <=x)
                        u=-v;
                        t1=0;
                        x1=x-v*t;
                         dens=IC(3,k);

                    else
                        u=(IC(1,k)-x)/t;
                        t1=0;
                        x1=IC(1,k);
                         dens=densc;

                    end
                end
            else
                if (IC(2,k)+v*t >=x) & (IC(1,k)-w*t<=x)
                    if (IC(2,k)-w*t >=x)
                        u=w;
                        t1=0;
                        x1=x+w*t;
                         dens=IC(3,k);

                    else
                        u=(IC(2,k)-x)/t;
                        t1=0;
                        x1=IC(2,k);
                         dens=densc;

                    end
                end
            end

           if (IC(2,k)+v*t >=x) & (IC(1,k)-w*t<=x) 
           tmp=-(t-t1)*densc*(u+v)+alpha1(k,1)+(x1-IC(1,k))*IC(3,k); 
           if tmp>=N 
               N=tmp;
               D=dens;

           end 
           end
        end 
end

1 个答案:

答案 0 :(得分:1)

在MATLAB中不需要声明变量,但它仍然是很好的编程习惯。您所要做的就是初始化它们:

x = 0;
y = 0;
z = 0;

无论简介者说什么,这基本上都没有时间。

如果您希望值从一次迭代延续到下一次迭代,则可以使用持久性关键字。