【问题标题】:The size of the indicated variable or array appears to be changing with each loop iteration指示的变量或数组的大小似乎随着每次循环迭代而变化
【发布时间】:2014-02-27 12:57:59
【问题描述】:

我尝试为以下 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')

【问题讨论】:

    标签: matlab matplotlib


    【解决方案1】:

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

    报错是因为你在ifelse子句中只定义了HxRHyR,所以很有可能你在调用Hx(m) = HxR + HxL;的时候还没有定义@987654329 @。例如,您希望在第一次运行时发生什么?在那里,您将只有HxRHxL,但不能同时拥有!所以你可能应该在循环开始之前将它们初始化为HxR=0

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

    【讨论】:

      猜你喜欢
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 2021-12-05
      • 1970-01-01
      • 2016-11-08
      • 1970-01-01
      相关资源
      最近更新 更多