Giải pháp tượng trưng cho một hệ thống gồm 7 phương trình phi tuyến


9

Tôi đã có một hệ thống các phương trình vi phân thông thường - 7 phương trình và ~ 30 tham số điều chỉnh hành vi của chúng như là một phần của mô hình toán học truyền bệnh. Tôi muốn thích để tìm các bang đều đặn cho những phương trình Thay đổi dx/dt = rest of the equationđể 0 = equationcho mỗi người trong số các phương trình làm cho nó một vấn đề đại số đơn giản. Điều này có thể được thực hiện bằng tay, nhưng tôi cực kỳ tệ ở kiểu tính toán đó.

Tôi đã thử sử dụng Mathicala, có thể xử lý các phiên bản nhỏ hơn của vấn đề này ( xem tại đây ), nhưng Mathicala đang tạm dừng vấn đề này. Có cách nào hiệu quả / hiệu quả hơn để tiếp cận điều này? Một hệ thống toán học tượng trưng hiệu quả hơn? Gợi ý khác?

Một vài cập nhật (ngày 21 tháng 3):

  • Mục tiêu thực sự là để giải quyết chúng một cách tượng trưng - các câu trả lời bằng số rất hay nhưng hiện tại mục tiêu cuối cùng là phiên bản tượng trưng.
  • Có ít nhất một điểm cân bằng. Tôi đã không thực sự ngồi xuống và chứng minh điều này, nhưng theo thiết kế, nó nên có ít nhất một thứ tầm thường trong đó không có gì bị nhiễm khi bắt đầu. Có thể không có gì ngoài điều đó, nhưng điều đó sẽ khiến tôi hài lòng như mọi thứ khác.
  • Dưới đây là bộ phương trình thực tế đang được nói đến.

nhập mô tả hình ảnh ở đây

Tóm lại, tôi đang tìm các biểu thức tượng trưng cho các giải pháp của một hệ thống gồm 7 phương trình bậc hai trong 7 biến.


Bạn có thể viết các phương trình xuống? Việc giải một hệ phương trình phi tuyến lớn không giới hạn thường được thực hiện bằng phương pháp số bằng phương pháp Newton hoặc một trong các biến thể của nó. Sự lựa chọn ở đây sẽ phụ thuộc vào lượng thông tin bạn có về hệ phương trình ban đầu - quan trọng nhất là Jacobian của hệ phương trình có sẵn, tính toán được hay dễ dàng xấp xỉ?
Aron Ahmadia

à! Tôi thấy rằng các phương trình của bạn được trình bày chi tiết trên trang Mathicala. Bạn có phiền mang chúng đến đây không? (Đây không phải là đăng chéo, đặc biệt nếu chúng tôi sẽ đề xuất các giải pháp số cho bạn ngoài phạm vi những gì Mathicala có thể làm).
Aron Ahmadia

Tôi sẽ mang các phương trình từ Mathicala sau hôm nay - sau 5 giờ lái xe tôi phải tránh đường.
Fomite

1
Không . Nó xuất hiện là như vậy từ các phương trình trên. Tui bỏ lỡ điều gì vậy? dUsdt=dHdt
ja72

1
@GeoffOxberry: vì vậy khi các đạo hàm được tính bằng 0, cả hai phương trình # 1 và # 2 đều giống hệt nhau và người ta có thể bỏ qua.
ja72

Câu trả lời:


13

Có vẻ như các phương trình bạn xử lý đều là đa thức sau khi xóa mẫu số. Đó là một điều tốt (các chức năng siêu việt thường khó hơn một chút để đối phó với đại số). Tuy nhiên, nó không đảm bảo rằng các phương trình của bạn có một giải pháp dạng đóng. Đây là một điểm cốt yếu mà nhiều người không thực sự "hiểu", ngay cả khi họ biết nó trên lý thuyết, vì vậy nó có thể nghỉ ngơi: có những hệ phương trình khá đơn giản mà không có cách nào đưa ra các giải pháp về mặt ( th) gốc, v.v ... Một ví dụ nổi tiếng (trong một biến) là x 5 - x + 1 = 0 . Xem thêm trang wikipedia này .nx5x+1=0

