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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
for i=1:2*n+2                                                              %生成2N+2阶的矩阵
/ P, k% o6 f. Y3 {9 s! S8 u! k    if i==1
. ^2 b4 t, ~1 g. p! I        f(i)=sigmar1(i)+P0;                                                 %第1层公式
$ S# |' D4 P* V0 C" p# Y        paRFor j=1:2*n+2
3 c, Q% Y: Q& M- F, ?) F3 f
5 {& I6 b5 ?0 @2 X8 K            if j<=n
0 F6 B8 a% D  P                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %将线性方程组写成矩阵的形式6 n' m3 @, K. F3 P+ U6 ?2 F5 k0 r
            elseif j<=2*n% ]. s/ h! v" G- V2 F0 k4 \
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);. }. i/ Q2 D2 X5 x, t% C$ I! N
            elseif j==2*n+1) c5 T' c& r+ y8 H* O' K
                KK(i,j)=equationsToMatrix(f(i),epsilon0);
& z* Z- q/ h# U3 [# @            else# k! e1 V! X9 }
                KK(i,j)=equationsToMatrix(f(i),gama0);
, }  |0 @6 e/ b/ B  M) |/ d$ g            end
5 P1 m; I2 H$ }$ I' A        end7 a* W$ d" Q6 S
    elseif i<=n
/ Y4 N( o3 ]2 y2 R7 B( r        f(i)=Ur1(i-1)-Ur2(i);                                             %第2层到n层公式
8 ], P8 N0 y* R' u; o3 L3 W0 y        for j=1:2*n+2. f* X: `% a+ E4 ?7 K6 p, t* F" R
            if j<=n
' v7 [% @# i  E( ]6 ^0 \+ A- w                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);% q, G/ w& }, _8 b1 R7 X5 [
            elseif j<=2*n% L9 r0 Y0 Y! ^9 w& ^. ]- U: d  A# ^
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
: F4 o$ W% E( U/ x/ t1 G            elseif j==2*n+1/ o; H/ ~# g3 M* y% t; }
                KK(i,j)=equationsToMatrix(f(i),epsilon0);  F, q5 x  t* }9 ^) ]( L
            else
/ X: [7 d' k7 }; }$ l$ L. U8 [                KK(i,j)=equationsToMatrix(f(i),gama0);
5 U! ]! s6 L* U' ^: o8 m            end$ N7 ^) d- J' t2 C& S" X" n
        end
- R; s. z% b/ u  H* l1 C    elseif i<=2*n-16 k# S/ l7 g9 ]1 F1 M- P
        f(i)=sigmar1(i-n)-sigmar2(i-n+1);                                 %第N+1层到2N-1层公式% L6 G' S  s( b  K+ p/ F
        for j=1:2*n+20 G# f. K! |- M
            if j<=n
0 |" @  Z0 f" ]0 s5 _                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %生成2N+2阶的矩阵
% V$ O: M: L  N            elseif j<=2*n
; {! j# `! o( s- T9 b3 f& h. r4 `                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);- _, l2 K. n0 n% {3 _3 o* B! T, ~
            elseif j==2*n+1
8 @) P9 u& I7 R. d: G                KK(i,j)=equationsToMatrix(f(i),epsilon0);/ a! K8 }/ d% Q2 H* t  J
            else3 p7 O) A1 [4 W% ?" h- [" a( Q
                KK(i,j)=equationsToMatrix(f(i),gama0);: H- a5 ]* j7 L
            end
: l5 F! e4 ]  F        end+ B  U  t% D4 f- A& B- E
    elseif i==2*n6 w! {1 |3 H2 J" R0 u9 Q
        f(i)=sigmar1(n);                                                   %第2*N层公式
; T7 R+ k" x7 K& W        for j=1:2*n+2
0 R2 ?. O8 H( j% S$ s4 Z- U2 t* ?            if j<=n7 k6 K, M3 M& s* s
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);9 {! T9 Y' j5 l7 ~& b& g- d
            elseif j<=2*n
2 K' L" ]' i2 L% Z0 {                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
, C! U0 `* ~8 `& m$ H" z9 D            elseif j==2*n+15 _6 g  F0 K- a4 z! f% t
                KK(i,j)=equationsToMatrix(f(i),epsilon0);
7 {  g" }5 v- C+ R3 l/ {$ b' A            else4 H3 z* J* a3 y8 @, Z+ J% v2 v
                KK(i,j)=equationsToMatrix(f(i),gama0);
7 y& Q7 _$ L$ q( ~( l            end6 W7 m  a; \3 v* M: P8 Z4 f2 T
        end
4 ?. p/ k& x- `: a    elseif i==2*n+1
7 B8 L* P3 J6 z( L: j: I( V) n0 H$ f        for j=1:2*n+2
$ q! [( Z7 p# S            if j<=n* I# w/ s$ x0 B/ G$ z' Z/ {
                KK(i,j)=xxD(j);7 m8 o4 a* y: }( p, Z
            elseif j<=2*n; A5 a( t9 S! [9 h( W  F7 f+ E
                KK(i,j)=xxE(j-n);
3 |& j5 Y, W, v. @            elseif j==2*n+1
: i1 c& S: n5 ]3 @% d                KK(i,j)=tempepsilonx;, I1 Y# H1 M5 K4 l4 x
            else% t* v) y1 r7 o! R& H( \
                KK(i,j)=tempgamax;; `6 u5 Q: I  k! C, D& w% c
            end# S1 t. b0 W3 Z* M3 z. l- n
        end
# ~; D! f- X6 t/ X( X( ~    elseif i==2*n+2. c  H8 N  D( A$ i. X; s, _/ c
        for j=1:2*n+2
. f9 a, k" F; i" l: i  ]& I            if j<=n: `6 E' n- t* p3 ?0 B+ G3 ~
                KK(i,j)=yyD(j);3 L0 \$ _3 d" P4 k; c
            elseif j<=2*n
5 f3 [4 p& B! s8 @, m' C                KK(i,j)=yyE(j-n);
% f# n4 e% o  q3 f: }            elseif j==2*n+13 R1 m/ T9 a* M3 b9 Q
                KK(i,j)=tempepsilony;
- j, b' k8 h% m* n5 T            else: p/ F$ g, f& a0 ?) i
                KK(i,j)=tempgamay;
: H! u) `5 k! @5 v            end
: X3 Y  N" k7 o& N, Q, O        end' n2 x/ O* |4 d+ Q. e2 I/ }% y
    end3 }' D5 E% Q& v  D
end
3 o. y6 B2 g' m& L6 \想把其中的一部分for循环改成parfor循环,但是在运行时会出现错误% P4 U$ c% ]9 I* j
Analyzing and transferring files to the workers ...done.
# U  E  u. r, x& o错误使用 Matrix_Of_Coefficient_K (line 195)# _2 }: m8 J, \
在 'gama0' 的工作进程上引发了 UndefinedFunction 错误。这可能是因为在这
: q( g6 C5 T# _7 |些工作进程上无法访问包含 'gama0' 的文件。使用 addAttachedFiles(pool,
* y6 v3 a) V6 J9 n, t. ~files) 指定要附加的必要文件。有关详细信息,请参阅
$ L& {% B# [; Z# z7 h9 k# z9 t: s"parallel.Pool/addAttachedFiles" 的文档。
7 V) ]9 f  M! X1 p! J# A+ d9 G4 q! T" c+ E
原因:: D6 I+ R4 S3 _+ Y
    未定义函数或变量 'gama0'。5 g* k* Y6 _4 e3 z

该用户从未签到

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-10-31 04:56 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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