Re: [討論] 改寫成parfor完成,但某些間隔會跑出錯誤!
※ 引述《candy88257 (阿泰斯)》之銘言:
: 例如:
: function connect=Qdata(v1,v2,v3)
: syms a
: data=[];
: steps=((v2-v1)/v3)+1;
: hwait=waitbar(0,'wait');
: for vv=v1:v3:v2
: str=['計算vv中,共',num2str((((v2-v1)/v3)+1)),'個vv,','第
: ',num2str((((vv-v1)/v3)+1)),'個vv'];
: waitbar((((vv-v1)/v3)+1)/steps,hwait,str);
: mm=[a,vv,3+a;a+vv,2+a,1+a;a,2*a,a+2*vv];
: eq=det(mm);
: eqans=solve(eq,'a');
: data=[data,eqans];
: end
: close(hwait);
: connect=data;
: end
: 上面那段要怎改寫成parfor並行運算?
: 求高手幫助!
: 感謝!
先不管data的順序,目前想先把parfor弄好
我自己改寫成這樣:
function connect=Qdata(v1,v2,v3) %v1最小值; v2 max; v3 間隔
matlabpool local 8
a=sym('a');
data=[];
vall=fix(((v2-v1)/v3)+1);
%會加個fix是因為常常有1.00這種東西出現,而程式就會跑出錯誤
parfor ii=1:vall
vv=v1+v3*(ii-1)
mm=[a,vv,3+a;a+vv,2+a,1+a;a,2*a,a+2*vv];
%真實的矩陣不方便放上來,但其他地方寫法應該依樣
eq=det(mm);
eqans=solve(eq,'a');
data=[data,eqans];
end
connect=data;
matlabpool close
end
首先,我測試過確定原版的for的寫法可以跑任何間隔(v3)以及任何v1~v2的範圍
但改成parfor後,發現v3=1 or 0.1都可以跑,但v3=0.01的時候(如:Qdata(0,5,0.01))
會跑出錯誤,而且是算到一半才出現錯誤(大約50%)
錯誤如下:
Error using parallel_function (line 589)
Error in MuPAD command: Invalid argument. [stdlib::from64]
Evaluating: symobj::fromString
Error in Qdata (line 8)
parfor ii=1:vall
字面上的意思是無效的參數
但是實在看不出來哪裡有無效的參數...
懇求高手幫助!!
感謝!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.130.17.157
→
04/25 10:41, , 1F
04/25 10:41, 1F
→
04/25 10:41, , 2F
04/25 10:41, 2F
→
04/25 10:41, , 3F
04/25 10:41, 3F
推
04/25 15:33, , 4F
04/25 15:33, 4F
→
04/25 16:10, , 5F
04/25 16:10, 5F
→
04/25 16:11, , 6F
04/25 16:11, 6F
→
04/25 16:11, , 7F
04/25 16:11, 7F
→
04/25 16:55, , 8F
04/25 16:55, 8F
→
04/25 16:57, , 9F
04/25 16:57, 9F
→
04/25 17:42, , 10F
04/25 17:42, 10F
→
04/25 17:44, , 11F
04/25 17:44, 11F
→
04/25 17:45, , 12F
04/25 17:45, 12F
→
04/25 17:45, , 13F
04/25 17:45, 13F
→
04/25 17:46, , 14F
04/25 17:46, 14F
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章