Matlab中的轮廓图-永远需要

幸运的

我正在尝试在Matlab中绘制轮廓图。但是,语法似乎是正确的,但是由于矩阵可能很大,因此matlab花费了很多时间来绘制它。

请提出我该怎么办。

下面是我的代码:

s = 10000000;
eta_gamma = zeros(s/10000);

for g1= 1:10000:s
for g2 = 1:10000:s
    eta_gamma(g1,g2) = floor((1000000000 - g1 - g2)/ (200000*(1 + floor(-0.001 + 20000*(0.001 + (0.1 + 0.9/ (1 + (-1000000 + 5000000* lambertw(power(exp(1), 0.2 + g1/5.E6)/5.))/1.E6))/ 100.))) + 75000*(1 + floor(-0.001 + 20000*(0.002 + (0.2 + 0.8/ (1 + (-8000000 + 4000000* lambertw(2* power(exp(1),2 + g2/4.E6)))/8.E6)) /200.)))));
end
end

figure
contour(eta_gamma)
迪卡卡

瓶颈似乎是因为那里有两个沉重的嵌套循环解决方案当然vectorization是要删除这两个循环。的最佳工具之一vectorizationbsxfun可以在这里使用。接下来列出的最后一个矢量化实现1.323403 seconds在我的最后碰到了,而原始的嵌套循环版本将永远占用大量内存。这是代码-

%// Input parameter
s = 10000000;

%// Define 1D arrays corresponding to each nested loop
G1 = 1:10000:s;
G2 = 1:10000:s;

%// Perform the calculations in a vectorized manner in three parts:

%// Part1: Do vectorized "1000000000 - g1 - g2"
p1 = 1000000000 - bsxfun(@plus,G1,G2.'); %//'

%// Part2: Do vectorized operations for everything involving G1 (nested loop-I)
p2 = 200000*(1 + floor(-0.001 + 20000*(0.001 + (0.1 + 0.9./ (1 + (-1000000 + ...
    5000000* lambertw(power(exp(1), 0.2 + G1/5.E6)/5.))./1.E6))/ 100.)));

%// Part3: Do vectorized operations for everything involving G2 (nested loop-II)
p3 = 75000*(1 + floor(-0.001 + 20000*(0.002 + (0.2 + 0.8./(1 + (-8000000 + ...
    4000000* lambertw(2* power(exp(1),2 + G2/4.E6)))/8.E6)) /200.)));

%// Finally combine all parts into a 2D array output, which would be eta_gamma
eta_gamma_vectorized = floor(p1./bsxfun(@plus,p2,p3.')); %//'

%// Plot results
figure, contour(eta_gamma_vectorized)

这是情节的结果-

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章