加快循环丰富的Matlab函数来计算温度分布

时间:2014-12-23 08:34:22

标签: performance matlab loops vectorization

我想在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
  • 关于如何加速这个Matlab功能的任何想法?
  • 输入:T10 x 1 doubledis10 x 1 {{1 },rr是double x 1 1,而doublen 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)的等式给出。

这必须针对所有formula进行计算,这适用于所有时间步长的所有图层(请注意formula是水图层的总数)。

0 个答案:

没有答案