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



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

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

声明变量在MATLAB中不是必需的,但它仍然是良好的编程实践。你所要做的就是初始化它们:

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

不管探查器说什么,这基本上不需要时间。

如果希望值从一次迭代延续到下一次迭代,可以使用persistent关键字。

相关内容

最新更新