MATLAB如何实现并行运算

这篇文章给大家分享的是有关MATLAB如何实现并行运算的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、成都微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了兴安盟免费建站欢迎大家使用!

MATLAB如何实现并行运算

本来我是把全部过程都录完了的,不过转成GIF后比较大超过2兆了,没法上传,所以就录了部分。

录地时候忘把patch对象中的EdgeAlpha设为零的,所以patch的edge把前面的line给遮住了(在程序中我把line放前面了)。如果把patch中的EdgeAlpha设为0,连线才是红色的,或者你不用line也行,你直接把EdgeColor的值设为 'r' 也行。感觉这样应该好看点。

MATLAB如何实现并行运算

代码基本和昨天的一致,我只是把plotSTL出的patch对象的FaceAlpha值设为0了,在循环中再patch每个小块。

这里还是放出源码吧

clc
clear
close all

VertexData= stl2matlab('pig_stl.txt');
hPatch = plotSTL(VertexData,[1 1 0]);
hPatch.FaceAlpha = 0;
view(3)
set(gca,'NextPlot','add')
set(gca,'Clipping','off')
axis off
set(gca,'Units','nor')
set(gca,'Position',[0 0 1 1])
set(gca,'Color',get(gcf,'Color'))


X = VertexData{1};
Y = VertexData{2};
Z = VertexData{3};

for i = 1 : size(X,2)
    line( X(:,i) , Y(:,i) , Z(:,i) , 'Color' , 'r' , 'LineWidth' , 0.5)
    scatter3( X(:,i) , Y(:,i) , Z(:,i) , 'SizeData' , 20 , 'MarkerFaceColor' , 'y')
    patch( X(:,i) , Y(:,i) , Z(:,i) , [1 128/255 128/255] , 'FaceAlpha' , 0.4,'EdgeAlpha' , 0)
    drawnow
    i
end

MATLAB如何实现并行运算

来点有用的..

关于并行运算,我只知道个parfor,和for循环一样,parfor也是要搭配一个end。parfor和for循环的区别还是很大的。

  1. parfor中不能再嵌套一个parfor

  2. parfor只支持对整数进行循环

  3. parfor它不一定是按照顺序的(我不知道怎么描述,看下面这个例子吧)

  4. 每次循环都必须要求独立,也就是说下一次的循环不能依赖于上一次的循环,这个要求最恼人...

MATLAB如何实现并行运算

当我们使用parfor时,MATLAB会开若干个workspace,然后把这个循环分成若干个部分分别分配到那若干个workspace中同时计算。这样速度就快了好几倍。不过如果for循环几秒就能解决的事,用parfor可能会比for慢。

上面说了parfor下不能嵌套parfor,而我们有两重循环怎么办?解决办法是外层parfor,内层for,或者外层for,内层parfor........但是后者很慢....还有一个办法是把两层循环单层循环,such as:

A = magic(2000);
m = size(A,1);
n = size(A,2);
%A = reshape(A , m * n , 1);
tic
parfor k = 1:numel(A)
    i = mod(k - 1 , m) + 1;
    j = floor( (k - 1) / m ) + 1;
    A(k) = A(k) + i * j;% 单个的parfor中只能用向量,你这里写A(i,j)matlab就不干
end
A = reshape(A,m,n);
Method4 = toc;

感谢各位的阅读!关于“MATLAB如何实现并行运算”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!


网页标题:MATLAB如何实现并行运算
分享地址:http://myzitong.com/article/gghcec.html