Неожиданный результат для решения обыкновенного линейного дифференциального уравнения второго порядка с SymPy - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь решить это обычное линейное дифференциальное уравнение второго порядка \ddot{s}+k^2s = 0 с помощью SymPy и получить неожиданный результат.

import sympy as sym
k, t = sym.symbols('k, t') 
s = sym.Function('s')

diff_eq = sym.Eq(s(t).diff(t, 2) + s(t) * k**2, 0) # everything fine here, when I print this I get what I expected.

solution_diff_eq = sym.dsolve(diff_eq, s(t))  
print(solution_diff_eq)

Который печатает

Eq(s(t), C1*exp(-I*k*t) + C2*exp(I*k*t))

Однако, решение, которое я ожидал - это s = A \sin{kt} + B \cos{kt}

Есть идеи, что я сделал неправильно?

1 Ответ

0 голосов
/ 29 декабря 2018

Результат печатается как

Eq(s(t), C1*exp(-I*k*t) + C2*exp(I*k*t))

, что правильно, так как I является мнимой единицей.Вы могли бы предпочесть реальную форму, но sympy не был уведомлен об этом и создал самую простую форму в виде суммы экспоненциальных терминов, тем более, что неясно, действительно ли k реально.

Если вы сделаете этоясно, что k является положительным действительным числом через

k = sym.Symbol('k', real=True, positive=True) 

решение на самом деле в реальной форме, как вы ожидали

Eq(s(t), C1*sin(k*t) + C2*cos(k*t))
...