ODE45 - must return a column vector.

8 Ansichten (letzte 30 Tage)
Shraddha Inamdar
Shraddha Inamdar am 27 Jan. 2023
Kommentiert: Shraddha Inamdar am 31 Jan. 2023
I have following code:
B = readtable('t13.xlsx');
t13 = table2array(B);
c = readtable('ambient.xlsx');
ambient = table2array(c);
d = readtable('solar.xlsx');
solar = table2array(d);
tspan = [0 50];
y0 = 20;
[t,y14] = ode45(@(t,y14) odefcn(t,y14,t13,solar,ambient), tspan, y0);
function dy14dt = odefcn(t,y14,t13,solar,ambient)
dy14dt = zeros(50,1)
dy14dt = [-1.3461*y14 - 1.3556*t13 + 4.3505*solar -1.3556*ambient];
%dy14dt= dy14dt(:);
end
I am getting an error as follows:
Error using odearguments
@(T,Y14)ODEFCN(T,Y14,T13,SOLAR,AMBIENT) must return a column vector.
Error in ode45 (line 107)
odearguments(odeIsFuncHandle,odeTreatAsMFile, solver_name, ode, tspan, y0, options, varargin);
Error in validation (line 11)
[t,y14] = ode45(@(t,y14) odefcn(t,y14,t13,solar,ambient), [0 41.5], y0);
Based on one of the previous post, I tried putting this line: dy14dt= dy14dt(:); but it did not work. Kindly help me to solve this error. Thanks!

Akzeptierte Antwort

Torsten
Torsten am 27 Jan. 2023
B = readtable('t13.xlsx');
t13 = table2array(B);
c = readtable('ambient.xlsx');
ambient = table2array(c);
d = readtable('solar.xlsx');
solar = table2array(d);
tspan = [0 50];
y0 = 20;
[t,y14] = ode45(@(t,y14) odefcn(t,y14,t13,solar,ambient), tspan, y0);
plot(t,y14)
function dy14dt = odefcn(t,y14,t13,solar,ambient)
solart = interp1(t13,solar,t);
ambientt = interp1(t13,ambient,t);
dy14dt = -1.3461*y14 - 1.3556*t + 4.3505*solart -1.3556*ambientt;
end
  9 Kommentare
Torsten
Torsten am 28 Jan. 2023
Then insert this time vector T and use
B = readtable('t13.xlsx');
t13 = table2array(B);
c = readtable('ambient.xlsx');
ambient = table2array(c);
d = readtable('solar.xlsx');
solar = table2array(d);
T = ??
tspan = [0 50];
y0 = 20;
[t,y14] = ode45(@(t,y14) odefcn(t,y14,T,t13,solar,ambient), tspan, y0);
plot(t,y14)
function dy14dt = odefcn(t,y14,T,t13,solar,ambient)
t13t = interp1(T,t13,t);
solart = interp1(T,solar,t);
ambientt = interp1(T,ambient,t);
dy14dt = -1.3461*y14 - 1.3556*t13t + 4.3505*solart -1.3556*ambientt;
end
Shraddha Inamdar
Shraddha Inamdar am 31 Jan. 2023
It worked. Thank you!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Solar Power finden Sie in Help Center und File Exchange

Tags

Produkte


Version

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by