Неожиданный результат при решении обыкновенного линейного дифференциального уравнения второго порядка с помощью SymPy

Я пытаюсь решить это обычное линейное дифференциальное уравнение второго порядка  \ 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}

Есть идеи, что я сделал не так?


person Simplex    schedule 29.12.2018    source источник
comment
Когда я подставляю ответ в исходное уравнение и .doit (), он проверяется как решение. Возможно ли, что он представляет собой действительную альтернативную форму другого решения (которое я не могу видеть отсюда).   -  person smichr    schedule 29.12.2018


Ответы (1)


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

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))
person Lutz Lehmann    schedule 29.12.2018
comment
Спасибо за быстрый ответ! :) - person Simplex; 29.12.2018