我想在Matlab中尽可能地加速这个功能。 这是一个更大的模拟项目的一部分,因为它是模拟中最被称为函数之一,这是至关重要的。
目前,我尝试生成一个MEX文件,但速度并不是更好。
给定非线性操作,矢量化看起来很困难(但由于嵌套循环会很有用)。
function y = mixing(T,dis,rr,n)
%% ===================================================================
% input: temperature of cells array T, distance array dis, number of cells
% n, mixing ratio r
%
% output: new temperature array
%
% purpose: calculates the temperature array of next timestep
% ===================================================================
for j = 1:n
i = 1;
r = rr;
while i < dis(j)+1 && j+i <= n
if (dis(j) < i)
r = r*(dis(j)-floor(dis(j)));
end
d = T(j+i-1);
T(j+i-1) = r*T(j+i) + (1-r)*T(j+i-1);
T(j+i) = r*d + (1-r)*T(j+i);
i = i + 1;
end
end
y = T;
end
T
是10
x 1
double
,dis
是10
x 1
{{1 },rr是double
x 1
1
,而double
是n
x 1
1
值。< / LI>
integer
我想用此计算的是水层之间的温度混合程度,由T = random('unif',55,65,10,1); dis = repmat(0.1,10,1); rr = rand; n = 10;
和T(j+i-1)
的等式给出。
这必须针对所有进行计算,这适用于所有时间步长的所有图层(请注意是水图层的总数)。