找回密码
 注册
关于网站域名变更的通知
查看: 1083|回复: 3
打印 上一主题 下一主题

如何在parfor循环中使用之前定义过的符号变量而不会出错

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-3-22 13:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
for i=1:2*n+2                                                              %生成2N+2阶的矩阵
$ k6 C* u6 c. q5 P+ m( m    if i==1
- p* g3 H! Z3 ^) h" c        f(i)=sigmar1(i)+P0;                                                 %第1层公式
! n7 e& f2 F+ R! u" ^; r        paRFor j=1:2*n+2
, c, A  Z1 y  M4 _
. R4 M: ]- _; d5 m+ C; L$ W            if j<=n8 S# ^  u( q3 \! {& ]
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %将线性方程组写成矩阵的形式) A- o1 A! M/ W9 r' H
            elseif j<=2*n( O& C' v' _9 Z/ O
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
- g8 m5 g9 P# H6 T. |5 e9 j% S            elseif j==2*n+1" u8 Y8 ?7 v0 e0 Z* w8 U$ q; J
                KK(i,j)=equationsToMatrix(f(i),epsilon0);
2 g) Y0 Y, p; R% x$ j9 d- w1 O            else
( w. |1 i+ @  I& R5 [; l  f                KK(i,j)=equationsToMatrix(f(i),gama0);
8 v' M# p- u" Y8 e- t9 R            end+ Q; X' t7 q. t) ?
        end
; J, k! f% Z9 `4 p    elseif i<=n
( q3 O9 N5 y# G. v        f(i)=Ur1(i-1)-Ur2(i);                                             %第2层到n层公式/ c5 s) e! p# N% n
        for j=1:2*n+21 d, l9 D1 V+ K. ]# `* H
            if j<=n, g- y4 i1 J* ~6 P. B
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);
8 u$ p) ]5 o0 e            elseif j<=2*n
3 X4 O" l9 ?% r5 ?                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);+ J# ^* J1 h" p) m
            elseif j==2*n+1
