我必须在函数的开头定义一系列变量。由于我已经多次使用该函数(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关键字。