我有一个脚本,可以为 for 循环中的许多参数求解微分方程系统。(迭代是完全独立的,但在每次迭代结束时,都会根据计算结果修改一个大矩阵(mat))。这是代码:(B是一个包含参数的矩阵)
mat=zeros(20000,1);
for n=1:20000
prop=B(n,:); % B is a (20000 * 2 ) matrix that contains U and V parameters
U=prop(1);
V=prop(2);
options=odeset('RelTol',1e-6,'AbsTol',1e-20);
[T,X]=ode45(@acceleration,tspan,x0,options);
rad=X(:,1);
if max(rad)<radius % radius is a constant
mat(n)=1;
end
function xprime=acceleration(T,X)
.
.
.
end
首先我尝试使用parfor,但是因为加速函数(ode45输入)被定义为内联函数,(为了获得更好的性能)我不能这样做。
我可以打开 4 个 MATLAB 会话(我的 CPU 有 4 个内核)并在每个会话中单独运行代码,而不是修改代码以将加速实现为单独的函数,因此,使用 parfor?它的性能是在一个会话上运行的 4 倍吗?(或者它是否提供与并行代码相同的性能?-在并行代码中我无法定义内联函数-)(在 Windows 上)