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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
for i=1:2*n+2                                                              %生成2N+2阶的矩阵+ t4 m7 }' h/ @$ l8 G
    if i==1
( y! \' D* E. B5 S4 j# }/ F+ U        f(i)=sigmar1(i)+P0;                                                 %第1层公式
* e& ?$ Y% @( x& L8 a2 Y        paRFor j=1:2*n+2
) R( T8 ^' m; X* |, t+ y6 L' e( @! A) c8 E( B' x6 B7 R* T
            if j<=n* Y  l( X1 t, d8 w
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %将线性方程组写成矩阵的形式
% j  l, Y/ y$ |* Q            elseif j<=2*n* h/ S: g  g, Z5 R- i3 d2 D
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
. h' O+ B6 c9 L0 g, s            elseif j==2*n+1/ d3 m9 I+ v& l# v# \4 r
                KK(i,j)=equationsToMatrix(f(i),epsilon0);9 d5 n( ?- k. {6 k3 B* _
            else+ O0 R8 [+ A1 K% \
                KK(i,j)=equationsToMatrix(f(i),gama0);) y2 {* G( A4 X) r# F
            end( `( Y. a1 I$ s6 k
        end3 A- v6 J6 v1 v$ q; e5 ]* R9 \7 ~
    elseif i<=n
/ h* o& F% N6 U- j' ?        f(i)=Ur1(i-1)-Ur2(i);                                             %第2层到n层公式* H# g. w/ s$ i. b& g0 ~7 m
        for j=1:2*n+2
2 ~; F& }7 p2 s            if j<=n, p: t8 E# S* ^: o
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);
( j' ^5 @, M; b% B7 a            elseif j<=2*n% b" B' h& k& n7 `  |* i8 l
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
+ M1 q; O. z$ B1 e            elseif j==2*n+1
- |5 |# \+ H* ]  Z- Q6 R9 z                KK(i,j)=equationsToMatrix(f(i),epsilon0);" F, q6 `: u: L9 d# S
            else
7 F5 u$ M. n8 i9 a. O                KK(i,j)=equationsToMatrix(f(i),gama0);& d/ @6 S0 W9 j" U
            end; ?  _. F/ r6 r1 q- W/ B
        end
* N) Q5 V! a" U" V6 N7 Y& K    elseif i<=2*n-1  G' O6 m+ r) V
        f(i)=sigmar1(i-n)-sigmar2(i-n+1);                                 %第N+1层到2N-1层公式
/ X" U& S6 x6 y/ o1 D# E* H5 f        for j=1:2*n+2
" `4 }& V  C+ e( i  j            if j<=n
# b$ [' L3 M3 N  ^6 s2 J+ `: H                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %生成2N+2阶的矩阵
) f6 a" v$ o+ m            elseif j<=2*n% v, ^. J3 @4 y5 |2 w
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
3 X7 d5 P. G- U7 |% W            elseif j==2*n+1
' r2 V7 C- ~. [, g4 |* B                KK(i,j)=equationsToMatrix(f(i),epsilon0);2 M( `7 s, h) ?
            else/ m/ ~  m+ i8 i7 p) m% l3 g
                KK(i,j)=equationsToMatrix(f(i),gama0);* n  V, r* {, O2 c9 r
            end
1 w+ `! h  U3 S5 u/ r! x7 P: r        end8 D$ H/ y, u7 a9 h7 {6 n# L$ S
    elseif i==2*n& t( T5 ^0 _( U( G( Z
        f(i)=sigmar1(n);                                                   %第2*N层公式
) `1 b$ r6 j, j  T        for j=1:2*n+2
6 ]' c# I! n' m) n# K# u# x; j& e" f            if j<=n/ ]. J( S* w0 r8 b1 e0 r2 y; g7 H& B
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);, S+ O" s0 c$ M5 N! Q, R- Q
            elseif j<=2*n4 l& f4 `1 ?, B6 ], G" j
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
+ P3 [1 k6 a5 O) ]* @5 V            elseif j==2*n+1
, T3 R5 \" r0 S                KK(i,j)=equationsToMatrix(f(i),epsilon0);
5 x; t3 E2 U  z. z: x            else
  S8 x1 _2 A2 i2 k                KK(i,j)=equationsToMatrix(f(i),gama0);
2 @/ P2 C( j* {- D9 C4 _            end
( a6 P4 D% g. r0 A1 J. p  l# n        end
: S1 s+ J/ g% S% r5 t3 A  g    elseif i==2*n+1) G" p' y6 E: c3 |8 J
        for j=1:2*n+26 I' _0 g* x  D" n% W( ?
            if j<=n% F$ E% L" L: [7 G! p
                KK(i,j)=xxD(j);
1 J3 H! H5 ?9 P9 j: q$ r            elseif j<=2*n
+ \1 v7 ~$ K. T; I5 j! ?6 Q  r! l; ^                KK(i,j)=xxE(j-n);
+ h+ G' l+ T" S% o* q& p# t7 {            elseif j==2*n+1( d- t9 T. l' J7 k
                KK(i,j)=tempepsilonx;4 h$ g$ \5 S: L
            else
$ j5 A9 r4 }, `, _8 w  u                KK(i,j)=tempgamax;6 s, }& J7 R; x" ]6 S
            end
6 X: S% k* A: p" |1 {        end
0 n1 N* I3 r4 X    elseif i==2*n+2
5 F( ?4 b2 V% `5 R        for j=1:2*n+2
+ \' i; M; p1 {$ U            if j<=n
) \7 a. I, f3 Q; E4 t9 [                KK(i,j)=yyD(j);
! B+ m4 P% m/ E0 A3 Z            elseif j<=2*n- K% e8 r0 M9 k& K( W3 ~2 M
                KK(i,j)=yyE(j-n);
% i9 g1 B5 W" K0 o2 e" b* D            elseif j==2*n+1
6 ~7 F8 h6 l" @                KK(i,j)=tempepsilony;
+ U( v- o  X7 n/ j( y0 ]. Q2 L            else7 A, z7 ?$ a; j- t5 e; d) k8 `' a& R
                KK(i,j)=tempgamay;
7 c# Q' |9 X, ~1 _3 \0 i            end- C5 x( S9 E# ]& I6 s4 [" x4 e3 M
        end" Z& n! G+ b0 |3 P2 f) g! E
    end
* y+ Q  c9 E7 m' z! P, o- p3 yend" o& e1 w8 @" O) r8 O5 Y
想把其中的一部分for循环改成parfor循环,但是在运行时会出现错误2 N  ]3 \# f, F% F
Analyzing and transferring files to the workers ...done.7 R$ a6 S( K8 Y  z2 s, d  U6 U
错误使用 Matrix_Of_Coefficient_K (line 195)
2 G. X5 J& ^' \7 s. r在 'gama0' 的工作进程上引发了 UndefinedFunction 错误。这可能是因为在这9 w: T6 T6 X2 r0 I& Y- u$ z$ U
些工作进程上无法访问包含 'gama0' 的文件。使用 addAttachedFiles(pool,
$ P  N1 s: S) E! p* gfiles) 指定要附加的必要文件。有关详细信息,请参阅
" k: k3 p7 \) g3 b+ l"parallel.Pool/addAttachedFiles" 的文档。) j) ^# m7 }6 d4 ?# T( M

5 w8 d. U% ?) |# r  b原因:' e. J. i. w8 z; q5 a" v
    未定义函数或变量 'gama0'。4 _# N" r; H. ~

该用户从未签到

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-6-19 23:32 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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