Sử dụng tối ưu việc tách Strang (cho phương trình khuếch tán phản ứng)


9

Tôi đã thực hiện một quan sát kỳ lạ trong khi tính toán giải pháp cho phương trình khuếch tán phản ứng 1D đơn giản:

ta=2x2aab

tb=ab

tc=a

Giá trị ban đầu của là một hằng số ( b ( 0 , x ) = b 0 ), và tôi chỉ quan tâm đến không thể thiếu trong một từ 0 để 1 ( 1 0 một ( t , x ) d t ). Mục đích của c và phương trình bb(0,x)=b0a0101a(t,x)dtcchỉ là để đánh giá tích phân này.tc=a

Tôi đã sử dụng sơ đồ phân tách Strang cho sự kết hợp giữa khuếch tán và phản ứng (phản ứng nửa bước, sau đó là khuếch tán toàn bước, rồi lại phản ứng nửa bước), sơ đồ Crank Nicholson để khuếch tán và giải pháp phân tích cho phản ứng ( bao gồm các phương trình ).tc=a

Bởi vì một bước của giải pháp phân tích chậm hơn một yếu tố 3 so với một bước của sơ đồ Crank Nicholson, tôi đã cố gắng thực hiện nhiều hơn một bước Crank Nicholson cho mỗi bước phản ứng. Tôi đã hy vọng có được với ít bước hơn trong sơ đồ chia tách Strang, để tôi sẽ nhanh hơn về tổng thể.

Tuy nhiên, hiệu ứng ngược lại có thể được quan sát, cụ thể là cần nhiều bước hơn cho sơ đồ phân tách Strang nếu cần sử dụng nhiều hơn một bước Crank Nicholson. (Tôi chỉ quan tâm đến tính chính xác của các tích phân trên , mà dường như hội tụ nhanh hơn so với một chính nó.) Sau khi tự hỏi một thời gian, tôi nhận thấy rằng tác dụng tương tự cũng xảy ra cho b ( t , x ) = b 0 = 0 , và tôi thậm chí hiểu lý do tại sao cho trường hợp này. Vấn đề là nếu tôi thực hiện chính xác một bước Crank Nicholson, thì sơ đồ tổng thể biến thành quy tắc hình thang (nếu b ( t ) = 0 ).aab(t,x)=b0=0b(t)=0

Vì vậy, nếu tôi sẽ đối xử với như là một phần của bước khuếch tán, tăng số lượng các bước Crank Nicholson (có lẽ) sẽ không dẫn đến giảm độ chính xác tổng thể (như quan sát). Nhưng điều đó dường như đánh bại mục đích sử dụng một giải pháp phân tích cho phần phản ứng (phi tuyến tính và có khả năng rất cứng) của hệ thống.tc=a

Vì vậy, đây là câu hỏi của tôi: Có cách nào tốt hơn để điều trị trong bối cảnh phân tách Strang, hơn là coi nó như một phần của bước phản ứng, hoặc coi nó như một phần của bước khuếch tán. Tôi muốn tránh bị "ép buộc" sử dụng chính xác một bước Crank Nicholson để khuếch tán. .tc=a


Trong people.maths.ox.ac.uk/dellar/OperatorLB.html , một hiệu ứng tương tự dường như được mô tả. Kết luận là việc sử dụng Crank Nicholson thay vì giải pháp chính xác là rất quan trọng. Vì vậy, có lẽ câu trả lời cho câu hỏi của tôi là không đơn giản.
Thomas Klimpel

Một cái gì đó có vẻ sai với phương trình của bạn. không xuất hiện trong hai lần đầu tiên thực hiện khớp nối một chiều và có nghĩa là bạn có thể tính c ở bất kỳ t nào như một bước xử lý hậu kỳ. cct
Bill Barth

@BillBarth Tôi đã thay đổi câu hỏi để làm rõ vai trò của . Vậy c chỉ là phương tiện để tính 1 0 a ( t , x ) d t . Vui lòng cho tôi biết nếu bạn có bất kỳ đề xuất nào về cách tính tích phân này chính xác hơn (so với những gì tôi nhận được từ sự kết hợp giữa tách lạ và Crank Nicholson được mô tả ở trên), có khả năng sử dụng bước xử lý hậu kỳ. cc01a(t,x)dt
Thomas Klimpel

Điều này bây giờ đã qua lâu, nhưng bạn có nhận ra rằng hệ phương trình này có thể được viết dưới dạng PDE parabol trong với thuật ngữ phản ứng theo cấp số nhân không? Tôi đoán tôi tự hỏi nếu bạn thực sự muốn giải quyết hệ thống 3 biến này thay vì một hệ thống đơn giản hóa. c
Bill Barth

@BillBarth Tôi rất muốn tìm hiểu làm thế nào hệ thống này có thể được viết dưới dạng PDE parabol với thuật ngữ phản ứng theo cấp số nhân. Tốc độ của giải pháp của mô hình này là một yếu tố hạn chế trong quá trình hiệu chuẩn mô hình (có thể mất vài giờ), do đó độ chính xác được sử dụng đối với tích hợp thời gian là khá xa so với hội tụ đầy đủ.
Thomas Klimpel

Câu trả lời:


6

Tôi sẽ viết điều này như một câu trả lời mặc dù nó không trả lời trực tiếp câu hỏi.

Cắm phương trình thứ hai và phương trình thứ ba vào đầu tiên, và cắm thứ ba vào thứ hai, cùng đưa ra: Sắp xếp lại hai cho:

2ct2=2x2ct+btbt=(ct)b
Bây giờ, chúng tôi có thể tích hợp cả hai một lần trongt, để lại cho phương trình đầu tiên: c
t(ct2cx2b)=01b(bt)=ct
t Sử dụng phương trình thứ ba, chúng tôi có thể bày tỏ sự "liên tục" hội nhập nhưA(x)=một0-2c0
ct2cx2=b+A(x)
. Phương trình thứ hai là một chút khó khăn hơn. Viết lại một chút, chúng ta có: t 0 1A(x)=a02c0x2b0
0t1b(x,t)(b(x,t)t)dt=0tc(x,t)tdt
lnb(x,t)lnb0(x)=c(x)+c0(x)
lnbb0=c+c0
b=b0ec0c
c
ct2cx2=b0ec0c+A(x)

Replacing c by cc0, or equivalently using the initial conditions c0(x)=0, this equation simplifies to

ct=2cx2+a0(1ec)b0
Now, you should be able to find considerable literature on the best way to solve this equation. I don't know if Crank-Nicholson is a good choice for the exponential term, but it seems plausible. Some care should probably be taken to guarantee that c>c0 everywhere or the solution may blow up quickly.

I've only walked through this derivation twice, so there may be an error or two in it, but it has the right feel to me. If b0=0 everywhere, then this is clearly the right solution, and it has a whiff of plausibility otherwise.

Solving this until t=1 and evaluating c(x,1) should give you the answer you are looking for.


Thanks so much for this answer. I find it quite illuminating, at least it makes it easier for me to understand/predict the behavior of the solution. Another advantage is that the time evolution of c is slower than the time evolution of a, so I'm quite optimistic that convergence will be better than before.
Thomas Klimpel

No problem. I was nagging at me after our initial exchange of comments. I hope it's helpful.
Bill Barth
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.