matlab中如何使用并行运算进行多行语句同时运行 30

程序中有多条互不影响的语句,但是都是在调用统一个函数,按顺序逐条进行时间过长,如果能利用多核心并行运算可以节约很多时间,求问matlab中如何实现这种想法?就是这种形式的... 程序中有多条互不影响的语句,但是都是在调用统一个函数,按顺序逐条进行时间过长,如果能利用多核心并行运算可以节约很多时间,求问matlab中如何实现这种想法?
就是这种形式的程序:
S_NH4R = SRD(S_NH4(t),GD,D_NH4,Ri_NH4(t)) ;
S_NO2R = SRD(S_NO2(t),GD,D_NO2,Ri_NO2(t)) ;
S_NO3R = SRD(S_NO3(t),GD,D_NO3,Ri_NO3(t)) ;
S_SR = SRD(S_Ss(t),GD,D_S_S,Ri_Ss(t)) ;
展开
 我来答
匿名用户
2018-12-25
展开全部

可以尝试用 parfor 写入循环,也可以用 batch 命令进行批处理:

j = batch(fcn,N,{x1, ..., xn});
wait(j)   % Wait for the job to finish
diary(j)  % Display the diary
r = fetchOutputs(j); % Get results into a cell 
arrayr{1}            % Display resul

具体操作可以参考帮助文档。

像这样的问题其实不用并行计算也可以的,有其它方法也可以加快速度,比如使用bsxfun函数,可以同时计算A,B,C中元素:

C = bsxfun(fun, A, B)

像题主的程序中有四个同样的运算,就可以这样写:

C = bsxfun(SRD, SN,GD,DN,RN)

其中 C 包含了四个元素,SN,GD,DN,RN分别为函数SDR 输入的第一、二、三、四个参数矩阵(向量)

温厚还明澈丶赤子A
2018-12-25 · TA获得超过3174个赞
知道大有可为答主
回答量:4615
采纳率:6%
帮助的人:354万
展开全部
如果CPU利用率低,而计算慢的话,说明你的程序处理的数据量并不大,但是处理流程很复杂,里面肯定涉及了很多的类似于for循环的语句,使得程序的时间复杂度一下子就上去了。看了下面你的补充回答,好像和多核处理并行计算没关系的。虽然最新版的matlab支持这种运行方式,但感觉你似乎还用不到这么做。建议你还是优化一下你的算法。尽量减少for循环的次数,对于矩阵和向量运算,直接可以采用matlab现有的运算方法。
追问
我的SRD函数中使用for循环多次解微分方程和将数值代入结果的运算,这样的情况如何用矩阵简化呢?
每次for循环中有一次如下这种解方程,须循环约50次,并须将较多数值代入结果
SR1 = diff(SR) ;
SR2 = diff(SR,2) ;
SR = dsolve ( SR2==c-((2/r)*SR1) ,SR1(10^(-6))==0,SR(r_max)==S,r) ;
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式