Phải nói rằng, tất nhiên cũng có những hệ phương trình thể giải được, và đáng để kiểm tra xem hệ thống của bạn có phải là một trong những hệ thống đó không. Và ngay cả khi hệ thống của bạn không thể được giải quyết, vẫn có thể tìm thấy một hình thức cho hệ phương trình của bạn đơn giản hơn, theo một nghĩa nào đó. Ví dụ: tìm một phương trình chỉ liên quan đến biến thứ nhất (ngay cả khi không thể giải được đại số), thì phương trình thứ hai chỉ liên quan đến biến thứ nhất và biến thứ hai, v.v. Có một vài lý thuyết cạnh tranh về cách tìm "dạng bình thường" như vậy của hệ đa thức; nổi tiếng nhất là lý thuyết cơ sở Groebner, và một lý thuyết cạnh tranh là lý thuyết về chuỗi thông thường.

Trong hệ thống đại số máy tính Maple (công bố đầy đủ: tôi làm việc cho họ) cả hai đều được thực hiện. Các solvelệnh thường gọi phương thức cơ sở Groebner, tôi tin rằng, và nhanh chóng kim để ngăn chặn trên laptop của tôi. Tôi đã thử chạy tính toán chuỗi thông thường và mất nhiều thời gian hơn tôi kiên nhẫn nhưng dường như không làm nổ tung trí nhớ kém. Trong trường hợp bạn quan tâm, trang trợ giúp cho lệnh tôi đã sử dụng ở đây và đây là mã tôi đã sử dụng:

restart;
sys, vars := {theta*H - rho_p*sigma_p*
       Cp*(Us/N) - rho_d*sigma_d*D*(Us/N)*rho_a*sigma_a*
       Ca*(Us/N) = 0, 
         rho_p*sigma_p*Cp*(Us/N) + rho_d*sigma_d*
       D*(Us/N)*rho_a*sigma_a*Ca*(Us/N) + theta*H = 0, 
         (1/omega)*Ua - alpha*Up - rho_p*psi_p*
       Up*(H/N) - Mu_p*sigma_p*Up*(Cp/N) - 
             Mu_a*sigma_a*Up*(Ca/N) - Theta_p*
       Up + Nu_up*(Theta_*M + Zeta_*D) = 0, 
         alpha*Up - (1/omega)*Ua - rho_a*psi_a*
       Ua*(H/N) - Mu_p*sigma_p*Ua*(Cp/N) - 
             Mu_a*sigma_a*Ua*(Ca/N) - Theta_a*
       Ua + Nu_ua*(Theta_*M + Zeta_*D) = 0, 
         (1/omega)*Ca + Gamma_*Phi_*D + rho_p*psi_p*
       Up*(H/N) + Mu_p*sigma_p*Up*(Cp/N) + 
             Mu_a*sigma_a*Up*(Ca/N) - alpha*Cp - Kappa_*
       Cp - Theta_p*Cp + Nu_cp*(Theta_*M + Zeta_*D) = 0, 
         alpha*Cp + Gamma_*(1 - Phi_)*D + rho_a*psi_a*
       Ua*(H/N) + Mu_p*sigma_p*Ua*(Cp/N) + 
             Mu_a*sigma_a*Ua*(Ca/N) - (1/omega)*
       Ca - Kappa_*Tau_*Ca - Theta_a*Ca + 
             Nu_ca*(Theta_*M + Zeta_*D) = 
     0, Kappa_*Cp + Kappa_*Tau_*Ca - Gamma_*Phi_*
       D - Gamma_*(1 - Phi_)*D - 
             Zeta_*D + Nu_d*(Theta_*M + Zeta_*D) = 0, 
    Us + H + Up + Ua + Cp + Ca + D = 0, 
         Up + Ua + Cp + Ca + D = 0}, {Us, H, Up, Ua, Cp, Ca, D, N, 
    M}:

