指示的变量或数组的大小似乎随着每次循环迭代而改变

时间:2014-02-27 12:57:59

标签: matlab matplotlib

我尝试为以下Matlab脚本绘制HxHy,但是我得到了以下内容:

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')

1 个答案:

答案 0 :(得分:0)

不,这只是一个警告,告诉您如果为HxHy变量预分配空间(例如,使用zeros),您的代码将运行得更快。

错误是因为您只在HxR的{​​{1}}子句中定义HyRelse,因此当您致电{{1}时很可能,你还没有定义if。例如,在第一次运行时你想要发生什么?那里你只有一个Hx(m) = HxR + HxL;HxR但不是两个!所以你应该将它们初始化为,所以在你的循环开始之前就像HxR一样。

但请注意,在任何给定的循环迭代中,假设HxL小于零,您将更新HxR=0,但您将使用之前的x值。这是你追求的行为吗?