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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
for i=1:2*n+2                                                              %生成2N+2阶的矩阵
+ E# f" ]+ Q6 p    if i==1
' g$ T- s# C) B7 {( D        f(i)=sigmar1(i)+P0;                                                 %第1层公式
6 s6 X8 F2 A7 V6 }        paRFor j=1:2*n+2# ^& N3 o, p) A( w  U  ^
* P2 B* h  n7 ~/ W( P$ v) J
            if j<=n/ i3 L. i; w. G1 \( W7 c$ i- L$ n
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %将线性方程组写成矩阵的形式7 c9 G/ i( Q$ n
            elseif j<=2*n- j3 v1 `1 @6 n  x
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
  R" D( ?: f6 X. y, w' y            elseif j==2*n+13 H. @+ z' J  ?4 f4 K, c' c. A
                KK(i,j)=equationsToMatrix(f(i),epsilon0);
  x# Q$ y6 V1 F7 z/ X& J' K, O            else
0 h+ d' V! ^9 @  _. Z                KK(i,j)=equationsToMatrix(f(i),gama0);
) I7 A3 t% l; ?) h. e$ Q            end
" j) c: m, o* M9 S6 `        end
. F: ~) s0 z1 `5 H    elseif i<=n
$ J! ~! A. b8 ~! B& S4 F        f(i)=Ur1(i-1)-Ur2(i);                                             %第2层到n层公式
+ X! r$ F4 J8 _8 i. b% B        for j=1:2*n+2: c, V9 b2 @9 c: C, d. o- w+ M
            if j<=n6 O% G( I1 y% j
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);
( L2 `6 E4 n* f            elseif j<=2*n
" J+ X, Z" X: R4 ?                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);/ _. O3 r0 \% p  _. x% K
            elseif j==2*n+1+ X0 I7 p% ~& s. p& t0 [
                KK(i,j)=equationsToMatrix(f(i),epsilon0);" q& t4 g. ?) \$ ?) w# A) E
            else6 g  I- v4 r2 y+ ~5 j
                KK(i,j)=equationsToMatrix(f(i),gama0);
3 e$ m( t, O, c. M4 [$ [            end- Z6 {$ @. W* `
        end7 R6 U* Y3 |6 Y
    elseif i<=2*n-13 U% k! f, @& F1 z. G$ v  D
        f(i)=sigmar1(i-n)-sigmar2(i-n+1);                                 %第N+1层到2N-1层公式
% \+ Q3 Z& M4 l        for j=1:2*n+2
' O& L- _  |& f# g0 B* {: t$ w5 `3 v            if j<=n5 o# b; D3 o' ]& J, }
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %生成2N+2阶的矩阵
( X7 q& r( f# x: \- J/ @9 |9 y            elseif j<=2*n
* V$ w3 O. z# S  K# Q                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
4 }- `4 w/ m5 i6 g1 q            elseif j==2*n+1( ^/ R  ]# Z: @% ?7 A
                KK(i,j)=equationsToMatrix(f(i),epsilon0);
- q% G+ T# U8 |7 L* [            else5 w8 U: ]- p' L) p) t$ K6 O: S2 {
                KK(i,j)=equationsToMatrix(f(i),gama0);
# p- Z# G/ g# P! {8 ?& q            end
/ P6 I: S, A& q& \5 q. {- A1 B        end/ g: F* S) _( {/ s5 {
    elseif i==2*n
' F9 d) T- \5 @& P& v        f(i)=sigmar1(n);                                                   %第2*N层公式
9 w" j# y; N6 j- L8 x        for j=1:2*n+2
9 e2 V0 N! B0 R6 J! o, e* f) {4 u            if j<=n, V6 ]7 m# f  s
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);1 W5 [6 x, r" Q" k7 Q
            elseif j<=2*n( X; s2 c/ H* ^, g3 z+ [
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
* P! O, v' K; T" p1 y7 p) s, n            elseif j==2*n+1
5 _8 c6 |- K9 I; u5 p1 C6 d                KK(i,j)=equationsToMatrix(f(i),epsilon0);& m5 I3 H/ a6 n3 {% l% l
            else- K8 k5 v. Z0 L4 D! u
                KK(i,j)=equationsToMatrix(f(i),gama0);' ~# k- w8 J6 R4 V- S( [1 d+ U8 g( O
            end/ H. K/ G# ?6 k6 F6 h7 m
        end
  B: J+ x+ C: j% e' X    elseif i==2*n+1* A& O3 b: Y9 @) m
        for j=1:2*n+2! m. \& i5 B7 ^  K
            if j<=n
$ F9 u4 q' q8 `3 p                KK(i,j)=xxD(j);1 b& J8 F5 j. R1 D+ m  O" l: R
            elseif j<=2*n, P+ [" K# \+ i' h( H
                KK(i,j)=xxE(j-n);
* I5 f' z! s+ H4 ]7 i4 }) X& d            elseif j==2*n+1  J* |- a2 T7 Q
                KK(i,j)=tempepsilonx;3 l- p, G4 _0 Y4 r( n5 ^" P
            else
- e. z' P* P) z1 Z                KK(i,j)=tempgamax;: n7 b7 j. q- g% {
            end) [0 A5 l1 s, _$ N5 D' T6 ]
        end1 b( S/ C6 }# Z$ u) x
    elseif i==2*n+2% U+ k) o* A& x
        for j=1:2*n+2
8 K9 K6 f$ v2 [" E% \            if j<=n6 Q! T- W0 @0 e$ |, z
                KK(i,j)=yyD(j);
# h8 p6 G' ^( _0 H0 b" Z3 p            elseif j<=2*n
$ P: Z8 J  ]" Y4 F1 n" T$ ?/ K                KK(i,j)=yyE(j-n);$ ^1 B4 p% F- m3 S' S
            elseif j==2*n+11 L0 {+ ?. X: L
                KK(i,j)=tempepsilony;3 o. f* q! Q) M' z- m. L; |
            else
; t, F' n4 u4 x4 _                KK(i,j)=tempgamay;5 j# j4 G" P: j8 Y: c( D" T$ s
            end
- z( G4 x. _+ Y# m  l        end
3 \1 u& L1 B' G- c* h    end
' ^' i3 F' i5 o6 ~( a  nend
+ n3 _( l+ Q6 n) B+ M想把其中的一部分for循环改成parfor循环,但是在运行时会出现错误
; J* h, _4 z8 iAnalyzing and transferring files to the workers ...done.
3 J! j! L' }$ }$ B1 Q3 ?% m- I6 P错误使用 Matrix_Of_Coefficient_K (line 195)
3 i  w* j; H, i& n0 @  P) X/ T在 'gama0' 的工作进程上引发了 UndefinedFunction 错误。这可能是因为在这
4 z4 a0 T0 ~$ y2 @& F0 l些工作进程上无法访问包含 'gama0' 的文件。使用 addAttachedFiles(pool,
1 Q0 y5 e0 z, \" h/ n: ^files) 指定要附加的必要文件。有关详细信息,请参阅0 W7 V. ~  P% l2 b, k" t
"parallel.Pool/addAttachedFiles" 的文档。4 C, M: ~9 Z2 X/ B5 g

4 O  p- `+ \5 s) G原因:
- ^6 D9 i( d! D( @2 [3 u5 {    未定义函数或变量 'gama0'。" V8 P- e4 f9 d

该用户从未签到

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-8-16 03:24 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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