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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
for i=1:2*n+2                                                              %生成2N+2阶的矩阵& L. C: X, E* ^0 o/ Y! Q8 |9 z
    if i==1
3 M; a: |, Y) Z- `, A  i% `        f(i)=sigmar1(i)+P0;                                                 %第1层公式
, \# Y6 b5 a) ?( Y2 a        paRFor j=1:2*n+2
0 G, p( b! i0 x8 U+ p
6 ^$ @# h% t; i            if j<=n% x3 C3 ~! b3 ~) b8 v' d  B& n
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %将线性方程组写成矩阵的形式
" \8 C. p  M% T            elseif j<=2*n  r( C; S; o  d& x: {
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);, P) x" w7 e" Y+ g0 G
            elseif j==2*n+15 K  P8 |9 A' m+ @8 Q
                KK(i,j)=equationsToMatrix(f(i),epsilon0);( y3 ?+ r2 X2 O- p) X
            else
6 L7 v! a% l3 \3 f  i                KK(i,j)=equationsToMatrix(f(i),gama0);. n' Z% U3 |9 S) X( k" M
            end/ q# H0 F7 U9 ^  t9 O8 b1 H% Z
        end- y0 s& ]) W0 d( |
    elseif i<=n
$ g  \& q) P$ R5 n/ [0 ~0 O        f(i)=Ur1(i-1)-Ur2(i);                                             %第2层到n层公式
4 c+ j# m2 i, n' A/ x1 \) j7 E# A        for j=1:2*n+2
* I" a& m9 R% E$ _# f7 {, t2 c( g            if j<=n0 Y4 O6 ~: s8 E  y  }# g
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);
+ B( H8 K( K5 i) |            elseif j<=2*n3 ^  M7 T0 s1 z! p$ ]) D
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);
1 v- {9 ~7 M# h  t8 @            elseif j==2*n+1
5 u- t/ J- w( [- {( F                KK(i,j)=equationsToMatrix(f(i),epsilon0);
, l3 N' g4 \' ~$ |+ p! Y4 R  i$ }            else; q8 {+ Z9 L% h; K9 W9 J, ?1 h
                KK(i,j)=equationsToMatrix(f(i),gama0);
5 B& `! z9 d; k2 r; {8 S! d3 R7 H            end
* z9 Y$ G4 B( k9 M; y' d        end8 ^5 O& P5 u/ v- V& C
    elseif i<=2*n-1
+ A. B* O. \, J& K- p0 h6 X3 H        f(i)=sigmar1(i-n)-sigmar2(i-n+1);                                 %第N+1层到2N-1层公式
' G6 H1 g8 d( w' u        for j=1:2*n+2
: K! \' |* I0 D# H            if j<=n
! v& @$ ]" f, x- s' h; o/ l                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);          %生成2N+2阶的矩阵+ ?5 Y) v. `9 n0 P# a9 A
            elseif j<=2*n" e/ R% l3 a& f# P# O7 ?
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);7 F( _! [3 [& G6 e
            elseif j==2*n+1
* R7 |6 ~( w( x                KK(i,j)=equationsToMatrix(f(i),epsilon0);
: {, D3 H& v2 A            else& U& L* j7 P1 L1 ~: k
                KK(i,j)=equationsToMatrix(f(i),gama0);+ @* h6 H" ]+ C7 k$ F* Q( C8 U
            end
2 l$ \0 ?. Z5 d0 s. j  ^        end" L: x2 i3 D5 d6 y2 L1 g* s# Q1 \
    elseif i==2*n
: h; l# _* z6 D% Z/ v4 F        f(i)=sigmar1(n);                                                   %第2*N层公式
/ E4 O& X; Q/ L0 b, \        for j=1:2*n+2- F6 I1 k: Q" y. o  L- \- m; q; M2 o
            if j<=n0 g1 V; S8 M  d' C8 {8 K
                KK(i,j)=equationsToMatrix(f(i),['D_',num2str(j)]);* ]. O2 K9 g" j# r
            elseif j<=2*n) y9 X$ w1 W9 r
                KK(i,j)=equationsToMatrix(f(i),['E_',num2str(j-n)]);8 Z) Z; y  _( A" D: W
            elseif j==2*n+1* {; U+ D" f' B( e- Q
                KK(i,j)=equationsToMatrix(f(i),epsilon0);$ U' m% j; _% n' {+ j
            else. D1 B8 f7 S1 O6 u  G
                KK(i,j)=equationsToMatrix(f(i),gama0);) q* b1 z$ V2 \" W
            end
/ e+ o$ \! E4 a- l- Q) @  V        end! o& }2 F3 z; ]5 C# o
    elseif i==2*n+1; ]7 O8 W6 @+ M5 b1 W$ t" h
        for j=1:2*n+2
( L8 A1 I  c% B* j  M            if j<=n9 ?5 @. S+ N$ w/ `
                KK(i,j)=xxD(j);
: E- g- }9 ~' M2 p( {            elseif j<=2*n
& H) Z. E) M0 z9 c3 q$ X                KK(i,j)=xxE(j-n);
$ o6 V0 S7 ~1 a            elseif j==2*n+1
  o8 b- F$ o7 M/ X                KK(i,j)=tempepsilonx;
/ o8 q8 |4 s8 Q$ F0 K( g* w            else
7 O0 h6 g6 }( w! }: k- b/ \4 R                KK(i,j)=tempgamax;! W0 J5 @* o+ d8 K+ |/ }9 x
            end) a, x1 ^# w2 Q1 O
        end
( I4 |( Z& n$ z5 G    elseif i==2*n+27 y; [8 k' c$ B
        for j=1:2*n+21 t* S; M/ {( o. B7 R2 a
            if j<=n) d: ]; j& F, v9 `! W
                KK(i,j)=yyD(j);
/ B, q: l" J5 H! @; @! O8 Z            elseif j<=2*n
* J1 o7 c0 C+ y7 X0 J  p- C5 l  p                KK(i,j)=yyE(j-n);2 s- D) c  ?1 b4 C% Q
            elseif j==2*n+1% m' [! Q/ h& s+ ?8 @0 w
                KK(i,j)=tempepsilony;- Q+ J' l( L$ n& @7 Q
            else
' V6 \5 L2 U& P. J/ D                KK(i,j)=tempgamay;
- O- P* o9 w( k/ J& c            end7 Z7 T& }/ N+ E' ]. R) g) D. N
        end5 D9 q, D9 B$ |1 p. l5 g; o4 l
    end
* b9 g# N# n1 ~7 Iend
8 B2 {; Z) o1 X7 c& B1 C, Q- ~想把其中的一部分for循环改成parfor循环,但是在运行时会出现错误
) f! s: H! y& `" v! y: c/ R1 d7 [Analyzing and transferring files to the workers ...done.
7 l, a$ w4 I" L& C错误使用 Matrix_Of_Coefficient_K (line 195)
: m1 e# I: w+ a, J在 'gama0' 的工作进程上引发了 UndefinedFunction 错误。这可能是因为在这
# @0 U7 Z# J8 m4 Q9 M0 a  H些工作进程上无法访问包含 'gama0' 的文件。使用 addAttachedFiles(pool,
; ~) N, [/ K, w9 T0 w+ Rfiles) 指定要附加的必要文件。有关详细信息,请参阅
8 S" J+ H, ~1 p/ ]' T6 c; k. Y"parallel.Pool/addAttachedFiles" 的文档。
5 p+ y4 ^0 X8 u3 A, s5 x
( I+ v; S  F5 o7 h, \9 A原因:5 X; c) Y( ~& f2 |. W1 m: b
    未定义函数或变量 'gama0'。
  h) @8 H3 H: X7 Q: m

该用户从未签到

4#
发表于 2021-3-22 15:23 | 只看该作者
来学习一下

该用户从未签到

3#
发表于 2021-3-22 15:08 | 只看该作者
我的解决办法是运算部分 弄成函数   函数里面需要用的是 数据用 函数输入方式传递,这样就避免很多的 par 运行过程中的 参数隔离检查报错,而且弄成函数后 循环体看着也简单明了。

该用户从未签到

2#
发表于 2021-3-22 14:05 | 只看该作者
帮你顶一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 01:07 , Processed in 0.156250 second(s), 24 queries , Gzip On.

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

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

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