! w: \+ y& D+ o8 w                KK(i,j)=equationsToMatrix(f(i),epsilon0);
5 ?( t- S3 b8 y) \            else
5 p/ M$ A/ z: _+ N: V8 d/ N0 N                KK(i,j)=equationsToMatrix(f(i),gama0);" v2 ~" H$ ?, \6 k- {9 K3 O3 P
            end% k' p3 G' V7 r- b' F
        end. w0 Z  `+ _6 W9 [! [0 u: j
    elseif i<=2*n-1: _! R$ |5 G: t  E" a6 ^6 |5 J( [
        f(i)=sigmar1(i-n)-sigmar2(i-n+1);                                 %第N+1层到2N-1层公式9 U; i6 H0 Q9 X4 c1 w, n; g
        for j=1:2*n+22 @$ O6 L% J* ]+ A4 H
            if j<=n
- L/ W9 ^6 D' C- S7 P2 _                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %生成2N+2阶的矩阵' o. D. Z5 b: R6 t' k
            elseif j<=2*n
) `% _& |  Q5 N: |+ Q- }                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);5 g) {0 Y+ u: a
            elseif j==2*n+1
) Q; F- H! P) `* m                KK(i,j)=equationsToMatrix(f(i),epsilon0);
2 J3 e9 R1 H* C2 x            else+ q) L) F( \  s7 V' H
                KK(i,j)=equationsToMatrix(f(i),gama0);
3 S, }) g# {! K& W( q, }" g            end
" I5 W5 w' o9 s# u        end8 j% z# l+ S& |- S
    elseif i==2*n' f! C3 ~' ]; \  J  |
        f(i)=sigmar1(n);                                                   %第2*N层公式
1 Y; j7 m. V4 y) x        for j=1:2*n+2
; b: S& O3 g1 M8 `            if j<=n/ Q: ]( ]" w0 P% n7 D( Y% o4 C! h
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);
$ |! H% u6 @/ o            elseif j<=2*n+ {$ X: x4 b7 O8 \" U
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
! O  M7 F' R6 `1 Y5 Z4 k            elseif j==2*n+1
3 t! A" S# S5 F1 o                KK(i,j)=equationsToMatrix(f(i),epsilon0);4 D3 P$ W3 f5 |# T
            else
1 B0 K+ {. D" |& S  d                KK(i,j)=equationsToMatrix(f(i),gama0);
# h, z" p8 D* z$ u0 a% m            end
% g9 f% c# r0 o7 u, w# A        end
9 b* X1 s, \8 s3 @: \+ l    elseif i==2*n+1- y- P2 {+ Z. s* K* ?3 h0 I* Z
        for j=1:2*n+2- b. _/ T& a, f9 z8 G9 X
            if j<=n
$ K9 W3 U1 s2 j5 h! A                KK(i,j)=xxD(j);/ U; `6 x1 d: Y* v8 r; W
            elseif j<=2*n
/ a+ U) c8 z. b$ Y; u                KK(i,j)=xxE(j-n);
* R; }3 [' ~1 ?  J5 f            elseif j==2*n+1
% _/ C- v" D- r                KK(i,j)=tempepsilonx;
) f( t& P/ V$ q- R. T( H: b, v3 ~            else
, A7 P+ n  i& T6 d                KK(i,j)=tempgamax;9 M" B9 x, W3 p+ ~! t
            end
, h# p" F0 z$ M- w        end
$ \# _; Y; ]5 X2 D' T; Q    elseif i==2*n+2. f) }  E' H/ A) W- w4 ~" H
        for j=1:2*n+2
: t5 w* C1 Y" G4 m7 p$ Z            if j<=n
. ^2 u1 y8 u, L+ H                KK(i,j)=yyD(j);! ^- w5 Q/ \( F/ |6 R
            elseif j<=2*n
/ q& t& P3 ]( l7 o% h1 D                KK(i,j)=yyE(j-n);
! _1 B: P) T0 e3 k6 M            elseif j==2*n+15 N1 a$ Z' n" a+ k5 T6 ^0 B
                KK(i,j)=tempepsilony;0 {  z6 Z. |, B6 p- R+ [
            else
$ \8 T: J! J3 z3 s/ }! Z3 G                KK(i,j)=tempgamay;
! o: q* e* l- b( l4 I- V0 e            end
3 ]- ^5 M1 o' f) x; f9 P        end2 m+ g0 @0 ]7 A, e
    end
$ Z: ~. B3 n* T6 i- jend
* z6 s$ Y0 Q: k5 G. g想把其中的一部分for循环改成parfor循环,但是在运行时会出现错误/ w: h# P. M4 ~. c. X7 J  a- B
Analyzing and transferring files to the workers ...done.. S3 J5 K: }3 B& I" z
错误使用 Matrix_Of_Coefficient_K (line 195): v4 F9 C" F+ }( y
在 'gama0' 的工作进程上引发了 UndefinedFunction 错误。这可能是因为在这; v7 X( S, c! h: L; A2 v
些工作进程上无法访问包含 'gama0' 的文件。使用 addAttachedFiles(pool,9 o3 f4 e( F3 Y/ W5 ?3 Y
files) 指定要附加的必要文件。有关详细信息,请参阅
, U4 p' x4 [5 y5 m4 T"parallel.Pool/addAttachedFiles" 的文档。3 a/ [3 c9 {1 L) B- S9 o

" C; P) p2 ~: o1 g- V% S原因:, P5 e$ ^+ i2 Y1 R# a% V  C; {$ K
    未定义函数或变量 'gama0'。- f- f: G7 M; o9 ?2 Q0 W4 I

该用户从未签到

2#
发表于 2021-3-22 14:05 | 只看该作者
帮你顶一下

该用户从未签到

3#
发表于 2021-3-22 15:08 | 只看该作者
我的解决办法是运算部分 弄成函数   函数里面需要用的是 数据用 函数输入方式传递,这样就避免很多的 par 运行过程中的 参数隔离检查报错,而且弄成函数后 循环体看着也简单明了。

该用户从未签到

4#
发表于 2021-3-22 15:23 | 只看该作者
来学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-5 23:26 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表