您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關MATLAB如何實現并行運算的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
昨
本來我是把全部過程都錄完了的,不過轉成GIF后比較大超過2兆了,沒法上傳,所以就錄了部分。
錄地時候忘把patch對象中的EdgeAlpha設為零的,所以patch的edge把前面的line給遮住了(在程序中我把line放前面了)。如果把patch中的EdgeAlpha設為0,連線才是紅色的,或者你不用line也行,你直接把EdgeColor的值設為 'r' 也行。感覺這樣應該好看點。
代碼基本和昨天的一致,我只是把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
來點有用的..
關于并行運算,我只知道個parfor,和for循環一樣,parfor也是要搭配一個end。parfor和for循環的區別還是很大的。
parfor中不能再嵌套一個parfor
parfor只支持對整數進行循環
parfor它不一定是按照順序的(我不知道怎么描述,看下面這個例子吧)
每次循環都必須要求獨立,也就是說下一次的循環不能依賴于上一次的循環,這個要求最惱人...
當我們使用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如何實現并行運算”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。