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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
for i=1:2*n+2                                                              %生成2N+2阶的矩阵
. S5 f7 w9 D. f0 c8 S( r    if i==1/ W& s4 d6 q( r" W1 x3 Z' d: _
        f(i)=sigmar1(i)+P0;                                                 %第1层公式
& h$ A( C% U: z, D& v. S        paRFor j=1:2*n+2
. E9 A# c  Q- s4 e# i7 x+ X/ |, x/ I& {& o! Z5 m
            if j<=n& _7 J9 P/ E% v* A7 p
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %将线性方程组写成矩阵的形式
8 k3 D# ]6 I6 r  G            elseif j<=2*n! b% B7 S% H* T; `6 @- F
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);; o, C% K6 N- y* y1 S
            elseif j==2*n+13 \8 @: @: \. p% C! p
                KK(i,j)=equationsToMatrix(f(i),epsilon0);
: H* V, W1 y" J+ }$ d! f  H            else
" h3 F/ g9 d: D                KK(i,j)=equationsToMatrix(f(i),gama0);) T* X0 ]1 C5 Z. `' z
            end, K8 a1 }  \; c% X2 M( }
        end3 B2 A1 ?5 U( l" n4 ?7 V8 ^& [
    elseif i<=n+ c6 _/ c8 m; y, W- g
        f(i)=Ur1(i-1)-Ur2(i);                                             %第2层到n层公式% j! M7 y* M/ `  V8 O, }
        for j=1:2*n+2! ]+ A2 B' d) L! f5 A2 D
            if j<=n6 C# h/ M: O7 m- ]+ v, R) [8 K
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);
* V- k% ]" s- A5 g0 U            elseif j<=2*n6 U- d1 c  Z$ a5 D. f0 p
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);9 n$ O( c) d- ~
            elseif j==2*n+1
& R4 C2 F1 x- [                KK(i,j)=equationsToMatrix(f(i),epsilon0);: u! W& ]! U" n& g
            else# b3 V1 r& @4 n9 [* H$ z; C  V7 p8 F
                KK(i,j)=equationsToMatrix(f(i),gama0);, p( R. a& B$ _* f
            end; z5 K5 G7 Y" I! |. H
        end8 @; w! n9 t" z! H
    elseif i<=2*n-19 [5 z- x- l3 f4 o5 u% ~0 R- k' b
        f(i)=sigmar1(i-n)-sigmar2(i-n+1);                                 %第N+1层到2N-1层公式$ w+ w) ^6 N$ w! p
        for j=1:2*n+27 Y5 {' M$ e8 M
            if j<=n
# A' A1 A8 T$ X: ]( z! L; O5 B5 e! J                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %生成2N+2阶的矩阵8 K1 D! x/ F) l4 p- E7 ~
            elseif j<=2*n
) ~7 L  L+ S$ s% l: v                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);& L+ C7 a4 f' C' N! G# q# r
            elseif j==2*n+1: @, ^% i# j3 ]+ t! }7 i
                KK(i,j)=equationsToMatrix(f(i),epsilon0);8 y9 L7 P3 x7 z0 s
            else4 G4 ~$ h1 A: _6 o0 f4 u1 p
                KK(i,j)=equationsToMatrix(f(i),gama0);
- V; S, j# L2 ~' T% @            end6 z+ s# ^$ \% d* ~7 w5 B
        end
- N) l' k* [6 |: w5 y& J" s    elseif i==2*n
! d8 H! s% g; G7 Y        f(i)=sigmar1(n);                                                   %第2*N层公式
# w) t- e1 L0 m8 t: v        for j=1:2*n+2$ \! o* w" s6 u4 u
            if j<=n# U+ L( T) N# B5 s7 E+ _$ b# ]- M) a7 i
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);
2 ^$ M: C  f+ W4 a1 v; F/ j7 i8 L            elseif j<=2*n
* w, ~. T4 p1 R- g4 G; K8 O                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);) Z8 w% p" N7 T% T/ D0 B% I; M2 q
            elseif j==2*n+1# m7 Z6 L/ w) Q( }
                KK(i,j)=equationsToMatrix(f(i),epsilon0);
% D& V6 O% U9 [            else
6 }, v& H1 K7 F" u$ o                KK(i,j)=equationsToMatrix(f(i),gama0);
* N* {/ T0 O. T  b" E3 o! m  e            end  c- d* |6 T! X/ F" N: _' b
        end- ?( K) n$ t2 U4 A+ @/ T8 I' J
    elseif i==2*n+1+ o" W( u5 I- w# p( N0 e2 [% Y
        for j=1:2*n+2
  f" n' G* {. M6 N; q3 T7 d            if j<=n0 E, j9 @0 D5 t" h( V! N
                KK(i,j)=xxD(j);
3 w9 M6 w9 a7 z  H8 L+ k& @7 F# j8 K            elseif j<=2*n
; t* W0 G7 H/ G. p5 ?5 ?                KK(i,j)=xxE(j-n);
% t5 C# }& m& T0 n) V            elseif j==2*n+1
& m* Z- J0 I4 H( }. h. x! U! ^" k                KK(i,j)=tempepsilonx;! m5 d- z' q) O( f0 E3 [; d  L( a
            else
/ M/ V' e- f( q+ l                KK(i,j)=tempgamax;
* y- y: O- M( \" _            end
7 [: p# @3 o! i3 g0 r( a        end
, ?9 {+ O: e* h% F1 g    elseif i==2*n+2+ D8 ~7 F% I4 o/ z; R3 V5 d' S
        for j=1:2*n+2
% l. D2 ^& o. X) ~            if j<=n
5 Z+ c; w6 I2 U+ i$ e9 u8 S                KK(i,j)=yyD(j);3 F6 t5 Q4 s  _
            elseif j<=2*n
5 |5 X* u. Y5 E* y( }! ]' G3 [  D                KK(i,j)=yyE(j-n);8 l5 k8 W, t. f+ s, q/ Y
            elseif j==2*n+1
; p* F2 y7 y& P0 o                KK(i,j)=tempepsilony;
8 N8 }4 T; b& I7 X. O) B            else
$ E& x! B: ~  k3 `7 A4 u  k+ ^                KK(i,j)=tempgamay;" Y+ t& e' Q7 _' V4 A% _3 Z3 Y4 ?( x
            end. ^. F+ E: F0 O$ @' p& ]
        end
7 d. W& h/ ~1 r. m1 y$ @. J0 P$ G! q    end
8 X6 Y  i5 W( V% F* A& W  uend
, T3 H9 w+ ~" X  w& q0 Z5 w- `! G想把其中的一部分for循环改成parfor循环,但是在运行时会出现错误
7 t; ?# u" Q4 S, h  E+ fAnalyzing and transferring files to the workers ...done.. J( l' d7 X* Z- d- M
错误使用 Matrix_Of_Coefficient_K (line 195)
0 i7 k3 f7 a# ~/ x; B& n在 'gama0' 的工作进程上引发了 UndefinedFunction 错误。这可能是因为在这7 g" T- I7 D; r7 ^/ M, H# v
些工作进程上无法访问包含 'gama0' 的文件。使用 addAttachedFiles(pool,  f( S. t* A; K% h' \, X& ~8 J& R
files) 指定要附加的必要文件。有关详细信息,请参阅4 q& T; @3 x- \7 W$ z% C
"parallel.Pool/addAttachedFiles" 的文档。) H' ?/ a0 R  [9 N9 ?( d
/ C: Q0 g! v; g9 d) \6 r- e8 o+ P( R  C
原因:
) G/ `& a% g" h) L* i* K    未定义函数或变量 'gama0'。
/ E$ P! f, _( J: c- u, Y$ G/ T

该用户从未签到

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 03:17 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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