So I have this for while loop that I am calculating, and what I think is the problem is that it's trying to stuff 121 values into one definition. However when I do things by hand it should equal to 0 whilst n is 1 at the moment. So my ax where the line errors shoiuld become 0. As tn = (n-1)*T with T being .005. If N is 1, then 1-1) * .005 should still be 0, so the Dn line will be 0 whilst N is 1, the next line V will be 50 as square root of 2500 is 50. So my ax(n) is equal to -0 * vx (which has v0 defined as 50) * v(defined as 50 in the previous line). Ax(1) = -0*50*50, which should become 0 whilst N is one. So I'm half puzzled as to why it's giving me the error (stated in title), Im guessing it's trying to put one of these 1×121 doubles into it, but im not sure why…
As always I really appreciate the help I get. It is late when posting this, so my apologies if I do not accept your answer straight away. Thank you to the Matlab forums for the continued help in my coding, learning lots with your support which is greatly appreciated!
clcclear%--------------------------------------------------------------------------------------------------------%
p = 1.2; %variables given to me in question
g = 9.81;m = 77;c = 1;a1 = .7; a2 = 50; t1 = 50;t2 = 70;h0 = 50;T = .005;v0 = 50;tmid = (t1+t2)/2; %formula gives to find what t mid is
tA = 0:120; %used for plotting x axis
%--------------------------------------------------------------------------------------------------------%if tA<=tmid Area = a1;else Area = a2; Area = 1/2*(a2-a1)*tanh(10.*((tA-tmid)/((t2-t1))))+(1/2*(a2+a1));endD = p*c.*Area /2*m;plot(tA, Area, 'b-', 50, .7, 'ro', 70, 50, 'ro') %t1 occurs at 50 seconds in, the area is .7 so I used that as a y co-ordinate and 50 as my x, marking that spot with a red circle.
axis([0 120, .6 70]); % line above continued : Same sort of thing with area 2, except this occurs after 60 seconds
xlabel('Time')ylabel('Area')title('Area over Time')%--------------------------------------------------------------------------------------------------------%x(1) = 0;, vx(1) = v0;, y(1) = 0;, vy(1) = 0; %initial variables used to start the loop
for n=1 %initialize time index
while 1 %forever while loop
if y(n) > h0, break; end % break when ground is reached
tn = (n-1)*T; %nth time instant in seconds
tA(n) = tn; %build time vector, needed for plotting
Dn = D.*(tn); %drag constant in time tn
v = sqrt(vx(n)^2+vy(n)^2); %problem tells me to write "no need to save V in an array"- not sure what this means
ax(n) = -Dn * vx(n) *v; %horizontal acceleration
ay(n)= -D*vy*v(n)+g; x(n+1) = x(n)+T*vx(n); vx(n+1)= vx(n)+T*ax(n); y(n+1)=y(n)+T*vy(n); vy(n+1)= vy(n)+T*ay(n); n = n+1; %updates the index to use N+1, so second round will use 2 for N, as N is defined as 1, N= 1+1, whill use 2 for N in next loop and so on.
end end%--------------------------------------------------------------------------------------------------------%Vc = sqrt(g/D) %equation to be used later
%--------------------------------------------------------------------------------------------------------%plot(tA,ay(tA), 'b-', tA, ax(tA), 'r-'); %axis between 0, where t is less than tg. Roughly set out for now, needs to be worked after loop is fixed.
Best Answer