Устранение комплексного числа в ответе с помощью dsolve и Matlab

Я пытался:

>> 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

person David    schedule 22.01.2014    source источник


Ответы (1)


Если ваше использование Matlab дает один ответ, а ваш ручной труд дает другой, не спешите предполагать, что Matlab виноват.

При этом получить реальную часть числа очень просто, я не могу попробовать, но с символическим набором инструментов, я думаю, вы можете просто сделать:

real(y)
person Dennis Jaheruddin    schedule 22.01.2014
comment
Смотрите выше, что у меня получилось. Похоже на решение проблемы. - person David; 22.01.2014