why 10 times faster after 'vpa' the sym matrix
17 ビュー (過去 30 日間)
古いコメントを表示
Hi lovely Matlab experts,
Could you please let me know the rationale behind the speed-up stated below? Is it a random case or not? Hope there's something I can keep in mind to have faster run.
symMat=subs(sym,{},{});
%symMat is a complex matrix whose elements are too long to show in command window
symMat
%*elapsed time ~20s*, digits=32 as default
vpa(symMat,32)
% *elapsed time ~5s*
More surprisingly is the following 'for' or 'parfor' loop will be 10 times faster after being 'vpa'ed as shown below, and I thought there's 'vpa' in the loop so escaping another vpa outside loop is good:
tic
for i=1:1000
digits(4)
vpa(subs(symMat(:,1),,)));
digits(32)
vpa(subs(symMat(:,2),,)));
end
toc %%*the above elapse ~1200s*
VpasymMat=vpa(symMat,32)
tic
for i=1:1000
digits(4)
vpa(subs(VpasymMat(:,1),,)));
digits(32)
vpa(subs(VpasymMat(:,2),,)));
end
toc %%*the above elapse 60-100s*
thanks,
best
J
0 件のコメント
採用された回答
Walter Roberson
2018 年 7 月 27 日
Why shouldn't it be faster? You are doing different operations. When you vpa() symMat ahead of time, then the vpa() pre-calculates most things that can be calculated as numeric, using fixed-point calculations. This can permit it to consolidate a number of values.
For example, you might have
m = x * (sin(sym(pi)/17) + int(tan(y),y,0,sym(pi)/4))^(1453/611)
This involves the indefinitely-precise value of sin(pi/17) and an integral that will probably produce a transcendental number, and involves taking the sum of those two to the 1453 power and taking the 611'th root of that -- more indefinitely precise numbers, all of which have to be held as indefinitely precise because the code does not know what you are going to do with m later. Repeat this a number of times and it is going to add up in time.
If, on the other hand, you vpa() this ahead of time, then it is going to reduce to
m = 0.22127813173338713927096201193632*x
which is comparatively fast to execute many times.
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!