使用dsolve和Matlab消除答案中的复数

时间:2014-01-22 16:18:35

标签: matlab differential-equations

我试过了:

>> dsolve('Dy=(x+2)/(x*(3-x))','y(1)=2','x')

得到了这个答案:

ans = (pi*5*i)/3 - (5*log(x - 3))/3 + (5*log(2))/3 + (2*log(x))/3 + 2

正确的手工生成答案是:

y = 2/3*log(x) -5/3*log(3-x) + (2+5/3*log(2))

如何消除Matlab答案中的复数?

好的,试过这个:

>> dsolve(diff(y)==(x+2)/(x*(3-x)),y(1)==2,x)

ans =

(pi*5*i)/3 - (5*log(x - 3))/3 + (5*log(2))/3 + (2*log(x))/3 + 2

>> real(ans)

ans =

(2*log(abs(x)))/3 + (5*log(2))/3 - (5*log(abs(x - 3)))/3 + 2

>> pretty(ans)

  2 log(|x|)   5 log(2)   5 log(|x - 3|)
  ---------- + -------- - -------------- + 2
      3           3             3

1 个答案:

答案 0 :(得分:0)

如果您使用matlab给出了一个答案而您的手工劳动给出了另一个答案,那么不要太快地认为matlab是错误的。

话虽如此,获取一个数字的真实部分非常容易,我无法尝试但是使用符号工具箱我相信你可以这样做:

real(y)