sys := subs(D = DD, sys):
vars := subs(D = DD, vars):
params := indets(sys, name) minus vars:
ineqs := [theta > 0 , rho_p > 0 , sigma_p > 
       0 , rho_d > 0 , sigma_d > 0 , 
            rho_a > 0 , sigma_a > 0 , 
      omega > 0 , alpha > 0 , psi_p > 0 , Mu_p > 0 , 
            Mu_a > 0 , Theta_p > 0 , Nu_up > 0 , Theta_ > 
       0 , Zeta_ > 0 , psi_a > 0 , 
            Theta_a > 0 , Nu_ua > 0 , Gamma_ > 0 , Phi_ > 
       0 , Kappa_ > 0 , Nu_cp > 0 , 
            Tau_ > 0 , Nu_ca > 0]:
with(RegularChains):
R := PolynomialRing([vars[], params[]]):
sys2 := map(numer, map(lhs - rhs, normal([sys[]]))):
sol := LazyRealTriangularize(sys2,[],map(rhs, ineqs),[],R);

7

Cách chuyên nghiệp là viết các phương trình của bạn bằng ngôn ngữ mô hình hóa như AMPL hoặc GAM và giải nó bằng một bộ giải như IPOPT.

AMPL là một hệ thống thương mại, nhưng phiên bản sinh viên miễn phí của AMPL có thể đặt ra các vấn đề với tối đa 300 phương trình và biến.

Nếu bạn chỉ muốn giải quyết một hoặc một vài vấn đề, bạn có thể giải quyết trực tuyến một cách tự do bằng cách sử dụng máy chủ NEOS để tối ưu hóa - chỉ cần gửi mô tả AMPL và đợi câu trả lời được trả về cho bạn.

Nếu bạn cần giải quyết các hệ thống như vậy nhiều lần như một phần của một nghiên cứu lớn hơn (ví dụ: thay đổi các tham số), bạn nên tải xuống IPOPT (là phần mềm theo giấy phép rất tự do).

Chỉnh sửa: Lưu ý rằng các giải pháp tượng trưng có thể hiểu được thường bị giới hạn ở các vấn đề khá nhỏ - điển hình là kích thước của cơ sở Groebner tăng trưởng bùng nổ với số lượng biến hoặc mức độ của đa thức và thời gian xử lý nhiều hơn. Do đó, thời gian chờ đợi từ một giờ trở lên với Mathematica là một dấu hiệu (mặc dù không phải là bằng chứng) rằng giải pháp biểu tượng của bạn sẽ hoàn toàn không thể hiểu được. Hơn nữa, việc đánh giá một biểu thức dài như vậy có thể không ổn định về số lượng, do đó bạn sẽ cần độ chính xác cao trong đánh giá để có được kết quả có ý nghĩa.


6

Để viết ra toàn bộ giải pháp là không thể trong lý do. Nhưng đây là một số phương trình để giảm hệ thống xuống một chút:

USUS

US=HNθ(γ+ζ)CAKA+Cp+KD
KA=γρAσA+κρDσDτ+ρAσAζKD=γρpσp+κρDσD+ρpσpζ

D

D=κ(CAτ+Cp)γ+ζ.

CACP

UAUPUAUP (bất cứ điều gì không được giải quyết khi thêm các phương trình 3 và 5 với nhau).

UAUPHCACPD

HCACPCACP . Các gốc của phương trình này sẽ xác định trạng thái ổn định của hệ thống; có thể hoặc không thể tìm thấy những rễ này một cách tượng trưng.

Chúc may mắn!


USDUAUPUSHCACP

HCACPCACP

