Effacer les filtres
Effacer les filtres

solve() "Unable to find explicit solution"

14 vues (au cours des 30 derniers jours)
Andrew
Andrew le 13 Oct 2023
Commenté : Andrew le 13 Oct 2023
Using solve for an equation is not working and I'm not sure why. This has an explicit solution but it doesn't work. What am I missing?
syms g m L s Y(s)
solve(- m*(s - s^2*Y(s) + 1)*L^2 + g*m*Y(s)*L == 0,Y(s))
Warning: Unable to find explicit solution. For options, see help.
ans = struct with fields:
m: [0×1 sym] s: [0×1 sym]

Réponse acceptée

Dyuman Joshi
Dyuman Joshi le 13 Oct 2023
solve() expects the 2nd input to be an array of symbolic variable(s), where as you have defined Y as a symbolic function.
If you want to get the output as a function of "s", define it accordingly -
syms g m L s Z
Y(s) = solve(- m*(s - s^2*Z + 1)*L^2 + g*m*Z*L == 0,Z)
  1 commentaire
Andrew
Andrew le 13 Oct 2023
Thanks! This was the problem.

Connectez-vous pour commenter.

Plus de réponses (2)

Sam Chak
Sam Chak le 13 Oct 2023
If this is related to deriving the transfer function using Laplace transform, then I prefer using the isolate() function.
syms g m L s Y(s)
Eqn = - m*(s - s^2*Y(s) + 1)*L^2 + g*m*Y(s)*L == 0;
Eqn = isolate(Eqn, Y(s))
Eqn = 
  1 commentaire
Andrew
Andrew le 13 Oct 2023
Yeah it is related to the transfer function. This is very useful thanks for your help.

Connectez-vous pour commenter.


Walter Roberson
Walter Roberson le 13 Oct 2023
(I am absolutely positive I had already answered this, but there is no trace of that...)
solve() cannot solve for functions. You will need to substitute a symbolic variable for the function. For example,
syms g m L s Y(s) Ys
eqn = - m*(s - s^2*Y(s) + 1)*L^2 + g*m*Y(s)*L == 0;
solve( subs(eqn, Y(s), Ys), Ys)
ans = 
  1 commentaire
Andrew
Andrew le 13 Oct 2023
Thanks! This was the problem.

Connectez-vous pour commenter.

Tags

Produits


Version

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by