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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
for i=1:2*n+2                                                              %生成2N+2阶的矩阵+ ?% m1 d/ J5 G
    if i==1) i4 ?+ I+ O* d$ Y
        f(i)=sigmar1(i)+P0;                                                 %第1层公式' b$ u& l+ t2 G+ k% y2 d( H# V( L, t
        paRFor j=1:2*n+2
5 l$ D9 A# z- Y/ e7 F1 d, }& x- m! y" x3 x# ^5 T
            if j<=n
( F" F5 R' |7 K3 q9 E                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %将线性方程组写成矩阵的形式$ C$ Q2 t) _8 v2 n# m
            elseif j<=2*n( R/ y' F, j2 q* C7 b; ~! B
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
9 b2 E5 ?- j: \& }            elseif j==2*n+16 o" G  K8 s* Q: Y/ Y& d
                KK(i,j)=equationsToMatrix(f(i),epsilon0);3 w- M) }! C( F& p
            else
3 P7 d: s+ d" o" O                KK(i,j)=equationsToMatrix(f(i),gama0);3 T1 u+ m8 C$ h3 T5 N0 T
            end
( |8 w6 u. G$ s8 F9 v$ a# C        end
4 J3 ]$ m. a; u6 X1 t) d    elseif i<=n
5 A  w- F3 \* f        f(i)=Ur1(i-1)-Ur2(i);                                             %第2层到n层公式, y! h& r6 `2 V4 u! Z, ?+ E* {+ p" @
        for j=1:2*n+2
0 a* O0 c$ }' L! H2 i  o8 A            if j<=n
! e  u" w) b( O% {! B4 w( N                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);# z: h, `6 x0 X7 W; K( l
            elseif j<=2*n
  j; o2 B  t- q  a) p% t) m                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);- G4 g3 |" u, d, i" u! l6 }
            elseif j==2*n+1
" |7 A1 Y8 [+ d0 g                KK(i,j)=equationsToMatrix(f(i),epsilon0);6 C2 b$ p3 b' y7 b" \
            else' I( T4 H* G; b& E3 H* o
                KK(i,j)=equationsToMatrix(f(i),gama0);
! m' T3 j$ @% _* O7 \4 ^            end' A& k; b' F; c' V" m+ u7 j( c. s% ]
        end: C5 y7 I/ ^9 z
    elseif i<=2*n-1
2 Q, ]( p/ ?; _        f(i)=sigmar1(i-n)-sigmar2(i-n+1);                                 %第N+1层到2N-1层公式
' D# p9 N( k/ U# p6 h' q, y        for j=1:2*n+2  Z2 S7 o) ]3 T# T- r: Y
            if j<=n
, b2 _0 R3 L. S: @                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %生成2N+2阶的矩阵
' S* q3 k( ^. m5 O/ ~            elseif j<=2*n1 ?, `' ^7 Y8 [/ S2 D: \* K3 F/ b. C1 }
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
8 A$ j7 n/ L# E  l0 r3 T            elseif j==2*n+18 v9 p8 P# l/ D  T7 O, q# g3 j
                KK(i,j)=equationsToMatrix(f(i),epsilon0);6 M7 m3 d; H" ^- i# x( F
            else2 N( L9 O! E' M4 |% l  {5 c
                KK(i,j)=equationsToMatrix(f(i),gama0);0 l# {* q/ x4 W% S) W
            end
$ ^5 K) m& I/ t+ u2 U        end1 X- v- i, d9 j
    elseif i==2*n
" ^; {+ x4 R: j2 L& o6 D, S# P        f(i)=sigmar1(n);                                                   %第2*N层公式
% B2 K+ |4 {0 b/ u2 s5 n) z        for j=1:2*n+2) D2 U3 p! X! r. k5 p. q9 C
            if j<=n& N/ ~: H1 y4 n7 ^- B3 O* H
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);" y; x' n) n2 Q
            elseif j<=2*n% r- _7 S! R9 k; Y) x& Y
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
/ _, a1 g3 g& H7 A) A& P0 z9 k            elseif j==2*n+1
8 o/ g* J. l( U' A( p' Q7 r                KK(i,j)=equationsToMatrix(f(i),epsilon0);
/ ~  f, J  Z- F* g            else/ f4 w! b( J! m: U9 ]+ ]( V" p! K
                KK(i,j)=equationsToMatrix(f(i),gama0);
4 [& G8 R9 d  ], r/ F  P& C            end
. G- A& W1 U" o% s, s1 {        end, ]: m8 ^5 j# {. J& b
    elseif i==2*n+1
8 P, ^3 h+ X; u( y& n# }) V; I        for j=1:2*n+2
) v. V) Y# t: O8 G) i! o            if j<=n
! q. ]; J! b- Q                KK(i,j)=xxD(j);7 X9 H* @' [: a( G
            elseif j<=2*n
5 s9 i6 U( `; Z                KK(i,j)=xxE(j-n);% C8 @! T6 l+ R. P, }
            elseif j==2*n+1
/ ]) ^4 R& h6 [" {2 Q2 A! ^                KK(i,j)=tempepsilonx;: d4 G' a* v" D
            else
/ B" `' C9 _& n/ y+ d                KK(i,j)=tempgamax;
3 ?6 @& t& t( |  q- b! i            end
0 O  i( d. X1 K  T- z        end
3 K6 m# H0 X8 C2 C0 y    elseif i==2*n+2
9 e4 Z! w5 I2 ~, u. v        for j=1:2*n+2
8 s8 l, n) T9 O& b4 z4 C            if j<=n1 c4 y1 o5 \8 \" }) j6 _2 a
                KK(i,j)=yyD(j);7 Y6 g! m8 b) O1 X% B3 ^: L# n1 `
            elseif j<=2*n/ X3 `% A' u, C6 i% A) K
                KK(i,j)=yyE(j-n);* T* ]: t' ^5 n" ~- g% k2 ~! g( {
            elseif j==2*n+1
$ `; _9 J# f' H: q5 e                KK(i,j)=tempepsilony;
! g: V8 J' S( k8 U" \# U            else
* P5 Y  v1 \8 n! K' M4 _# v                KK(i,j)=tempgamay;& q! o0 u" d. w# k
            end0 ^3 F- O4 G) i7 ^! O
        end
. h- f- f- A% f; x: t- U/ O    end. W2 s  R6 n$ }: j, P6 n; D2 t7 A; O
end8 r) G  Q# o" f' K0 g- Z* C/ }8 B
想把其中的一部分for循环改成parfor循环,但是在运行时会出现错误8 z" @3 i, o  P' I; _% r
Analyzing and transferring files to the workers ...done.& f9 h" e; x9 B8 D. a* \
错误使用 Matrix_Of_Coefficient_K (line 195)
+ q( t9 [% t9 J3 O) m& ]0 V在 'gama0' 的工作进程上引发了 UndefinedFunction 错误。这可能是因为在这
/ B1 {6 m, g3 r5 I. J些工作进程上无法访问包含 'gama0' 的文件。使用 addAttachedFiles(pool,
3 C1 n, g/ w+ e- F2 p! D) k* D4 f% Vfiles) 指定要附加的必要文件。有关详细信息,请参阅
- q6 q- W7 t8 }9 U- u2 ~' y"parallel.Pool/addAttachedFiles" 的文档。
7 ]: a2 Y& a: }. M% \
8 x' o8 K1 O* X" R6 k原因:
2 N/ r  ]8 ]( E9 Q$ k    未定义函数或变量 'gama0'。. G8 C" q1 ^6 N' l

该用户从未签到

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-11-23 22:30 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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