Look Matlab program inside

  • MATLAB
  • Thread starter em504346
  • Start date
  • #1
em504346
1
0
clear;
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))

break
end

if((y(i+1)>10.9564)&(y(i+1)<11.531))&((z(i+1)>1.8288)&(z(i+1)<2.3254))&((x(i+1)>11.531)&(x(i+1)<(11.531+.1524)))
fprintf('q')
break

end

end
fprintf('number %g',wz);
end

plot3(x,y,z)
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

THANKS
 
Last edited:

Answers and Replies

  • #2
Integral
Staff Emeritus
Science Advisor
Gold Member
7,253
63
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);

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.
 

Suggested for: Look Matlab program inside

Replies
1
Views
587
  • Last Post
Replies
2
Views
363
  • Last Post
Replies
2
Views
672
  • Last Post
Replies
1
Views
536
Replies
0
Views
349
Replies
0
Views
155
Replies
10
Views
978
  • Last Post
Replies
18
Views
1K
Replies
2
Views
246
  • Last Post
Replies
7
Views
1K
Top