# Solve symbolic equation for a variable which itself is a function of time

2 views (last 30 days)
Christian Noerkjaer on 26 Sep 2023
Edited: Walter Roberson on 26 Sep 2023
Hello
I am trying to solve a symbolic equation for the variable, theta_ddot.
I have defined the angle (theta) and acceleration (theta_ddot) as time dependant, which seems to cause a problem when I try to solve the equation symbolically. MATLAB give the warning: "Warning: Unable to find explicit solution. For options, see help"
I have tried to not define theta and theta_ddot as time dependant which solves the problem. However I need them to be time dependant since I have to take the time derivative later on so I can't do that.
I have attached my code below
syms m a J theta_ddot(t) theta(t) tau_1 g eq1
eq1 = (m*a^2 + J) * theta_ddot + a*g*m*cos(theta)
eq1(t) = S = solve(tau_1 == eq1,theta_ddot)
Warning: Unable to find explicit solution. For options, see help.
S = struct with fields:
t: [0×1 sym] tau_1: [0×1 sym]
Hope someone can help explain what seems to be the problem. :)

Steven Lord on 26 Sep 2023
If you're trying to solve a differential equation, try using dsolve instead of solve.
Christian Noerkjaer on 26 Sep 2023
That unfortunately does not seem to help. Since the equation does not contain a derivative as matlab would understand it, it seems dsolve can't do the trick. I would very much like to avoid substituting the theta_ddot term back to the double partial derivative of theta.
syms m a J theta_ddot(t) theta(t) tau_1 g eq1
eq1 = (m*a^2 + J) * theta_ddot + a*g*m*cos(theta)
eq1(t) = S = dsolve(tau_1 == eq1,theta_ddot)
Error using symengine
No differential equations found. Specify differential equations by using symbolic functions.

T = feval_internal(symengine,'symobj::dsolve',sys,x,options);

Error in dsolve (line 203)
Walter Roberson on 26 Sep 2023
Edited: Walter Roberson on 26 Sep 2023
syms m a J theta_ddot(t) theta(t) tau_1 g eq1
theta_dot = diff(theta);
theta_ddot = diff(theta_dot);
eq1 = (m*a^2 + J) * theta_ddot + a*g*m*cos(theta)
eq1(t) = S = dsolve(tau_1 == eq1)
S = tdd = diff(S, t, t)
tdd = simplify(tdd, 'steps', 50)
ans = Derivative of union is not a good sign.
In the final result, the reason for there to be a conditional on the 0 and for there to be no other values, is that it is MATLAB's way of saying that the solution can be defined as 0 under those particular cases, but is otherwise undefined.

### Categories

Find more on Numeric Solvers in Help Center and File Exchange

R2023b

### Community Treasure Hunt

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

Start Hunting!