HOW TO WRITE THE FUNCTION FOR ODE45

4 次查看(过去 30 天)
Hi. I am still new in Matlab and i don't know how to write this function for this equation. I know i must use ode45 but i don't know how to write that function coding(for eqn 21 and 22)(I attached with the journal that i referred):
I try to write it but it is have some error, this is how i write:
function dvdt=velocityspinsolver(times,velocities)
dvdt=-g-(Kv/m)*sqrt(v^2+v^2)-Dwv/m;
dvdt=(-Kv/m)*sqrt(v^2+v^2)+Kwv/m; %equation (21)
g=32.174;
K=0.00832;
m=0.59375;
D=0.001452;
w=51;
And this is the error:
Unrecognized function or variable 'g'.
Error in velocityspinsolver (line 2)
dvdt=-g-(Kv/m)*sqrt(v^2+v^2)-Dwv/m;
Error in odearguments (line 90)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
Error in dua (line 44)
[time,velocities] = ode45('velocityspinsolver',0:.005:5, V0);

采纳的回答

madhan ravi
madhan ravi 2020-7-8
ode45(@velocityspinsolver, [0,10],[1,1])
function dvdt=velocityspinsolver(t,y)
y = zeros(2,1);
vx = y(1);
vy = y(2);
g=32.174;
K=0.00832;
m=0.59375;
D=0.001452;
w=51;
dvdt = [-g-(K*vx/m)*sqrt(vx^2+vy^2)-D*w*vy/m;
(-K*vy/m)*sqrt(vx^2+vy^2)+K*w*vx/m]; %equation (21)
end
  7 个评论
madhan ravi
madhan ravi 2020-7-8
How’s this related to the question you originally asked?? First you asked about ode45() and now a loop?
wan rabiatul adawiyyah
Sorry sir because i though the function for 'velocityspinsolver' must be call in this loop. Because i need to get the polynomial graph that refer to the projectile motion. When i run and added with your script in to this loop i also get the linear graph. Soory for my mistaken. Sorry sir because i'm still learning to understand this. Here the loop that have the 'velocityspinsolver':
There's another loop from that journal.
%Initial loop, moves large incriments
q=0;
for theta=0:(pi/90):(pi/2)
for speed=150:-5:0
V0=[speed*cos(theta) speed*sin(theta)];
[time,velocities] = ode45('velocityspinsolver',0:.005:5, V0);
X = zeros (length(time),2);
X(1,2)=height;
for i = 1:(length(time)-1)
X(i+1,1)=(X(i,1)+(time(i+1)-time(i))*velocities(i,1));
X(i+1,2)=(X(i,2)+(time(i+1)-time(i))*velocities(i,2));
end
findnet=(X(:,1)<dtonet);
if sum(findnet)>length(time)
if X(sum(findnet)+1,2)> netheight
b=sum(X(:,2)>0);
if (X(b,1)>dtonet) && (X(b,1)<(dtonet+dfromnet))
q=1;
end
end
end
if q==1
break
end
end
if q==1
break
end
end

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

产品


版本

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by