Arrays 从本地函数返回多个数组时陷入循环?

Arrays 从本地函数返回多个数组时陷入循环?,arrays,matlab,function,while-loop,Arrays,Matlab,Function,While Loop,我必须找到弹射器轨道的最小和最大角度,使其越过墙壁。我有一个局部函数,它包括运动方程,并返回对象着陆的距离,一个x值数组,一个y值数组,以及基于大量条件输入的x和y值的数量,称为anglesfunction。在main函数中,我尝试在循环中多次调用它,但它必须是无限循环,因为我必须退出程序。它总是在同一条线上退出,即: [temp(p), a, b, c(p)] = anglefunction(v0, w, m, d, h, dw, theta2(p), k); 我现在已经把它注释掉了,但后来

我必须找到弹射器轨道的最小和最大角度,使其越过墙壁。我有一个局部函数,它包括运动方程,并返回对象着陆的距离,一个x值数组,一个y值数组,以及基于大量条件输入的x和y值的数量,称为anglesfunction。在main函数中,我尝试在循环中多次调用它,但它必须是无限循环,因为我必须退出程序。它总是在同一条线上退出,即:

[temp(p), a, b, c(p)] = anglefunction(v0, w, m, d, h, dw, theta2(p), k);
我现在已经把它注释掉了,但后来我试着做类似的事情来做二分法,它也停在同一点上。这是我的完整代码,
g
是重力,是我传递给主函数的唯一内容

function [mid] = longassignment3(g)
v0 = 40;
w = 5;
m = 10;
d = 50;
h = 5;
dw = 30;
theta1 = 38;
k = .05;
n = 1;
%hold on
%grid on
A = 0:.01:h;
%plot(dw, A, 'r', 'linewidth',2)
%plot(d, 0, 'linewidth', 2)
[distance, x, y, z] = anglefunction(v0, w, m, d, h, dw, theta1, k);  %should take out     eventually
%plot(x,y);
min = 0;
max = 0;
q = 1;
tol = .3;
tester = 2;
theta2 = 0:.01:90;
p = 1;
dt = 1e-3;
num = 1;
[temp(p), a, b, c(p)] = anglefunction(v0, w, m, d, h, dw, theta2(p), k);  %for p=1
while theta2(p) < 90
  p = p + 1;    %p becomes 2
  [temp(p), a, b, c(p)] = anglefunction(v0, w, m, d, h, dw, theta2(p), k);   %for p=2 the     first time
  B = size(a);
  while q <= B(2);
      if a(q) >= dw & a(q) <= (dw+tol)
          num = q;
      end
      q = q + 1;
  end
  if b(num) >= (h - tol) || b(num) <= (h+tol)  %if it hits wall
  min = 0;
  max = 0;
  else                                         %does not hit the wall
      if temp(p)<temp(p-1)
          min = theta2(p);                     %not assigning max and min
     elseif temp(p)>temp(p-1)
          max = theta2(p);
      end
  end
end
%min
%max
%distance = 0;
%q = 1;
%min = 26;
%max = 45;
%u = 1;
%done = 1;
%while done ~= 0
%    total = min + max;
%    mid = total/2;
%    [distance(u), a, b, c(u)] = anglefunction(v0, w, m, d, h, dw, mid, k);
%    if distance(u) < d
%        max = mid;
%    elseif distance(u) > d
%        min = mid;
%    elseif distance(u) >= d-tol | distance(u) <= d+tol
%        done = 0;
%    end
%    u = u + 1;
%end
end
if true
function [dist, x, y, n] = anglefunction(v0, w, m, d, h, dw, theta1, k)
n = 1;
g = 9.81;
%hold on
%grid on
A = 0:.01:h;
clear vx vy x y
%plot(dw, A, 'r', 'linewidth',2)
%plot(d, 0, 'linewidth', 2)
x(n) = 0;
y(n) = 0;
dvx = 0;
dvy = 0;
dt = 1e-3;
vx(n) = (v0)*(cos(theta1*pi/180));
vy(n) = (v0)*(sin(theta1*pi/180));  
while y(n)>=0 && x(n)>=0
  veff(n) = sqrt((vx(n) - w)^2 + (vy(n))^2);  
  dvx(n) = -k*veff(n)*(vx(n) - w)*dt/m;   
  dvy(n) = (-k*veff(n)*vy(n)/m-g)*dt;   
  vx(n+1) = vx(n) + (dvx(n));
  vy(n+1) = vy(n) + (dvy(n));
  x(n+1) = x(n) + (vx(n))*dt; 
  y(n+1) = y(n) + (vy(n))*dt; 
  n = n +1 ;
end
dist = x(n);
end
函数[mid]=longassignment3(g)
v0=40;
w=5;
m=10;
d=50;
h=5;
dw=30;
θ1=38;
k=.05;
n=1;
%等一下
%网格化
A=0:01:h;
%绘图(dw、A、r、线宽、2)
%绘图(d,0,'线宽',2)
[距离,x,y,z]=角度函数(v0,w,m,d,h,dw,θ1,k);%最终应该去掉
%图(x,y);
最小值=0;
max=0;
q=1;
tol=.3;
测试仪=2;
θ=0:01:90;
p=1;
dt=1e-3;
num=1;
[temp(p),a,b,c(p)]=角度函数(v0,w,m,d,h,dw,θ2(p),k);%对于p=1
而θ2(p)<90
p=p+1;%p变成2
[temp(p),a,b,c(p)]=角度函数(v0,w,m,d,h,dw,θ2(p),k);%第一次p=2时
B=尺寸(a);
而q=dw&a(q)=(h-tol)| | b(num)d
%最小=中等;
%埃尔塞夫距离(u)>=d-tol |距离(u)=0&&x(n)>=0
veff(n)=sqrt((vx(n)-w)^2+(vy(n))^2);
dvx(n)=-k*veff(n)*(vx(n)-w)*dt/m;
dvy(n)=(-k*veff(n)*vy(n)/m-g)*dt;
vx(n+1)=vx(n)+(dvx(n));
vy(n+1)=vy(n)+(dvy(n));
x(n+1)=x(n)+(vx(n))*dt;
y(n+1)=y(n)+(vy(n))*dt;
n=n+1;
结束
dist=x(n);
结束

在注释掉的while循环中,经过两次迭代后,max和min都等于45。这使得“mid”也等于45,因此在每次迭代中传递给anglefunction的参数没有变化。因此,不可能达到“done=0”条件,while循环将永远持续下去