我尝试为以下Matlab脚本绘制Hx
和Hy
,但是我得到了以下内容:
Undefined function or variable 'HxR'
但是,我已经在我的代码中将其定义为Hx=HxR+HxL
。 Matlab给出了这个问题的原因(指示的变量或数组的大小似乎随着每次循环迭代而变化)。任何人都有任何想法可以提供帮助,我很感激
Ro=10.0; % enclosing area radius
To=pi/3; % angle between sheets
Uo=1.0;
y= 1.0;
g = 10e-9; % gap length
Uo = 1.0;
ro = 10.0;
to = pi/3; % Interior angle
m = 1;
for x = -g/2:g/100:g/2
SQP= sqrt((g+x).^2+y^2);
if ( x<= 0)
HxL = (4*Uo*(SQP/Ro).^(-To/(pi+To))*(Ro*y*SQP)*(-1+(SQP/Ro)^(2*pi/(pi+To))*cos(pi*(- pi+atan(y/(x+g)))/(pi+To))+(g+x).*(1+(SQP./Ro)^(2*pi/(pi+To))*sin(pi*(-pi+atan(y./(x+g)))./(pi+To))))/(Ro*(pi+To)*(g+x).* sqrt((1+y^2)./(g+x)^2)*(1+(SQP./Ro)^(4*pi/(pi+To)))-2*(SQP./Ro)^(2*pi/(pi+To))*cos((2*pi^2 + 2*atan(y./(g+x))./(pi+To)))));
HyL= -(4*Uo*(SQP./Ro).^(-To/(pi+To))*(Ro*(g+x).*SQP)*(-1+(SQP./Ro)^(2*pi/(pi+To))*cos(pi*(-pi+atan(y./(x+g)))/(pi+To))+ y*(1+(SQP./Ro)^(2*pi/(pi+To))*sin(pi*(pi-atan(y./(x+g)))/(pi+To))))/(Ro*(pi+To)*(g+x).* sqrt((1+y^2)./(g+x)^2)*(1+(SQP./Ro)^(4*pi/(pi+To)))-2*(SQP/Ro)^(2*pi/(pi+To))));
else
SQM= sqrt((-g+x).^2+y^2);
HxR = (4*Uo*(SQM/Ro).^(-1+(To/(pi+To)))*(y*(-1+(SQM./Ro)^(-2*pi/(-2*pi+To))*cos((pi*atan(y./(x-g))/(2*pi-To)))+(g-x)*(1+(SQM ./Ro)^(-2*pi./-2*(pi+To/2))*sin((pi*atan(y./(x-g)))/(2*pi-To)))))/(Ro*(2*pi-To).*(g-x).* sqrt((1+y^2)./(g-x)^2)* (1+(SQM/Ro)^(-4*pi/(-2*pi+To)))-2.*(SQM/Ro)^(-2*pi/(-2*pi+To))*cos((2*pi*atan(y./(-g+x))./(2*pi-To)))));
HyR= (4*Uo*(SQM./Ro).^(-1+(pi/(2*pi-To)))*((g-x).*(-1+(SQM./Ro)^(-2*pi/(-2*pi+To))*cos((pi*atan(y./(x-g))/(2*pi-To)))-y*(1+(SQM./Ro)^(-2*pi/-2*(pi+To/2))*sin((pi*atan(y./(x-g)))/(2*pi-To)))))/(Ro*(2*pi-To)*(g-x).* sqrt((1+y^2)./(g-x)^2)*(1+(SQM./Ro)^(-4*pi/(-2*pi+To)))-2*(SQM./Ro)^(-2*pi/(-2*pi+To))*cos((2*pi*atan(y./(-g+x))/(2*pi-
end
Hx(m) = HxR + HxL;
Hy(m) = HyR + HyL;
m = m+1;
end
x = -g/2:g/100:g/2;
figure
plot(x,Hx)
title('Hx')
figure
plot(y,Hy,'-r')
title('Hy')
答案 0 :(得分:0)
不,这只是一个警告,告诉您如果为Hx
和Hy
变量预分配空间(例如,使用zeros
),您的代码将运行得更快。
错误是因为您只在HxR
的{{1}}子句中定义HyR
和else
,因此当您致电{{1}时很可能,你还没有定义if
。例如,在第一次运行时你想要发生什么?那里你只有一个Hx(m) = HxR + HxL;
或HxR
但不是两个!所以你应该将它们初始化为,所以在你的循环开始之前就像HxR
一样。
但请注意,在任何给定的循环迭代中,假设HxL
小于零,您将更新HxR=0
,但您将使用之前的x
值。这是你追求的行为吗?