我有一个问题。我有函数f(t)= C3 * exp(t * x * 1i)+ C4 * exp(-t * x * 1i)作为微分方程(作为syms)的解。但我需要这个解决方案作为一个真正的函数(C3 * cos + C4 * sin)。我该怎么做?我怎样才能得到这个函数的实部和虚部? matlab中有一个函数允许我这样做吗?
答案 0 :(得分:2)
您可以使用rewrite
根据余弦和正弦重写表达式,然后collect
以i
的形式收集系数,为您提供真实和虚构的术语:
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
以正弦和余弦重写表达式/函数。仍然无法应用real
和imag
函数来获取各个部分,以便在非符号计算的情况下获得更好的形式。在复杂表达式中获取实部和虚部的技巧是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)