Понимание проблемы в Scilab для моего кода - PullRequest
0 голосов
/ 28 января 2020

Я делаю движение снаряда, где мне нужно построить кривые между позициями x и y для различных углов, но scilab показывает только один график. Я запутался. Мой код ниже

function[H,R,T]=projectile(m,r,h,c,rho,theta,v0,x0,y0,t0)

  g=9.8
  A=%pi*r^2
  k=c*rho*A/2;
  i=1
  t(i)=t0
  x(i)=x0
  y(i)=y0

  for j=0:5
    thetha=theta+j*15;
    vx(i)=v0*cos(thetha*%pi/180);
    vy(i)=v0*sin(thetha*%pi/180);
    while (y(i)>=0)
      v=sqrt(vx(i)^2+vy(i)^2);
      t(i+1)=t(i)+h;
      vx(i+1)=vx(i)-h*(k*v*vx(i)/m);
      vy(i+1)=vy(i)-h*(g+k*v*vy(i)/m);  
      x(i+1)=x(i)+h*vx(i)
      y(i+1)=y(i)+h*vy(i)
      i=i+1;  
    end
    plot(x(i),y(i),'.'); 
  end

  n=i-1
  R=x(n)-x(1);
  T=t(n);
  H=max(y)

endfunction

1 Ответ

2 голосов
/ 29 января 2020

Вы должны использовать векторы для улучшения совместимости и читабельности вашего кода. Вот мое предложение улучшенного (и рабочего) кода:

function [H,R,T] = projectile(m,r,h,c,rho,theta0,v0,x0,y0,t0)
    g = 9.81
    A = %pi*r^2
    k = c*rho*A/2;

    for theta = theta0 + (0:15:75)
        v = v0*[cos(theta*%pi/180); sin(theta*%pi/180)];
        t = t0
        xy = [x0;y0]
        i = 1
        while xy(2,i) >= 0
            t(i+1) = t(i)+h;
            v = v + h*([0;-g] - k*norm(v)*v/m);
            xy(:,i+1) = xy(:,i) + h*v;
            i = i+1;
        end
        plot(xy(1,:), xy(2,:));
    end    

    R = xy(1,$) - xy(1,1);
    T = t($);
    H = max(xy(2,:))
endfunction

clf
[H,R,T] = projectile(1,0.1,0.001,2,1000,5,1,0,0,0)

Screenshot of graphical output of program

...