Lựa chọn kích thước bước sử dụng ODE trong MATLAB


12

Này và cảm ơn vì đã dành thời gian để xem xét câu hỏi của tôi. Đây là phiên bản cập nhật của câu hỏi của tôi mà tôi đã đăng trước đó trong vật lý.stackexchange.com

Tôi hiện đang nghiên cứu một máy kéo sợi exciton 2D Bose-Einstein Condensate và tò mò về trạng thái cơ bản của hệ thống này. Phương pháp toán học để đến trạng thái cơ bản được gọi là phương pháp thời gian tưởng tượng .

Phương pháp này rất đơn giản mà thời gian trong cơ học lượng tử được thay thế bằng tưởng tượng một thay thế này khiến cho các hạt năng lượng cao trong hệ thống của tôi bị hư hỏng nhanh hơn so với những năng lượng thấp. Bình thường hóa lại số lượng hạt trong mỗi bước tính toán, chúng tôi kết thúc với một hệ thống các hạt năng lượng thấp nhất, hay còn gọi là. trạng thái mặt đất.

t= =-Tôiτ

Các phương trình trong câu hỏi là phi tuyến, được gọi là phương trình Schrödinger phi tuyến , đôi khi là phương trình Gross-Pitaevskii . Để giải quyết vấn đề tôi đang sử dụng Matlabs ode45 giúp phát triển hệ thống theo thời gian và cuối cùng đạt đến trạng thái cơ bản.

  • Ghi chú! Phương trình Schrödinger phi tuyến bao gồm laplacian và một số thuật ngữ vi phân khác trong không gian. Tất cả đều được giải quyết bằng cách sử dụng biến đổi Fourier nhanh. Cuối cùng, chúng tôi chỉ có một thời gian ODE. *

Vấn đề và câu hỏi của tôi: Các tính toán đi từ đến t f . Các ode45 được đặt trong một cho vòng lặp vì vậy nó không tính toán một vector khổng lồ [ t 0 , ... , t f ] cùng một lúc. Vòng đầu tiên sẽ bắt đầu với ode45 (odefun, [ t 0 , t 0 + Δ / 2 , t 0 + Δ ] , y , ... ) và sau đó đi vào thời gian tiếp theo từ t 0 + Δt0tf[t0,Giáo dục,tf][t0,t0+Δ/2,t0+Δ],y,Giáo dụct0+Δ. Đây là bước thời gian là vấn đề của tôi. Các lựa chọn khác nhau trong các bước thời gian mang lại cho tôi các giải pháp trạng thái cơ bản khác nhau và tôi không biết làm thế nào để xác định bước thời gian nào mang lại cho tôi trạng thái cơ bản "chính xác nhất"!Δ

Nỗ lực của tôi: Tôi nhận ra rằng trong sơ đồ này, các bước thời gian lớn sẽ khiến số lượng hạt lớn bị phân rã trước khi được tái chuẩn hóa thành số hạt ban đầu trong khi các bước thời gian nhỏ sẽ khiến lượng hạt nhỏ hơn bị phân rã trước khi được tái chuẩn hóa. Suy nghĩ ban đầu của tôi là các bước thời gian nhỏ sẽ đưa ra một giải pháp chính xác hơn nhưng dường như ngược lại.

Tôi không phải là chuyên gia về số nên việc lựa chọn ode45 chỉ đơn giản là tùy ý. ode113 cho tôi điều tương tự. :

Có ai có bất kỳ suy nghĩ về vấn đề này. Hãy cho tôi biết nếu cần thêm chi tiết.

Cảm ơn bạn.

Cập nhật 1: Tôi đã nghiên cứu phương pháp thời gian tưởng tượng và ODE. Có vẻ như nếu bước thời gian không đủ nhỏ thì toàn bộ mọi thứ trở nên không ổn định. Điều này khiến tôi tự hỏi liệu phương trình phi tuyến của tôi có bị cứng không khiến mọi thứ trở nên khó khăn hơn nhiều so với những gì tôi hiểu. Tôi sẽ cập nhật cho bạn.

Cập nhật 2: CỐ ĐỊNH: Vấn đề thực sự có sự chuẩn hóa bên ngoài ODE. Nếu chuẩn hóa được giữ bên trong odefun thì ODE trả về kết quả tương tự cho các lựa chọn khác nhau của các bước thời gian "bên ngoài". Đồng nghiệp của tôi đã cho tôi xem các mã cũ hơn và tôi chỉ cần thêm một dòng trong odefun của mình.

function y_out = odefun(t,y_in,...variables...) 

    ...
    [ Nonlinear equations evaluated ]  
    ...


    y_out = y_out + 0.1*y_in*(N0-Ntemp) ;
end

Dòng cuối cùng tính toán sự khác biệt về số lượng hạt hiện tại (Ntemp) và số lượng hạt mà hệ thống nên giữ (N0). Nó thêm một phần của các hạt trở lại đầu ra và do đó tạo ra sự ổn định tổng số hạt trong hệ thống thay vì làm cho tất cả chúng bị phân rã.

Tôi cũng sẽ đặt ra một câu hỏi mới liên quan đến tính chiều của vấn đề và một số khác biệt khi làm việc với picosecond hoặc nano giây như các bước thời gian trong ODE.

Cảm ơn tất cả. :)


