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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
for i=1:2*n+2                                                              %生成2N+2阶的矩阵# d( c) c4 ~/ g4 i- [
    if i==1
( p3 q9 H9 T) M) D8 f        f(i)=sigmar1(i)+P0;                                                 %第1层公式
( J$ V8 B+ i& g" [  i! B$ s1 X        paRFor j=1:2*n+2" c3 [* h2 H& V% ^

3 O/ D; O, s9 J" a            if j<=n1 Z" @8 C8 U8 l/ }  {8 i. Q$ h
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %将线性方程组写成矩阵的形式/ c8 s9 g5 }+ ^$ l2 o
            elseif j<=2*n3 q: c/ \* Y# Z5 l& A$ A# s
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
: C; Y0 Y; s7 N            elseif j==2*n+1
; j0 Q( q% X2 A5 y5 S                KK(i,j)=equationsToMatrix(f(i),epsilon0);
/ U0 j" J$ s6 \- H' ?            else
  g1 b) o5 y8 d  A; E+ j                KK(i,j)=equationsToMatrix(f(i),gama0);
6 ^/ [' b2 J5 s3 M+ w% m            end
+ G/ D9 j) R! K$ m; [( p        end2 r3 f; ^5 w: P7 Q6 ]. v- ?2 w
    elseif i<=n
- @5 l) m3 E! i/ V3 y6 ~  U        f(i)=Ur1(i-1)-Ur2(i);                                             %第2层到n层公式: ]7 {, h" [3 Y& Q7 ?( u+ Y
        for j=1:2*n+2) [8 h2 `) P; Q# {  h9 C; `
            if j<=n9 h1 E; x  i! Y- ]$ _% ^& @# b
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);2 e6 Z' z- U6 E1 j& o
            elseif j<=2*n0 f& [- ^" W* N2 [, c5 D7 T5 K
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
" U7 r+ c- x+ N0 }0 E# }0 }            elseif j==2*n+1* d, k! D# K4 g* h
                KK(i,j)=equationsToMatrix(f(i),epsilon0);
, Z$ M4 O  D5 }# h  A: y0 Y            else! P$ c* h; [* C7 p
                KK(i,j)=equationsToMatrix(f(i),gama0);
  a  m* X+ V$ I+ D; `' D4 d. D4 z            end5 W& X( x  c! O# u0 R3 m
        end0 k* i. ?, ~. x1 r( p" e
    elseif i<=2*n-1# n" f& h; K$ l9 J
        f(i)=sigmar1(i-n)-sigmar2(i-n+1);                                 %第N+1层到2N-1层公式
6 E/ j; H" y% j, `        for j=1:2*n+2) Q7 Z% o1 w3 i2 B" S
            if j<=n
' A; t1 E5 t& |0 V0 ?& X: ~2 c0 l                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %生成2N+2阶的矩阵% K! P9 Z4 p, _. _5 ?9 `
            elseif j<=2*n
; W5 `- P' F. c# K                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
+ }+ j7 ]) e( j9 I5 C* X            elseif j==2*n+12 f# i8 m4 p( ]' [. O9 b: O
                KK(i,j)=equationsToMatrix(f(i),epsilon0);; t3 @4 I( j/ D( Q: p
            else
* O$ m2 m4 G& Y                KK(i,j)=equationsToMatrix(f(i),gama0);2 M2 T3 T- h( q/ o# p! J
            end
# f0 e  [: m" k* I8 T# X: z6 T0 U0 d3 V        end
5 |& J+ K7 }% I    elseif i==2*n
# H$ e  ?6 e( F& L/ v. Z        f(i)=sigmar1(n);                                                   %第2*N层公式1 R& |7 x7 I; Z6 g0 \( B
        for j=1:2*n+2
* S4 g, \. a# d: r# X0 s            if j<=n
/ a! q4 y# x6 C- Y' L                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);
; d6 r9 c2 S0 j# p* c6 q7 X$ K            elseif j<=2*n
9 {' t$ I% ^. s. }3 ?0 @5 e8 O                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
1 g  W$ P/ i: T* ?            elseif j==2*n+1
; a/ ^# B; O5 u5 c7 T9 @- c$ k  V" e                KK(i,j)=equationsToMatrix(f(i),epsilon0);
- O) v. Z" N6 H. n, W            else" q/ M' H& f3 ?4 Y) t! _" O
                KK(i,j)=equationsToMatrix(f(i),gama0);+ t7 L7 p! Z% x
            end
: h1 O5 {) c# C# I        end  z* E* T( f. J; ~
    elseif i==2*n+1: E* H7 ~6 l) n* M. [+ R5 q. X
        for j=1:2*n+2+ W0 D7 c. v5 Y& N  o& F
            if j<=n
% |% Y, }) Q/ }' h, o                KK(i,j)=xxD(j);
" a  z$ A, d/ c( v4 m7 I1 v            elseif j<=2*n
' p: Z$ \1 ]& g7 C. M                KK(i,j)=xxE(j-n);
; M8 S# E7 q7 t+ b8 X  l8 y" G3 z            elseif j==2*n+1
: W2 {  S; C, C/ n4 S                KK(i,j)=tempepsilonx;5 C% A: _+ s' m) V+ ^1 j
            else+ z4 U- G% @! J, m, Z  Z9 i6 g
                KK(i,j)=tempgamax;3 N7 _& P- d: V
            end6 \7 D* M% {% s& x9 `) p
        end2 e( ]0 V2 d- i7 m, S" C- L$ D
    elseif i==2*n+23 Y5 ?+ f0 w: v2 i) L
        for j=1:2*n+2
. j) [5 T$ O- N3 h8 k            if j<=n1 R: _, N2 l# E4 p* T8 x
                KK(i,j)=yyD(j);
! z3 M. O! p' n; m8 M            elseif j<=2*n
2 y% {* v  M$ @2 Y% C9 N                KK(i,j)=yyE(j-n);
5 s( L/ w/ `* Y0 x# }# ^            elseif j==2*n+1* F7 t8 x: `7 Z3 {( G
                KK(i,j)=tempepsilony;
( @+ f. T. T5 J            else3 e3 ]7 h+ d* M& t2 l8 R5 I  H. C
                KK(i,j)=tempgamay;
( I; R# J  |2 I& O: `/ j            end/ ?0 V1 J8 L; E9 z2 l! R4 e
        end2 r( w, r) a7 Q5 F
    end
. m% o8 q( s, H3 y1 Qend; i! V! x( s* Q, e# z/ |
想把其中的一部分for循环改成parfor循环,但是在运行时会出现错误
% F0 ^9 a# z& X# f% b; _Analyzing and transferring files to the workers ...done.
2 K$ t- R' Q7 z错误使用 Matrix_Of_Coefficient_K (line 195), Z/ l/ N6 r7 ]/ D
在 'gama0' 的工作进程上引发了 UndefinedFunction 错误。这可能是因为在这" {* d% D+ J$ \" Y5 }
些工作进程上无法访问包含 'gama0' 的文件。使用 addAttachedFiles(pool,
* o1 ]" p7 G( kfiles) 指定要附加的必要文件。有关详细信息,请参阅" z$ i9 ^( {0 Z
"parallel.Pool/addAttachedFiles" 的文档。6 q) z# Z8 s1 R1 E% ^% r7 K- y
' b5 J; L  \- m; |3 h( n
原因:% ~! E7 W# E- b: D; }4 r* O
    未定义函数或变量 'gama0'。0 {5 u& M% o3 b; l% j

该用户从未签到

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

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

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

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