Borrar filtros
Borrar filtros

Symbolic toolbox with complex exponentials

51 visualizaciones (últimos 30 días)
Alex Gros-Balthazard
Alex Gros-Balthazard el 11 de Ag. de 2019
Comentada: Star Strider el 11 de Ag. de 2019
Hello Matlab people,
I have a question about the symbolic toolbox when using complex numbers.
Quite often I will end up with a solution to either a differential equation or by some manner, in which the matrix solution is the sum of complex exponentials representing real valued a signal. But I can't seem to reliably force matlab to just combine them.
So for example:
exp(t*(4 - 2i))/2 + exp(t*(4 + 2i))/2
a symbolic function of t.
Of course, in final form we would normally want to express that as a sinusoid multiplied by a real exponential.
I've tried the combine function (maybe not correctly), expand, collect.. I've hand written an inverse laplace transform to convert complex conjugate poles and residues automatically to convert compex residues conjugate poles into "normal looking" real valued functions when doing inverse laplace which seems to work until the numerical inaccuracy starts to grow for more complicated transfer functions.
Is there a way to get matlab to do autmatically combine the complex conjugate exponential terms into sinusoidal functions?
So the above expression could be of the form:
exp( 4*t ) * cos( 2t)
And more generally of the form:
A * exp( a*t) * cos( w*t + theta )
or
B1 * exp( a*t) * cos( w*t ) + B2 * exp( a*t) * sin( w*t )
Thanks.

Respuesta aceptada

Star Strider
Star Strider el 11 de Ag. de 2019
One approach is to use the rewrite and simplify functions:
syms t
y = exp(t*(4 - 2i))/2 + exp(t*(4 + 2i))/2
Y = simplify(rewrite(y, 'sin'), 'Steps', 50)
producing:
y =
exp(t*(4 - 2i))/2 + exp(t*(4 + 2i))/2
Y =
cos(2*t)*exp(4*t)
See the documentation for the fucntions for details and examples.
  2 comentarios
Alex Gros-Balthazard
Alex Gros-Balthazard el 11 de Ag. de 2019
Thank you.
Star Strider
Star Strider el 11 de Ag. de 2019
As always, my pleasure.

Iniciar sesión para comentar.

Más respuestas (1)

Alex Gros-Balthazard
Alex Gros-Balthazard el 11 de Ag. de 2019
That's interesting, so it actually seems to work even if you don't explicitlly use the rewrite function.
Just
simplify( y , 'Steps', 50 );
So I needed to allow simplification to take more steps.
Wow, the default number of simplification steps is n=1 according to the docs..
  1 comentario
Star Strider
Star Strider el 11 de Ag. de 2019
True, although rewrite can be extremely useful, especially if you want a result in a particular form. Telling simplify to keep working until it arrives at the best result usually works as werll. I’ve used up to 500 steps in some situations.

Iniciar sesión para comentar.

Categorías

Más información sobre Symbolic Math Toolbox en Help Center y File Exchange.

Productos


Versión

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by