Tôi có một giải pháp đồng nhất cho một ODE thứ hai đơn giản, khi tôi cố gắng giải quyết các giá trị ban đầu bằng Sympy, trả về cùng một giải pháp. Nó nên thay thế cho y (0) và y '(0) và mang lại một giải pháp không có hằng số, nhưng không. Đây là mã để thiết lập phương trình (nó là một phương trình cân bằng mùa xuân, k = hằng số mùa xuân và m = khối lượng). Một số biểu tượng thừa mà tôi sử dụng ở nơi khác, xin lỗi.Thứ tự thứ hai Sympy ode
%matplotlib inline
from sympy import *
m,k, x,t,s,T, omega,A,B = symbols('m k x t s T omega A B',float=True)
a = symbols('a', positive=True)
f,y,g,H,delta,S=symbols('f y g H delta S',cls=Function)
Eq1 = Eq(m*diff(y(t),t,2)+k*y(t))
Eq1
Kết quả là (chính xác): $ y {\ left (t \ right)} = C_ {1} e^{- t \ sqrt {- \ frac {k} {m}}} + C_ {2} e^{t \ sqrt {- \ frac {k} {m}}} $
y (t) = C1e^(- t√ (−k/m)) + C2e^(t√ (−km)), cũng có y_n = c1.cos (√ (−k/m) t) + c2.sin (√ (−k/m) t).
Khi phương trình này được giải quyết một cách phân tích và chuyển đổi thành giải pháp sử dụng sin và cosin với omega = sqrt (-k/m), rồi c1 = y (0) và c2 = y '(0)/omega. Vì vậy, trong khi giải pháp là một phần liên quan đến số phức, tất nhiên, dsolve chỉ đơn giản là trả về phương trình thuần nhất ban đầu như trên. Mã của tôi để đánh giá ODE tại y (0) và y '(0) là:
Eq1_soln_IVP =dsolve(Eq1,y(t),x0=0, ics={y(0): a, y(t).diff(t).subs(t, 0): a})
Tôi đánh giá cao dsolve mà chỉ đơn giản có thể không có khả năng xử lý IVP này phân tích, nhưng tôi sẽ ngạc nhiên nếu điều này là rất dựa trên khả năng khác của nó. Bất kỳ trợ giúp như thế nào vấn đề này và do đó các vấn đề thứ tự phân tích thứ hai khác có thể được giải quyết sẽ được nhiều đánh giá cao. Nub của câu hỏi là xung quanh:
ics={y(0): a, y(t).diff(t).subs(t, 0): a}
Vì vậy, các giải pháp tôi đã cố gắng, mà Dietrich khẳng định, là:
#Create IVP for y(0)
expr = Eq(Eq1_soln_IVP.rhs.subs(sqrt(-k/m),I*omega),y(0))
#Create IVP for y'(0)
expr2 = Eq(diff(y(t),t).subs(t,0),expr.lhs.diff(t))
#Maps all free variables and solves for each where t = 0.
solve([expr.subs(t,0),expr2.subs(t,0)])
Trong khi đó là "một" giải pháp, điều này dường như là một cách rất phức tạp của tìm y (t) = y (0) cos (omega * t - phi) ... trả lời câu hỏi ngầm về một số hạn chế của người giải quyết này và câu hỏi trực tiếp về cách mà ics arg được giải quyết. Cảm ơn.
Cảm ơn Dietrich đã lưu ý vấn đề 4720 và để xác nhận độc lập giải pháp duy nhất tôi có thể xây dựng. Trả lời với sự đánh giá cao của tôi. –
Vì vậy, vấn đề toán học ở đây là người giải quyết không sử dụng các thay thế bằng cách sử dụng các phương trình Euler. Biến các thuật ngữ e^{\ pm i \ omega t} thành giải pháp thành dạng m.cos (\ omega t) + ni sin (\ omega t) là rất quan trọng để tìm ra ý nghĩa thực và vật lý của các phương trình này, trong trường hợp này một lò xo có trọng lượng lơ lửng ở cuối, trong đó y (t) là một dịch chuyển dao động. Sympy. âm mưu đối phó với hình thức trig nhưng không phải ở tất cả với các hình thức phức tạp, loại trừ trực quan hiệu quả, cũng có. –
Nó phụ thuộc vào các dấu hiệu 'm' và' k'. Nếu bạn viết 'm, k = sy.symbols ('m k', positive = True)', bạn sẽ nhận được giải pháp thực (vật lý). Có khá nhiều ứng dụng, nơi các giải pháp phức tạp được sử dụng. BTW, bạn sẽ phải đối phó với cùng một vấn đề, nếu bạn sử dụng Mathematica hoặc Maple. – Dietrich