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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
for i=1:2*n+2                                                              %生成2N+2阶的矩阵% S/ V. @8 f  L+ ~+ ?
    if i==1
3 ]7 t' t1 y- B, d. X        f(i)=sigmar1(i)+P0;                                                 %第1层公式4 ~1 W* ?% s# V: d+ C; [- C
        paRFor j=1:2*n+2
! W4 x9 M) {) A& z" l
; w1 T6 I6 d8 M' o6 Z+ A            if j<=n
; F% p% g+ @, _7 x                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %将线性方程组写成矩阵的形式
7 }9 K+ _# C8 t4 ?9 K: G7 n            elseif j<=2*n! n- ~/ Y! }- ?: A- `
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
# d( s6 w' l$ |2 E; e6 s, N            elseif j==2*n+1
0 o# I3 q$ O, n/ r9 @5 g                KK(i,j)=equationsToMatrix(f(i),epsilon0);5 b; H" h; S5 M
            else6 l) `8 {2 f' U% T2 \
                KK(i,j)=equationsToMatrix(f(i),gama0);
4 O3 d& ]/ B: J% W* @( X            end
% _% l6 l& x; o        end
3 ]6 M! q$ n: ~3 S6 ^- p    elseif i<=n
3 E# d4 [7 \8 V        f(i)=Ur1(i-1)-Ur2(i);                                             %第2层到n层公式0 n' w, z5 h* Y5 ~" I
        for j=1:2*n+2
- b/ ^- e# ^) @! R6 v3 d! w            if j<=n9 M2 S1 H6 `/ |; E) i
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);* Y4 l& S! J4 r; O) U. o
            elseif j<=2*n1 j4 g( G/ n1 S9 `$ Z. N2 o2 F
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);! m( M/ m/ c' e& z$ X
            elseif j==2*n+1% k+ A3 n! a' o* G+ T/ @9 e, q
                KK(i,j)=equationsToMatrix(f(i),epsilon0);' X* {6 S! \5 t& }
            else
2 _3 W* A0 E+ W# L4 X8 J' K0 U                KK(i,j)=equationsToMatrix(f(i),gama0);  L1 n* q% D; n! @" k/ |" L
            end
) s( p" @: z5 F  \2 F4 J- s        end
9 E: h; }1 ?+ p, j    elseif i<=2*n-1
; F8 y$ }+ S# M9 A, F4 y        f(i)=sigmar1(i-n)-sigmar2(i-n+1);                                 %第N+1层到2N-1层公式
) k' o0 r% u+ K4 }        for j=1:2*n+2, h1 I+ q* {6 F5 ?6 y
            if j<=n
) `, `3 v) S" D4 `1 Z                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %生成2N+2阶的矩阵, l. |, G8 Q1 w- v4 I" |
            elseif j<=2*n
( t/ q: g3 w! v0 ?                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
3 ?; q4 g+ O) j; p7 N% T9 T            elseif j==2*n+1+ b4 j* c3 D& N5 U  ~8 G
                KK(i,j)=equationsToMatrix(f(i),epsilon0);
- C. y9 e7 j/ E8 h% g            else' ?8 n0 x9 o+ Y9 e1 {
                KK(i,j)=equationsToMatrix(f(i),gama0);
8 V$ R+ f6 c' m+ p/ I, ^            end
# y+ t: X* y+ o# m        end
& s) J2 y. ~! H/ H# A    elseif i==2*n# L% p- o' g6 e' ?; T! [1 F
        f(i)=sigmar1(n);                                                   %第2*N层公式7 V( F, Z9 }5 I4 b0 }, i
        for j=1:2*n+2
( k; J7 ~# x7 x5 O7 j0 ]0 o2 Z            if j<=n8 o. g( D5 Q' \9 Y
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);4 G6 J& T+ C# k; g
            elseif j<=2*n
+ Z, H! r/ Y; X                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
) }/ A" \1 m) [; I9 p. }- I            elseif j==2*n+1
, t, [8 }# \0 _; ]: ?+ F                KK(i,j)=equationsToMatrix(f(i),epsilon0);) `* Z  P0 P) F4 n4 w. @! q
            else& t4 F+ b" P8 m* D
                KK(i,j)=equationsToMatrix(f(i),gama0);* Q% V" M$ ^$ |! H0 v8 L: H
            end
( r& @  S( |" y0 s3 ^( {% k        end
- D; C; v# x  ~, T$ X) }  O0 e    elseif i==2*n+1: j8 J( c" k" s( ?$ H, |- B8 m2 c
        for j=1:2*n+2
, N  f# c% W4 w) d( a            if j<=n$ \3 c) P: Y# j& v9 F5 |
                KK(i,j)=xxD(j);: n9 E3 t- G9 e
            elseif j<=2*n
% {- k, D& ]. i% K% w' I                KK(i,j)=xxE(j-n);
: N5 x) U. X3 n$ Q/ \8 L            elseif j==2*n+1
$ i' o- Q- X4 h                KK(i,j)=tempepsilonx;, f9 p& z$ Y; m, v, H. y
            else! ?! S5 T# O/ _0 W' h0 ?2 e/ O4 E
                KK(i,j)=tempgamax;" d  ^! g& ^7 \, n: b  m
            end
5 z/ }9 K7 ~' z, }$ z; X* m5 m        end. ?9 ^8 D5 P$ y) H, [+ x! r* J2 ]
    elseif i==2*n+2
& I2 {4 ^) W  D+ o: ?2 v        for j=1:2*n+20 ?; M2 `: F2 s7 W
            if j<=n( J, |* O4 i& X, R- \' f
                KK(i,j)=yyD(j);/ O9 z8 `! v+ F9 ?0 ^
            elseif j<=2*n
, R. k3 b' `. ?* k  K                KK(i,j)=yyE(j-n);" X; ~  H! Q  {: E/ T0 T6 d
            elseif j==2*n+1$ @. T! K5 n) z9 _- I
                KK(i,j)=tempepsilony;  `, j5 @- b# \" o! w
            else
- k1 E+ H2 T7 Y3 ]5 L. Y                KK(i,j)=tempgamay;
- S$ h1 U, S0 S) p( X( T; A            end
( V  R4 a+ l! _3 ]- I+ M        end
: \9 R% u  I& u: Y, C- C    end. v1 _% U7 y+ h* y. F' D. M
end" a) o$ |) c0 I$ _, |' Y
想把其中的一部分for循环改成parfor循环,但是在运行时会出现错误
0 o3 E" y  |2 m5 jAnalyzing and transferring files to the workers ...done.
' l5 ]" V% \# a8 q5 j. z1 [错误使用 Matrix_Of_Coefficient_K (line 195)
/ n5 C- ?1 Q9 Z& p) ]3 P8 |在 'gama0' 的工作进程上引发了 UndefinedFunction 错误。这可能是因为在这
# _" H) u7 t1 O1 f% b) E9 E, X些工作进程上无法访问包含 'gama0' 的文件。使用 addAttachedFiles(pool,+ y9 Z, ~7 G( J" P' m6 @
files) 指定要附加的必要文件。有关详细信息,请参阅! C& d& v! K- M. m) _
"parallel.Pool/addAttachedFiles" 的文档。
$ }1 s. w2 v0 I
; M) d0 Y3 h! E1 |原因:8 W! q4 I/ e% ~2 i+ ]
    未定义函数或变量 'gama0'。
( \2 m, P# `  h5 b

该用户从未签到

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-24 01:35 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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