Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Look Matlab program inside

  1. Dec 10, 2004 #1
    Cd = .5;
    Cs = .5;
    p = 1.2; %Air density
    r = .11303; %radius
    m = .4536; %mass

    x(1) = 0; %initial position
    y(1) = 0;
    z(1) = 0;

    wx = 0; %initial angular velocity for x

    wy = 0;

    vx(1) = 14.95; %intial velocity for x
    vy(1) = 14.5;
    vz(1) = 7.9;
    k = -300;
    g = 9.81; %gravity
    dt = .001;
    t = 20;
    n = t/dt;

    for j = 1:n
    wz = j;
    for i = 1:n

    u = sqrt((vx(i))^2+(vy(i))^2+(vz(i))^2); %v for all components

    ax = (-((Cd*p*pi*r^2)*u*vx(i))/(2*m) - ((Cs*p*pi*r^3*(vz(i)*wy-wz*vy(i)))/(2*m)));
    ay = (-((Cd*p*pi*r^2)*u*vy(i))/(2*m) - ((Cs*p*pi*r^3*(wz*vx(i)))/(2*m)));
    az = ((-g)-((Cd*p*pi*r^2)*u*vz(i))/(2*m) + ((Cs*p*pi*r^3*(-wy*vx(i)))/(2*m)));

    Fx = ax*m; %Force for x-component
    Fy = ay*m;
    Fz = az*m;

    vx(i+1) = vx(i) + ((Fx/m)*dt); %Final velocity for x-component
    vy(i+1) = vy(i) + ((Fy/m)*dt);
    vz(i+1) = vz(i) + ((Fz/m)*dt);

    x(i+1) = x(i) + vx(i+1)*dt;
    y(i+1) = y(i) + vy(i+1)*dt;
    z(i+1) = z(i) + vz(i+1)*dt;

    if(x(i+1)>(11.531+ .1524))




    fprintf('number %g',wz);

    grid on

    This is a program that shows the force and spin it would take to put a soccer ball into the upper right hand corner of the goal. I found the values I wanted with no spin included. NOw I want to run the program and let it give me back the values of different spin it would take to get to this point of choice. I'm holding everything else constant including one or the other spin components wz or wy and just letting one of them very, wz or wy. I want the the program to tell me the values of spin, but IT IS NOT. Do I need to set the fprintf somewhere specific or what? Any suggestions would be great

    Last edited: Dec 10, 2004
  2. jcsd
  3. Dec 11, 2004 #2


    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    Why to you multiply by m in one line then divide by it in the next? Why do unnecessary computations?

    Try a smaller step. put a loop counter in, stop after a set number of time steps.

    Are your numbers meaningful? It really seems like you have a complicated stopping condition, figure out something a bit simpler.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook