EDA365电子论坛网
标题:
同一个版本的matlab、同一个.m文件,为何一个顺利执行、另一个出错?
[打印本页]
作者:
littlestupid
时间:
2020-1-8 13:27
标题:
同一个版本的matlab、同一个.m文件,为何一个顺利执行、另一个出错?
6 t# O0 e9 r' }" D8 ~" p
同一个版本7.11.0.584 (R2010b),安装在一个32位台式机上,和一个64位笔记本上,操作系统都是win7。
" H$ K! D5 l9 H0 `) a D" _& o8 z
同一个.m文件,在32位台式机上运行的好好的,但是在64位笔记本上就出错了!报错如下:
9 t9 z3 X$ M# p) D/ [1 y2 o% o/ s
??? Error using==> mtimes
, \3 u0 Q" p0 U4 x) V, C
Inner matrixdimensions must agree.
( X8 e% [8 u& B. _
Error in ==>evalincaller at 14
4 V2 y: O7 X a$ m6 D7 w7 }
r =evalin('caller',a);
9 r- N3 C) _, L8 F( z+ p) {
Error in ==>sym.eval at 33
7 y$ f& U- S, k, }
r =evalin('caller',['evalincaller(''' sym2str(a) ''')']);
5 i! |1 o5 J4 {7 C& A+ Z
Error in ==>ColdHRBWO7 at 247
- `! t5 B. w m* Q Y% z
plot(rx,eval(SS(kn,1))/TP,'k','LineWidth',sqrt(abs(kn)));
0 }1 s) B3 [7 n. _9 y$ i: I" J
经过检查,问题出在:
3 O/ f1 O8 Z# ]3 {/ F* P
SS(kn,1) =real(omg*epsl*T(kn,1)*T(kn,1)*bt(kn,1)*A(kn,1)*A(kn,1)*besselj(1,T(kn,1).*r).*besselj(1,T(kn,1).*r));
+ ]7 T+ A! M& e- b1 s
上。于是,我做了如下尝试:
4 S. q- ~. k. A2 f" u2 d8 m3 N2 c) a( I& N
(1) 我改成:
! u. M. a+ S [- b
SS(kn,1) =real(omg*epsl*T(kn,1)*T(kn,1)*bt(kn,1)*A(kn,1)*A(kn,1)*besselj(1,T(kn,1).*r));
+ x$ J: a* S I$ l( V, E0 n1 P2 l
在64位笔记本上就不出错了。但真正的公式里面,的确需要两个bessel公式相乘。
4 i! H, L5 |- I" Z
(2) 我又把两个bessel之间的.*改成*:
+ c }' B* f. j4 R) O
SS(kn,1) =real(omg*epsl*T(kn,1)*T(kn,1)*bt(kn,1)*A(kn,1)*A(kn,1)*besselj(1,T(kn,1).*r)*besselj(1,T(kn,1).*r));
. O9 }' e) v& K
64位笔记本还出错!报的错误仍然是“Inner matrix dimensionsmust agree.”
) f! ^# S/ q+ n- R, i# U
(3) 我又改成如下两种形式:
1 i# Y2 P6 w' \* t+ [9 ?
SS(kn,1) =real(omg*epsl*T(kn,1)*T(kn,1)*bt(kn,1)*A(kn,1)*A(kn,1)*(besselj(1,T(kn,1).*r))^2);
3 j1 F! S c/ D
SS(kn,1) =real(omg*epsl*T(kn,1)*T(kn,1)*bt(kn,1)*A(kn,1)*A(kn,1)*(besselj(1,T(kn,1).*r)).^2)
! i8 c; b7 v/ s3 X
64位笔记本继续出错,报的错误又成了:“Inputs must be a scalarand a square matrix.”
& G( E, x& k- U
2 h# ]" b+ o4 f. t
出问题的程序段如下:
7 Z$ R& Y6 @# v- l2 K0 C! z
syms r z;
$ C6 ~/ ], @6 c5 s, d$ A6 a
SS = zeros(2*n+1,1);
9 K3 q `$ N3 h2 E
SS = sym(SS);
" W$ v: C9 g& y5 E
for kn=1:1:2*n+1
/ N! D$ Z8 x, s+ f
SS(kn,1) =real(omg*epsl*T(kn,1)*T(kn,1)*bt(kn,1)*A(kn,1)*A(kn,1)*besselj(1,T(kn,1).*r).*besselj(1,T(kn,1).*r));
, E: X! k+ @# ]& H: @: | [
end
0 S' I1 {3 Z8 U5 F7 J
%#########################谐波功率#########################;
+ |) Y5 c' X' z' Z
power=zeros(2*n+1,1);
4 J' y$ @+ l. l/ \6 j5 ~! o0 G
TP = 0;
( `9 q' U. ?4 [! e, Q' m( u
for kn=1:1:2*n+1
1 [ _/ L' k @0 N; e$ ~5 S5 A @
clear sp;
6 c' E y- u( y! T) A" I
sp = @(z,r)real(besselj(1,T(kn,1).*r).*besselj(1,T(kn,1).*r).*r);
+ [$ D6 G# Z; `1 g% E: w! h
power(kn,1) =real(2*pi/p*omg*epsl*T(kn,1)*T(kn,1)*bt(kn,1)*A(kn,1)*A(kn,1)*quad2d(sp,0,0.5*p,0,Rw,'RelTol',1e-5,'MaxFunEvals',9000));
3 F. o0 F" w) e* n& [1 t" d
TP = TP + power(kn,1);
: x- y% i- x" g( t
end
V/ g% j! l: }% o7 O2 w& ?
power = power/TP;
) s- b, v) r, z3 D+ f: c3 j
save power;
0 `7 N' Z- h4 @6 t; K
xlswrite('5-谐波功率.xls',power);
3 J' u* N& W# _ _- }4 m" r0 k
%#########################功率密度#########################;
3 d+ H. U# x# f, _( k
rx = 0:0.01:(ro-d)*1e3;
m! \+ \ P! m9 l2 |& q6 [
r = rx*1e-3;
+ E3 \9 A( E6 g# a7 l8 a4 F
z = 0.5*p;
! A) p; O" g4 A( {* ` m
GLMD = rx';
) V9 ?* h/ ?1 W! }
figure(100);
{, a9 t8 F( G, K1 e6 \
for kn=1:1:2*n+1
( @: P) d1 f, E. p1 ?
clear GLMDn;
$ J8 |% P+ w& n) U0 B: W* a
plot(rx,eval(SS(kn,1))/TP,'k','LineWidth',sqrt(abs(kn)));
" p4 S) s* V! i+ ]7 \4 l
hold on;
, U" h* q( l* _1 j% N6 ]9 Q3 `2 F' M$ E! d
grid on;
5 ]/ f2 B; f8 ^& A% X% Q) I
box on;
* n* q( d) B& F' o3 c
xlabel('r-axis (mm)');
5 h+ |' Q4 R2 z s
ylabel('Power flux density (W/m2)');
* R/ k; b3 n# p5 d4 ]+ r
GLMDn = eval(SS(kn,1))/TP;
/ ?) o4 |8 L2 L/ K9 _6 G
GLMDn = GLMDn';
; o, h$ U: z) l& Z2 g
GLMD = [GLMD,GLMDn];
8 e% [( g' ~* b) B
end
9 p' b* ?0 g8 `: n" Q, X6 z ^
save GLMD;
5 _0 `) B% _2 z0 h1 o
xlswrite('5-Poynting.xls',GLMD);
$ X+ b" p1 o( z2 T- i
作者:
ExxNEN
时间:
2020-1-8 19:13
我的天,把两个文件放在同一目录下,在一个M文件中就可以直接使用另一个文件的函数了啊
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2