I searched a solution for some time and it seems that I was doing everything right but the error
Error using odearguments (line 110) Inputs must be floats, namely single or double.
Keeps appearing. Any ideas what I am doing wrong with ode23?
Tc = 60/72;
Ts = (2/5)*Tc;
R=1.05;
C=1.066;
syms ti q
IO = solve(90-int(q * (sin(pi*ti/Ts)),ti,0,Ts),q);
IO = subs(IO, 3.14, pi);
sine = @(t) sin (pi*t/Ts);
i = @(t) IO * sine(t).*(t <= Ts);
for n=1:5
if (n==1)
P_ss2 = 80;
end
t = (n-1)*Tc:0.01:n*Tc;
I = @(t) IO *sine(t-(n-1)*Tc).*(t <= ((n-1)*Tc+Ts));
z2 = @(t,y2) (-y2/(R*C)+I(t)/C);
[t_m2, P_m2] = ode23(z2, [(n-1)*Tc n*Tc], P_ss2);
P_ss2 = P_m2(end);
end

 Réponse acceptée

Torsten
Torsten le 17 Mar 2016
Modifié(e) : Torsten le 17 Mar 2016

0 votes

Tc=60/72;
Ts=(2/5)*Tc;
R=1.05;
C=1.066;
I0=45*pi/Ts;
P_ss2=80;
for n=1:5
func=@(t,y)(-y/R+I0*sin(pi*(t-(n-1)*Tc)/Ts)*(t <= ((n-1)*Tc+Ts)))/C;
[t_m2, P_m2] = ode23(func, [(n-1)*Tc n*Tc], P_ss2);
P_ss2 = P_m2(end);
end
Best wishes
Torsten.

Plus de réponses (2)

Torsten
Torsten le 17 Mar 2016

0 votes

Mixing of symbolic and numeric variables is not allowed when using ode23: z2 must be a function handle of a purely numeric expression (which is not the case for I(t)).
Best wishes
Torsten.

1 commentaire

pisau nx
pisau nx le 17 Mar 2016
Is there a easy solution for that? I need that I(t) function there.

Connectez-vous pour commenter.

Aida Naranjo
Aida Naranjo le 12 Jan 2019

0 votes

You should put double() in the function, I have a similar code and it works.
z2 = @(t,y2) double((-y2/(R*C)+I(t)/C));

Community Treasure Hunt

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

Start Hunting!

Translated by