Ngay trên. @GeoffOxberry, tôi nghĩ bạn chỉ nên thêm ý kiến ​​của mình trực tiếp vào câu trả lời của ja72.
David Ketcheson

@DavidKetcheson: Xong; Tôi không quan tâm đến việc chia sẻ nó, bởi vì đại diện không quan trọng. Tôi chưa quay trở lại và điền vào các thao tác tượng trưng.
Geoff Oxberry

3

Nó phụ thuộc vào cấu trúc của phương trình của bạn.

Nếu bạn đang tìm kiếm tất cả các trạng thái ổn định của tập phương trình của mình bạn có thể sắp xếp lại chúng như ErikP nói thành đa thức, bạn có thể sử dụng các phương pháp từ hình học đại số thực để tính tất cả các giải pháp số cho độ chính xác cao. Bertini là một trong những gói như vậy mà tôi biết, nhưng có những gói khác. Tôi đã đi đến một hội nghị tại Nhà thờ Đức Bà vài năm trước, nơi Bertini được sử dụng để tìm trạng thái ổn định của ODE từ động học hóa học; Bertini được phát triển tại Nhà thờ Đức Bà.

Một khả năng khác là sử dụng các phương pháp được đề xuất trong "Thử nghiệm loại trừ Nonsmooth để tìm tất cả các giải pháp của phương trình phi tuyến" của MD Stuber, V. Kumar và PI Barton, BIT Numerical Toán 50 (4), 885-917, DOI: DOI: 10.1007 / s10543-010-0280-6 ; các phương pháp này không yêu cầu hệ phương trình phải là đa thức. Paul Barton là cố vấn của tôi và Matt Stuber là đồng nghiệp của tôi; nếu bạn thích, tôi có thể yêu cầu anh ta cho phần mềm và gửi nó cho bạn. Bài viết sử dụng các phương pháp từ tối ưu hóa toàn cầu và số học khoảng (nó trích dẫn cuốn sách của ArnoldNeumaier), cũng như phương pháp của Newton. Ưu điểm của phương pháp này là nên định vị tất cả các giải pháp; nhược điểm là nó phức tạp.

F(x)=0 trực tiếp bằng cách sử dụng phương pháp của Newton (thường sẽ hoạt động nếu bạn đưa ra dự đoán ban đầu tốt, đủ gần với một giải pháp), bạn giải quyết

minxSF(x),

S ampl , hoặc NEOS Nếu bạn chọn một phương pháp như thế này, cần chú ý một vài hãy cẩn thận.:

  • Nó sẽ chỉ xác định vị trí nhiều nhất một giải pháp tại một thời điểm. Để tìm giải pháp bổ sung, bạn cần thêm các ràng buộc loại trừ tất cả các giải pháp trước đó bạn đã tìm thấy.
  • Nếu vấn đề tối ưu hóa của bạn là không thuyết phục, để sử dụng IPOPT hoặc các bộ giải tương tự, bạn sẽ cần một dự đoán ban đầu tốt, gần với một giải pháp của phương trình của bạn (giống như nguyên tắc cơ bản như phương pháp của Newton) hoặc một bộ giải tối ưu hóa không đối xứng như BARON , Couenne , Bonmin , v.v. Bạn nên thử mọi bộ giải bạn có trong tay, vì hiệu suất của mỗi bộ giải lập trình phi tuyến không phụ thuộc vào vấn đề.

1

Tôi sẽ đề nghị nhìn vào một phương pháp homotopy. Mặc dù nó không mang tính biểu tượng, nhưng nó sẽ tạo ra tất cả các giải pháp cho vấn đề của bạn. Đối với một thư viện dễ dàng để kiểm tra:

http://homepages.math.uic.edu/~jan/PHCpack/phcpack.html


2n

Tiến sĩ Ahmadia bạn rõ ràng đã không theo kịp các tài liệu về phương pháp đồng luân. Vui lòng đọc các ấn phẩm của Jan và sửa lại số này.
aterrel
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.