3
Vấn đề cơ bản là bạn buộc phải sử dụng một phương pháp thích ứng như muốn ode45()thực hiện các bước không thể thiếu. Tại sao, chính xác, bạn đang tránh việc tạo ra "vectơ khổng lồ"? Nếu bạn thực sự cần các điểm tương đương, ode45()hãy tiến hành như bình thường và sau đó sử dụng phép nội suy.
JM

y

Nếu bộ nhớ phục vụ, sẽ có một tùy chọn trong ode45()đó cho phép bạn giữ lại các bước lớn hơn một ngưỡng nhất định; Bạn có thể muốn nhìn vào đó.
JM

1
Câu trả lời là chỉ sử dụng ước tính lỗi cục bộ. Có một cái được tích hợp sẵn trong ODE45, vì vậy cách dễ nhất là sử dụng cái đó, nhưng bạn có thể thay thế mã của riêng mình.
David Ketcheson

1
0,11/thời gianαΔt(Nt-N0)Δt

Câu trả lời:


4

Vì bạn không đăng mã MATLAB của mình, tôi không chắc cách bạn gọi ode45. Tôi đoán bạn đang thay đổi vectơ tspan (đối số thứ hai) trên mỗi cuộc gọi thành ode45. Điều đầu tiên cần hiểu là vectơ tspan (hầu như) không ảnh hưởng đến bước thời gian được sử dụng bởi ode45. Vectơ tspan chỉ đơn giản cho phép bạn chuyển đến ode45 khoảng thời gian tích hợp và vào thời điểm bạn muốn đầu ra. Bước thời gian được sử dụng bởi thuật toán Runga-Kutta trong ode45 được điều chỉnh bên trong để đạt được độ chính xác theo quy định. Hai tham số kiểm soát độ chính xác này là RelTol và absTol trong cấu trúc tùy chọn được truyền cho ode45. Chúng có mặc định hợp lý và vì bạn không đề cập đến những điều này, tôi cho rằng bạn đã không thay đổi chúng.

Tôi đã nói "gần như" không ảnh hưởng đến bước thời gian ode45 bình thường. Nếu bạn đang yêu cầu đầu ra ở các khoảng thời gian rất nhỏ so với bước thời gian ode45 sẽ thực hiện, thì nó sẽ phải giảm bước thời gian để đáp ứng yêu cầu đầu ra của bạn. Tôi tin rằng đây là những gì JM đang giả định đang diễn ra. Tại sao bạn cần giải pháp ở nhiều lần đầu ra? Thông thường chỉ cần yêu cầu đầu ra ở thời gian đủ để tạo ra một âm mưu trơn tru là đủ.

Đối với thay đổi trong giải pháp bạn đang thấy, có thể các giá trị mặc định của RelTol và absTol không phù hợp với vấn đề của bạn. Tôi đề nghị thay thế vòng lặp của bạn trên ode45 bằng một cuộc gọi duy nhất, yêu cầu đầu ra ở một số lần hợp lý và thử nghiệm với các giá trị nhỏ hơn của RelTol và absTol cho đến khi bạn nhận được giải pháp hội tụ.


Cảm ơn câu trả lời. Lý do tại sao tôi cần một giải pháp ở nhiều lần đầu ra là vì nếu hàm sóng không được chuẩn hóa thường xuyên thì mọi thứ sẽ phân rã và hệ thống của tôi trống rỗng. Đó là lý do tại sao tôi đặt ode45 vào một vòng lặp với các vectơ tspan nhỏ để tôi có thể tái chuẩn hóa sau mỗi vectơ tspan.

2

Vì phương trình Schrödinger phi tuyến là tốt, phi tuyến, nên nó có thể có một số lượng lớn các trạng thái đứng yên, một số trong đó có thể ổn định. Trong thực tế vật lý, bắt đầu từ một trạng thái cụ thể, hệ thống sẽ xác định phát triển thành một trạng thái cuối cùng. Nếu sơ đồ số cung cấp cho bạn các kết quả khác nhau cho các mức độ khác nhau (các bước thời gian), thì đây là lỗ hổng cơ bản của sự rời rạc của bạn. Kiểm tra mã của bạn.

ψ0

dψdt= =F(ψ),
F(ψ0)= =0.
G(ψ)= =ΩE(ψ)
E()F(ψ)= =0E(ψ)E(ψ)= =-|ψ|4

Đúng. Tôi vẽ sơ đồ mật độ của giải pháp đầu ra của mình và khi nó không thay đổi trong một thời gian dài, về cơ bản đã ngừng phát triển, tôi cho rằng tôi đã đạt đến trạng thái đứng yên. Nhưng tôi không chắc rằng việc nhìn vào mật độ năng lượng có thể giúp ích vì hàm sóng là một spinor với các thành phần spin (+2, +1, -1, -2). Tôi không nghĩ rằng việc tích hợp từng thành phần sẽ cho tôi biết năng lượng của nước ngưng nhưng khi tôi đến trạng thái cơ bản, mật độ năng lượng phải đứng yên và do đó không đổi theo thời gian, đây là đầu mối cho một giải pháp chính xác.

1

Vấn đề được giải quyết:

Chuẩn hóa cần phải là một phần của hàm được đánh giá trong ODE. Việc phá vỡ ODE theo nhiều bước và bình thường hóa giữa chúng gây ra sự mất ổn định về số lượng và tạo ra các kết quả khác nhau tùy thuộc vào các khoảng thời gian mà ODE được chia thành. (Xem chỉnh sửa 2 trong câu hỏi để biết thêm chi tiết.)

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.