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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
for i=1:2*n+2                                                              %生成2N+2阶的矩阵
6 D" v1 J% A' ^2 D2 E    if i==1
, i* Q1 g* S0 ]        f(i)=sigmar1(i)+P0;                                                 %第1层公式
3 Q' w' i* l/ g1 g9 y/ r' G        paRFor j=1:2*n+25 u. n7 K' E- z% k$ N5 F1 ~
5 t& H8 r7 v) w1 J% d
            if j<=n
* M  A$ I- B3 \6 y- X1 |                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %将线性方程组写成矩阵的形式
1 o1 e. \8 `& Z( A- }. p            elseif j<=2*n
+ F$ |$ ^8 B  U* }- l% X8 v3 R                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);* Y# \! R2 n# e, S: h9 w) m6 O
            elseif j==2*n+1
$ |) L2 D4 r- a4 P9 V: y  a( b- R2 ^                KK(i,j)=equationsToMatrix(f(i),epsilon0);. \% P/ Z# R3 \; i3 `/ @; a* C1 s# V
            else
5 h. L- F0 @2 X; G                KK(i,j)=equationsToMatrix(f(i),gama0);" ~* O5 Y+ C4 d' S
            end
# J6 `( i, A! p5 I' b0 D        end
; N4 f$ H0 N0 V+ |1 \    elseif i<=n
/ x$ h9 Q0 c: g4 V& n) F2 x        f(i)=Ur1(i-1)-Ur2(i);                                             %第2层到n层公式$ t; k, T* c& r! e1 Y+ w# d: U
        for j=1:2*n+2/ S- F* g  s  x+ e, p
            if j<=n
, s, w' S5 f( m3 [* ?- [                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);
# n- T7 }. o8 f( N' L% f1 Y+ f            elseif j<=2*n
! H* {/ O7 j5 ~2 ~9 F7 m  T                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
+ q  F. v1 a6 f7 ^6 B$ e. {            elseif j==2*n+1
9 S7 D# t9 r+ j( x3 I                KK(i,j)=equationsToMatrix(f(i),epsilon0);1 Q/ B% j5 Y4 a% p# z
            else1 q" m6 j% ~  p0 U
                KK(i,j)=equationsToMatrix(f(i),gama0);! a2 T; Y; z7 r
            end4 e* O- J1 J1 P9 {" ^: o, X
        end
1 Z" v* `; _$ A. M3 Y; \    elseif i<=2*n-1: d5 _+ \  W, C( ?3 J
        f(i)=sigmar1(i-n)-sigmar2(i-n+1);                                 %第N+1层到2N-1层公式$ B6 _0 h3 Y! @
        for j=1:2*n+28 ?) v5 w! D6 Z& V1 j( E
            if j<=n
0 O1 @8 T; u, P8 h, V) c1 i                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %生成2N+2阶的矩阵& W: ~5 G% K! j: t
            elseif j<=2*n6 F! S& [7 t+ ^) n. d
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);$ R. V/ z$ R; z
            elseif j==2*n+1
2 p' y- G1 |% b$ U                KK(i,j)=equationsToMatrix(f(i),epsilon0);( K8 [1 X- ?' F
            else! o: k1 V+ h8 t1 ^" R
                KK(i,j)=equationsToMatrix(f(i),gama0);# ?7 Z! w1 M1 {
            end: |" g9 w- P$ S9 ^1 a
        end
  E& S. S4 ^7 _) l6 S1 @( J    elseif i==2*n
3 m! G# N+ g) `3 `9 e5 h! T5 h% C        f(i)=sigmar1(n);                                                   %第2*N层公式2 V- c; d0 @( m+ M- ]$ {; F' H
        for j=1:2*n+2
7 Q" q9 a8 L% w2 O+ B            if j<=n
9 n1 f& J3 K; f                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);1 M  N9 @9 b. K9 D7 {7 k
            elseif j<=2*n+ w  B+ f) B$ O# t
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
: W) x+ e/ F, u4 A            elseif j==2*n+1" I; ~, w/ o, j2 z* x- d& m! M
                KK(i,j)=equationsToMatrix(f(i),epsilon0);
- }9 c, O" u* C7 N; D            else0 ?% G: p/ W" w4 ~- H  ]/ K0 G
                KK(i,j)=equationsToMatrix(f(i),gama0);
  ]9 L( c2 m$ X- g  _            end+ x4 O' i% W, Y3 L
        end
% P* h/ x0 t9 l* J: q) f# ~' C/ j    elseif i==2*n+16 p: o  \3 X! a7 Z9 C1 F% w
        for j=1:2*n+2
  {4 ?# p. h$ E7 _            if j<=n& V, ^4 c" E1 I! J5 P" ?
                KK(i,j)=xxD(j);
# C  }. m7 t0 Q/ R            elseif j<=2*n$ P6 {" i0 B/ ^3 v7 G2 l! z
                KK(i,j)=xxE(j-n);
" Z+ l8 u) p; s. v            elseif j==2*n+1
) D- U4 c) z& g' G0 |/ x: m) Y                KK(i,j)=tempepsilonx;
: c# Q" U- X: m! m$ o. P! ?4 s, q            else
, F. ]# A: Z8 Z( A                KK(i,j)=tempgamax;+ B3 _0 B+ b' }2 g$ v0 \  n
            end- w- P" c4 a( d5 G8 V
        end$ `1 ^9 G3 }) i% G1 ]% W
    elseif i==2*n+2
" l/ u3 c( k+ C% p        for j=1:2*n+2, Z3 R3 g$ p7 r! A/ e
            if j<=n. x  K$ f+ T; G
                KK(i,j)=yyD(j);
# d/ s" n* U- G. S# r            elseif j<=2*n
* a/ j. \; u8 p0 D- B* b8 t; \1 q                KK(i,j)=yyE(j-n);& S9 N* c2 G( Q  M1 D* A
            elseif j==2*n+1
! P$ U1 {# }# M/ U! w. K                KK(i,j)=tempepsilony;- n  l7 c2 `$ U0 G8 Z7 s7 }
            else; @9 b+ P) ^9 o' J3 ^" R4 h
                KK(i,j)=tempgamay;- Z. }6 r" `2 Z9 x% k8 x
            end
8 [: n* R  U& S2 P: b5 _        end1 ~: L3 ]; d: H$ X- m; T
    end  H) }$ y) e- J" ?! ^5 y
end5 s7 j1 P$ S! j
想把其中的一部分for循环改成parfor循环,但是在运行时会出现错误
2 ^- v$ Y8 ]+ U: [  `9 l6 MAnalyzing and transferring files to the workers ...done.1 H; a9 b' [3 Z2 k/ H
错误使用 Matrix_Of_Coefficient_K (line 195)) A% ~  O3 r1 ^3 n4 m: j
在 'gama0' 的工作进程上引发了 UndefinedFunction 错误。这可能是因为在这+ u% H$ I6 O+ U& W& L4 T
些工作进程上无法访问包含 'gama0' 的文件。使用 addAttachedFiles(pool,
6 T" R! h+ y& sfiles) 指定要附加的必要文件。有关详细信息,请参阅
, e( [/ t. d7 E1 o  \+ }! a"parallel.Pool/addAttachedFiles" 的文档。
" Z2 E$ m( d6 \" K9 h3 ]% ^- v6 {9 x( Q. V
原因:7 F# M' |- U; x* }* \8 E
    未定义函数或变量 'gama0'。
( b: L# C0 W) X, \

该用户从未签到

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-3 09:48 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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