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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
for i=1:2*n+2                                                              %生成2N+2阶的矩阵) ~( i! U) {, c, B" O3 _
    if i==1% F# F; n/ C3 J9 [
        f(i)=sigmar1(i)+P0;                                                 %第1层公式
" [6 ^8 B. W* q; V* v6 K& G        paRFor j=1:2*n+25 \3 k; w: D5 s( @1 z
: B6 a9 v7 l  u, W5 G+ R8 ?& I$ A
            if j<=n3 L4 O3 V  ]' U* J
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %将线性方程组写成矩阵的形式0 O: E7 Q1 i# \7 W" R
            elseif j<=2*n
, v- G$ V) L- B                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);2 @, U# M! E& n  u, T% p" ?
            elseif j==2*n+1' ^/ U9 |4 H2 E8 P! r8 e0 L& }
                KK(i,j)=equationsToMatrix(f(i),epsilon0);
8 _8 N( m) k3 N9 }1 K7 L7 H            else" n* ]) J# C5 |2 J- @
                KK(i,j)=equationsToMatrix(f(i),gama0);
& }) p) q; t! J5 F* P* ~5 n            end
! I7 y7 E5 ]9 W8 A9 k2 w4 H- J9 A5 c        end! h# ~; k" _! @, P: }2 m4 R
    elseif i<=n" G* |8 ^( @: b8 I$ n
        f(i)=Ur1(i-1)-Ur2(i);                                             %第2层到n层公式( q" h) y" F& K" k2 S8 \
        for j=1:2*n+2! Q- P) s+ V( |
            if j<=n5 ^6 {$ w! F" u' Y$ }  |
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);2 O5 i9 T$ q( c& N
            elseif j<=2*n* F( v0 S# R$ ]1 H( ?" v
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);" i% c3 d5 j' s# t; g, _
            elseif j==2*n+1
* ^, s& `/ B5 S1 k1 y$ c# S                KK(i,j)=equationsToMatrix(f(i),epsilon0);
/ `) B* R6 a: y+ w6 E2 v; n( x            else6 E. ]( ~5 }  L/ y' z: a4 w3 O
                KK(i,j)=equationsToMatrix(f(i),gama0);# U* w1 `0 ]1 U& ~3 a: R( k
            end
+ k7 B: o0 L7 e& ]" v        end
; S3 Z$ d5 j' d. W3 W# T    elseif i<=2*n-1
& {5 A! g2 Y' d. y' y5 I+ T        f(i)=sigmar1(i-n)-sigmar2(i-n+1);                                 %第N+1层到2N-1层公式
2 c9 `- T* x1 C8 u! a: ?+ S5 k        for j=1:2*n+28 I5 }4 X$ G- [
            if j<=n: n. h" w7 n$ B# u9 ^) e
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %生成2N+2阶的矩阵% Q' `; n( H" [! Z9 q% i
            elseif j<=2*n$ ?) e4 O9 F. m# G8 z
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);# M# X; t/ V/ ~2 d2 m
            elseif j==2*n+1
) z, p* n7 p5 @( G                KK(i,j)=equationsToMatrix(f(i),epsilon0);8 G% B6 }5 p0 _2 G# s
            else3 I" ^! ~4 A7 n7 m! C7 r& ]  |
                KK(i,j)=equationsToMatrix(f(i),gama0);0 v& v( Z* R, U8 P; o5 l
            end  Q+ C8 B9 i* h+ ?
        end
8 S# @) T$ W% R    elseif i==2*n
4 _" c% p1 z2 H1 ?3 b4 w4 l0 a' J4 f! p        f(i)=sigmar1(n);                                                   %第2*N层公式
% Z# C$ k7 h& H/ W! [& Z        for j=1:2*n+2
* X3 J* j/ Z9 U3 @3 W  |            if j<=n1 ?* ]( x8 K6 s' Y; f) _  m
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);/ @6 E# c# a, ^& N7 p& Z6 |3 H% f
            elseif j<=2*n* y$ g4 h6 q8 x1 ^, E. }9 o$ j" n
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
; w& c( y( z1 ^( D8 {            elseif j==2*n+14 o# |0 J. f# |: H- q
                KK(i,j)=equationsToMatrix(f(i),epsilon0);- f$ `! M3 y6 j
            else
# h( B0 @  Q( O7 J, s6 a                KK(i,j)=equationsToMatrix(f(i),gama0);
% R- m# G0 [. w- V9 b            end
5 t' v, T6 c$ G! E9 [0 C7 ?' R" i        end# Q4 m9 z; {3 ~( M5 @: `6 w0 R
    elseif i==2*n+1
" Q' N, e4 W! y; _8 H5 C7 k        for j=1:2*n+2
) C  `/ l, {9 f            if j<=n
2 j& F; d( R* A" t                KK(i,j)=xxD(j);
$ S$ E0 i( j$ G$ M/ ?5 Z            elseif j<=2*n
2 a. Q- L* o1 X0 U: v- i0 X                KK(i,j)=xxE(j-n);
" N# j* N$ r8 P1 K! i            elseif j==2*n+1% `  M% t2 U+ i' ~6 l# S- B
                KK(i,j)=tempepsilonx;
0 V6 E  b9 o) s5 q& h            else
9 Y! C2 F0 t  |  s                KK(i,j)=tempgamax;2 J- b6 P8 o* p/ R6 ^0 D- ?
            end& `# N1 `3 ?: j7 i. b3 ~
        end
7 b! v6 U& h* C    elseif i==2*n+2
: E. z( \0 ?+ o; K0 X+ ~+ u        for j=1:2*n+2
0 ~0 r+ f7 n- y" q0 ]            if j<=n- Q8 Y' p% |( n0 [3 G5 k6 }% W
                KK(i,j)=yyD(j);
' t' f/ F; g0 f. C3 p            elseif j<=2*n3 L# \6 q5 I4 F0 u( I% b& F" x
                KK(i,j)=yyE(j-n);
0 J: {0 N) s+ Q( {- m* x* T, J( B# c! }            elseif j==2*n+1( V: Q/ |+ b2 U$ C8 I
                KK(i,j)=tempepsilony;  S& r' F4 E- Y' I- ~- C' ~$ z
            else
  ^: i( p# Z: F6 v/ A# J' h                KK(i,j)=tempgamay;
3 I, J$ A( U( O  {* d" o! H- v            end
- Y7 `) p- Y- e' k5 x& r+ U+ z        end
, C3 N1 w0 C- o" q5 h! e- D    end
7 ?! U2 \& ?9 U, }  yend
& }% E; R( s9 l+ Z8 z6 m, i想把其中的一部分for循环改成parfor循环,但是在运行时会出现错误) [/ g9 i5 X( |/ C' e* h5 y1 _
Analyzing and transferring files to the workers ...done.3 n2 p4 y) k! P' d  C9 }
错误使用 Matrix_Of_Coefficient_K (line 195)
) C. a, |9 K6 s3 Z在 'gama0' 的工作进程上引发了 UndefinedFunction 错误。这可能是因为在这6 K9 p/ m$ J. V5 _9 N& N7 C
些工作进程上无法访问包含 'gama0' 的文件。使用 addAttachedFiles(pool,
' X% k+ G4 x# X# C. G# k& dfiles) 指定要附加的必要文件。有关详细信息,请参阅
& o$ d. E( G# \/ K  ?0 G( m"parallel.Pool/addAttachedFiles" 的文档。
. }% ~) x: f+ A1 u8 }2 @$ V2 j( J5 `
原因:5 ^' I8 X& D8 u" \3 z0 ?
    未定义函数或变量 'gama0'。2 ?/ O( H! {/ a0 Q1 `, }+ O* V

该用户从未签到

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-7-19 22:06 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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