在matlab中获取复杂函数的实部和虚部

时间:2017-09-07 19:06:33

标签: matlab

我有一个问题。我有函数f(t)= C3 * exp(t * x * 1i)+ C4 * exp(-t * x * 1i)作为微分方程(作为syms)的解。但我需要这个解决方案作为一个真正的函数(C3 * cos + C4 * sin)。我该怎么做?我怎样才能得到这个函数的实部和虚部? matlab中有一个函数允许我这样做吗?

2 个答案:

答案 0 :(得分:2)

您可以使用rewrite根据余弦和正弦重写表达式,然后collecti的形式收集系数,为您提供真实和虚构的术语:

f = C3*exp(t*x*1i) + C4*exp(-t*x*1i);
g = collect(rewrite(f, 'sincos'), i)

g =

(C3*sin(t*x) - C4*sin(t*x))*1i + C3*cos(t*x) + C4*cos(t*x)

如果C3等于C4,您可以从上面看到假想项为零。

答案 1 :(得分:0)

您可以使用rewrite以正弦和余弦重写表达式/函数。仍然无法应用realimag函数来获取各个部分,以便在非符号计算的情况下获得更好的形式。在复杂表达式中获取实部和虚部的技巧是substitute i使用0获取实部,然后从原始表达式中减去实部以获得虚数部分。使用simplify作为担保人。

一个例子:

syms C3 C4 t x
f(t) = C3*exp(t*x*1i) + C4*exp(-t*x*1i);
fsincos = rewrite(f, 'sincos');
realf = simplify(subs(fsincos, i,0));
imagf = simplify(fsincos-realf);
%or you can use the collect function to avoid simplify

>> fsincos

fsincos(t) =

C3*(cos(t*x) + sin(t*x)*1i) + C4*(cos(t*x) - sin(t*x)*1i)

>> realf

realf(t) =

cos(t*x)*(C3 + C4)

>> imagf

imagf(t) =

sin(t*x)*(C3*1i - C4*1i)