Giải ODE số ít phi tuyến tính với SciPy odeint / ODEPACK


8

Tôi muốn giải phương trình đẳng nhiệt Lane-Emden [PDF, eq. 15.2.9]

d2ψdξ2+2ξdψdξ= =e-ψ

với điều kiện ban đầu

ψ(ξ= =0)= =0dψdξ|ξ= =0= =0

sử dụng SciPyodeint() nhưng, như có thể thấy, phương trình là số ít ở gốc. Các tài liệu nói rằng nó sử dụng ODEPACK.

Tôi đã biết chuỗi lũy thừa của giải pháp trong một khu phố của ξ= =0 ( ref ):

ψ(ξ)ξ26-ξ4120+ξ61890

Tôi cố gắng thiết lập tcritđể np.array([0.0]), nhưng không làm việc: Tôi nhận được một cảnh báo về giá trị không hợp lệ và sau đó giải pháp của tôi là tất cả NaN. Tôi có nên tích hợp bắt đầu từ 0,01 không? Hoặc có giải pháp nào khác không?


Lưu ý rằng mọi thứ đều hoạt động tốt nếu tôi bắt đầu tích hợp từ . Tôi chỉ muốn chắc chắn rằng không có cách nào khác. t0>0
astrojuanlu

1
Dường như có một số vấn đề với công thức của bạn. Tôi không biết phương trình này, vì vậy tôi đã tìm ra nó và chỉ đưa ra phương trình "Lane" -Emden có phần khác biệt. Ngoài ra, bạn có nghĩa là các công cụ phái sinh của bạn liên quan đến hoặc t ? ξt
Bill Barth

@BillBarth, bạn đã đúng có lỗi, ý tôi là . Tôi cũng đã thêm một tham chiếu đến phương trình, được lấy từ một khóa học về Cấu trúc và Tiến hóa của Stellar ( www2.astro.psu.edu/users/rbc/astro534.html ) tại Đại học Bang Pennsylvania (bài học về Polytropes). Đó là phương trình 15.2.9. ξ
astrojuanlu

Câu trả lời:


7

Được rồi, câu trả lời này là một cú đánh trong bóng tối, nhưng ở đây đi.

Đầu tiên, chuyển đổi ODE bậc hai thành một hệ thống gồm hai ODE. Để cho

φ1= =ψ,φ2= =ψ˙,

nơi các dấu chấm trên đỉnh chức năng tương ứng với sự khác biệt đối với các biến độc lập (trong trường hợp này, với ).ξ

Sau đó, ODE ẩn thứ hai

ψ¨(ξ)+2ξ-1ψ˙(ξ)= =e-ψ(ξ)ψ(0)= =0ψ˙(0)= =0

có thể được biểu thị dưới dạng ODE rõ ràng theo thứ tự

φ˙1(ξ)= =φ2(ξ)φ˙2(ξ)= =-2ξ-1φ2(ξ)+e-φ1(ξ)φ1(0)= =0φ2(0)= =0.

Lúc đầu, có thể thấy rằng chúng ta không thể đánh giá phía bên tay phải của hệ thống ODE rõ ràng này tại , giống như một nhà tích hợp số yêu cầu. Nếu một giải pháp cho hệ thống này tồn tại, thì nó phải khác biệt. Giả định rằng một giải pháp tồn tại, lấy giới hạn của phía bên tay phải là ξ 0 .ξ= =0ξ0

Đầu tiên, chúng ta biết rằng

limξ0φ2(ξ)= =0,

bởi vì chúng ta đã giả định rằng một giải pháp tồn tại, vì vậy là khả vi, mà có nghĩa là nó phải được liên tục. Giới hạn của hàm liên tục tại một điểm là giá trị của nó tại điểm đó và chúng ta biết giá trị của φ 2 ( 0 ) vì đây là điều kiện ban đầu.φ2φ2(0)

Chúng tôi cũng biết rằng

limξ0e-φ1(ξ)= =1

vì những lý do tương tự; chúng tôi đã giả sử rằng là khác biệt, vì vậy nó liên tục và φ 1 ( 0 ) = 0 vì đây là điều kiện ban đầu.φ1φ1(0)= =0

Cuối cùng,

limξ0-2φ2(ξ)ξ= =limξ0-2φ˙2(ξ),

bằng cách sử dụng Quy tắc l'Hôpital về hình thức không xác định .0/0

Để tiến hành hơn nữa, chúng ta phải làm cho giả thuyết khác: là liên tục tại ξ = 0 . Sau đó, nó theo đóφ˙2ξ= =0

limξ0-2φ˙2(ξ)= =-2φ2˙(0).

Xem xét lại các ODE bậc nhất, và đánh giá bên tay phải ở , chúng ta có thể thấy rằng chúng ta có:ξ= =0

φ˙1(0)= =0φ˙2(0)= =-2φ˙2(0)+1,

φ˙2(0)= =1/3

ifξ= =0


φ1= =ψφ2= =ψ˙ψ¨(0)= =1/3if

@ Juanlu001: Cuộc gọi tốt; Tôi đã sửa chữa sai lầm.
Geoff Oxberry

Bạn đa đung! Nó đơn giản như một ifmệnh đề đơn giản . Cảm ơn bạn!
astrojuanlu

3

Nếu bạn muốn có thêm tùy chọn cho bộ giải ODE của mình, hãy xem gói Assimulo thực hiện các ràng buộc với gói CVODE (và RADAU và một số tích hợp đơn giản cho vấn đề đó).


Gói rất có giá trị, không biết điều đó! Cảm ơn rât nhiều.
astrojuanlu

ifξ0

1
@GeoffOxberry: Tôi tin rằng bộ giải IDA của bộ Sundials (mà Assimulo kết thúc cho Python) cho phép tìm kiếm một giá trị ban đầu nhất quán bắt đầu từ dự đoán của người dùng. Điều này sẽ cho phép Juanlu001 bắt đầu từ việc mở rộng chuỗi của mình như dự đoán ban đầu và để IDA giải quyết chính xác (về mặt số lượng, đó là) IV.
GertVdE
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.