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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
for i=1:2*n+2                                                              %生成2N+2阶的矩阵
" d! y5 I, \; r5 a- o: ^7 d) \    if i==16 g& o- ?# b. M+ L& v9 w( |% h
        f(i)=sigmar1(i)+P0;                                                 %第1层公式) |% G4 {5 W+ h! M0 L: K
        paRFor j=1:2*n+26 f% e) Q3 [% G- B" Z. i1 J
& z  y9 G7 Z! s) U3 W
            if j<=n
) `  V. u3 A+ S" k1 e$ ~                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %将线性方程组写成矩阵的形式( |+ i' b8 j$ r) z% d' \
            elseif j<=2*n) c7 z" K5 w# B  A9 o
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
+ m! K6 U3 _7 W* X            elseif j==2*n+1& X# E9 T& D( A  l/ u  S* N2 v
                KK(i,j)=equationsToMatrix(f(i),epsilon0);. I% g4 B  P! t" J# I6 m
            else
5 @& f. b( V, }/ _6 b' C                KK(i,j)=equationsToMatrix(f(i),gama0);
# E, ^* J$ O/ \) m5 D            end
- {6 W- a+ P5 f: ~% B        end5 |* O- z, P0 W) R$ z. P
    elseif i<=n) U# H: \4 k- l$ x
        f(i)=Ur1(i-1)-Ur2(i);                                             %第2层到n层公式7 v% p- `; _% U5 D# a7 J2 N( M9 N
        for j=1:2*n+22 d! \1 Q$ C- G! U5 ~
            if j<=n. a$ j  s2 r, I- H0 Z" W/ C
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);  n6 [3 C! r/ Z0 F9 m2 }
            elseif j<=2*n' c1 @2 _! w: M4 l
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);: t. ^! j. K" F4 x8 b
            elseif j==2*n+13 A* ?1 G% E; o
                KK(i,j)=equationsToMatrix(f(i),epsilon0);. H( U$ H5 A4 I+ E
            else# F; ^, _3 {0 d* ?
                KK(i,j)=equationsToMatrix(f(i),gama0);
6 {, o" B  y0 l, }, c9 a) g            end
7 v# q& g& ?1 U9 r        end
: L5 d) ^) y; I( r6 [    elseif i<=2*n-12 C$ ~  x. @: Y. y
        f(i)=sigmar1(i-n)-sigmar2(i-n+1);                                 %第N+1层到2N-1层公式
* Q0 ^4 g* E+ ^        for j=1:2*n+2
- x& w1 |- N5 G3 p            if j<=n
+ a2 |" Q7 P' s$ Z6 w" q! P# E4 r                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %生成2N+2阶的矩阵
; V- R" i5 Q! y* o6 j            elseif j<=2*n. n5 S" c8 _/ p! `/ g2 o
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
& W( @3 ]) s% U' w# N" P            elseif j==2*n+1& Y4 `0 J( w. L9 [. G; [
                KK(i,j)=equationsToMatrix(f(i),epsilon0);
7 Y5 }8 y7 b% R- L7 f            else
* T7 p4 _  Y" s" y' a                KK(i,j)=equationsToMatrix(f(i),gama0);
" c: x8 N0 S9 A9 D            end3 A; |1 g7 |- T# y( r
        end, ~9 l) ]6 z( S7 U7 c1 r$ N
    elseif i==2*n
6 b3 B6 z" Y8 t& t6 u# m* d        f(i)=sigmar1(n);                                                   %第2*N层公式4 W  }' c! n  d- B
        for j=1:2*n+2
6 M: L0 H9 z5 [5 K! ]4 h            if j<=n" Q6 M+ ^/ ]6 ?  F# ?$ t1 D
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);
6 Q% q/ y$ f3 c) k0 d% P) y            elseif j<=2*n" p/ B1 n! B! G# g7 l0 a) J5 v9 ]
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
( j; ?8 a0 z$ R+ d4 E9 f            elseif j==2*n+1% Y: {6 |; y( S7 M
                KK(i,j)=equationsToMatrix(f(i),epsilon0);+ [8 i% a: d/ n1 t' h& k
            else
# X, R- k. p4 H; e( b4 @' r3 o+ @                KK(i,j)=equationsToMatrix(f(i),gama0);
: F2 d' G8 Y, [            end/ G; w+ V" \$ S/ M. t7 R
        end
! [0 s4 o! G7 }; }5 S; p. y5 R    elseif i==2*n+1
$ `6 @% C, c% j( J        for j=1:2*n+22 L) Z- m$ S& b+ u1 x; _- j$ v" {
            if j<=n8 m# k* M/ w! w+ W/ o
                KK(i,j)=xxD(j);7 |% G' T! R" t* a
            elseif j<=2*n1 u, [/ @' ~% E
                KK(i,j)=xxE(j-n);" J3 V( `* J0 V2 C: v# i+ C
            elseif j==2*n+1) S3 `9 G1 H8 K7 Q' O5 K! E+ T
                KK(i,j)=tempepsilonx;1 O" }( M) G, q1 W9 S. F/ |
            else
( E2 u( Y: q3 L0 h/ {" H$ K                KK(i,j)=tempgamax;: _' r% H4 I" \5 l! q0 C
            end
  b$ _' D3 ]4 y+ E: B        end4 C! B4 R# `4 d4 f0 U( z
    elseif i==2*n+2( t  ^# W* ]% `
        for j=1:2*n+2
# C* ]% d* X6 \  F! o# d2 v            if j<=n  ?& `. v- I8 f# C
                KK(i,j)=yyD(j);1 H$ I5 D8 q4 k* K- N. d
            elseif j<=2*n
! J% y, U3 m! E8 u                KK(i,j)=yyE(j-n);
$ e( G  l+ _0 W            elseif j==2*n+1
7 o) Z4 L5 n6 l2 Z                KK(i,j)=tempepsilony;
" p, r8 v' o4 [# ]) S: C6 a" {            else6 l, {% o, u& |. ~* M
                KK(i,j)=tempgamay;  B& F' Y: g' Y& [/ o
            end5 X. c& ?4 d- Y# t: T+ b1 ^5 h
        end+ q$ k/ ]4 S- y9 j. c" V: t
    end" W* K! G. \1 S: G( [$ R
end1 Z4 Q* K5 _$ }: n; `$ y
想把其中的一部分for循环改成parfor循环,但是在运行时会出现错误
" i6 F0 Q6 B) I' W: F1 MAnalyzing and transferring files to the workers ...done.4 H: K5 @6 |3 E6 u% c/ g3 Z
错误使用 Matrix_Of_Coefficient_K (line 195). e8 ~# T7 R+ u( M9 m
在 'gama0' 的工作进程上引发了 UndefinedFunction 错误。这可能是因为在这
7 P0 Y- {0 S0 s) X些工作进程上无法访问包含 'gama0' 的文件。使用 addAttachedFiles(pool,, G: t6 H0 ~) |, L) ~4 C
files) 指定要附加的必要文件。有关详细信息,请参阅7 E8 `1 S4 O' ^& D, O" l9 ~; r
"parallel.Pool/addAttachedFiles" 的文档。
' B. x: p% D% S) @0 q3 v
/ t2 `/ T. `' L. ?1 P$ V原因:; V; w' E2 X) \
    未定义函数或变量 'gama0'。( J& l+ r. X& L9 A

该用户从未签到

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-1 00:29 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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