MATLAB: Dsolve giving implicit solution

differential equationsdsolveimplicitode

Hello,
I am new to Matlab and am trying to solve a heat transfer problem between two heated bodies. I wrote the commands as below, where A,B,C,D and E are all constant values which are already defined and caluclated. On attempting to solve the diff eqn though I am getting this kind of message. Is there something I am doing wrong or should use a different solver or is there a way to make sense out of the solution. My aim would be to get a plot of T vs t. The Diff eqn itself is not implicit so not sure why the solution is coming out implicit.
>> syms A B C D E T(t);
>> ode = diff(T,t) == B + C - A*(T^4) - D*T;
>> cond = T(0) == 673;
>> Tsol(t) = dsolve(ode,cond)
Warning: Unable to find explicit solution. Returning implicit solution instead.
> In dsolve (line 208)
Tsol(t) =
solve(t + symsum(root(8*D*b + 18*D^2*b^2 – 27*D^4*b^4 – 256*A*B^3*b^4 – 256*A*C^3*b^4 – 768*A*B*C^2*b^4 – 768*A*B^2*C*b^4 + 1, b, k)*(log(T – 4*B*root(8*D*b + 18*D^2*b^2 – 27*D^4*b^4 – 256*A*B^3*b^4 – 256*A*C^3*b^4 – 768*A*B*C^2*b^4 – 768*A*B^2*C*b^4 + 1, b, k) – 4*C*root(8*D*b + 18*D^2*b^2 – 27*D^4*b^4 – 256*A*B^3*b^4 – 256*A*C^3*b^4 – 768*A*B*C^2*b^4 – 768*A*B^2*C*b^4 + 1, b, k) + 3*D*root(8*D*b + 18*D^2*b^2 – 27*D^4*b^4 – 256*A*B^3*b^4 – 256*A*C^3*b^4 – 768*A*B*C^2*b^4 – 768*A*B^2*C*b^4 + 1, b, k)*T) + 3*log(A) + log(root(8*D*b + 18*D^2*b^2 – 27*D^4*b^4 – 256*A*B^3*b^4 – 256*A*C^3*b^4 – 768*A*B*C^2*b^4 – 768*A*B^2*C*b^4 + 1, b, k)) + log(12*D*root(8*D*b + 18*D^2*b^2 – 27*D^4*b^4 – 256*A*B^3*b^4 – 256*A*C^3*b^4 – 768*A*B*C^2*b^4 – 768*A*B^2*C*b^4 + 1, b, k) + 4) + pi*1i), k, 1, 4) – symsum(root(8*D*b + 18*D^2*b^2 – 27*D^4*b^4 – 256*A*B^3*b^4 – 256*A*C^3*b^4 – 768*A*B*C^2*b^4 – 768*A*B^2*C*b^4 + 1, b, k)*(log(2019*D*root(8*D*b + 18*D^2*b^2 – 27*D^4*b^4 – 256*A*B^3*b^4 – 256*A*C^3*b^4 – 768*A*B*C^2*b^4 – 768*A*B^2*C*b^4 + 1, b, k) – 4*C*root(8*D*b + 18*D^2*b^2 – 27*D^4*b^4 – 256*A*B^3*b^4 – 256*A*C^3*b^4 – 768*A*B*C^2*b^4 – 768*A*B^2*C*b^4 + 1, b, k) – 4*B*root(8*D*b + 18*D^2*b^2 – 27*D^4*b^4 – 256*A*B^3*b^4 – 256*A*C^3*b^4 – 768*A*B*C^2*b^4 – 768*A*B^2*C*b^4 + 1, b, k) + 673) + 3*log(A) + log(root(8*D*b + 18*D^2*b^2 – 27*D^4*b^4 – 256*A*B^3*b^4 – 256*A*C^3*b^4 – 768*A*B*C^2*b^4 – 768*A*B^2*C*b^4 + 1, b, k)) + log(12*D*root(8*D*b + 18*D^2*b^2 – 27*D^4*b^4 – 256*A*B^3*b^4 – 256*A*C^3*b^4 – 768*A*B*C^2*b^4 – 768*A*B^2*C*b^4 + 1, b, k) + 4) + pi*1i), k, 1, 4) == 0, T)

Best Answer

Look at documentation on ode45. You don't need a symbolic solution if you just want to get T as a function of t.
Like the following, for example:
tspan = [0 1]; % replace the 1 with your desired end time
T0 = 673;
[t, T] = ode45(@dTdtfn, tspan, T0);
plot(t,T),grid
xlabel('time'),ylabel('Temperature')
function dTdt = dTdtfn(~,T)
% Define A B C and D
A = 10^-6; B = 1; C = 1; D = 10^-2; % Replace with your values
dTdt = B + C - A*(T^4) - D*T;
end