7 개의 비선형 방정식 시스템의 상징적 솔루션


9

나는 일반적인 미분 방정식-7 개의 방정식과 질병 전염의 수학적 모델의 일부로 그들의 행동을 지배하는 ~ 30 개의 매개 변수를 가지고 있습니다. 나는 것 같은 변경하는 식의 정상 상태를 찾을 수 dx/dt = rest of the equation0 = equation방정식의 각이 간단한 대수 문제하게합니다. 이것은 손으로 할 수 있지만, 나는 그런 종류의 계산에 엄청나게 나쁘다.

나는이 문제의 더 작은 버전을 처리 할 수있는 Mathematica를 사용해 보았지만 ( here 참조 ) Mathematica는이 문제를 멈추기 위해 갈고 있습니다. 더 효율적이고 효과적인 방법이 있습니까? 더 효율적인 상징적 수학 시스템? 다른 제안?

몇 가지 업데이트 (3 월 21 일) :

  • 목표는 실제로 그것들을 상징적으로 해결하는 것입니다-수치 적 대답은 훌륭 하지만 현재 최종 목표는 상징적 버전입니다.
  • 하나 이상의 평형이 있습니다. 나는 실제로 이것을 앉 히지 않았고 이것을 증명 하지는 않았지만, 설계 상 처음에는 아무 것도 감염되지 않은 사소한 것을 가지고 있어야합니다. 이 아무것도하지 않을 수 있습니다 게다가 그,하지만 아무것도 같은 내용으로 저를 만들 것입니다.
  • 아래는 논의중인 실제 방정식 세트입니다.

여기에 이미지 설명을 입력하십시오

요약하면, 나는 7 개의 변수에서 7 개의 2 차 방정식의 시스템에 대한 기호식을 찾고 있습니다.


방정식을 적을 수 있습니까? 제약이없는 비선형 방정식의 대규모 시스템 풀기는 종종 뉴턴의 방법이나 그 변형 중 하나를 사용하여 수치 적으로 수행됩니다. 여기서 선택은 원래 방정식 시스템에 대한 정보의 양에 따라 다릅니다. 가장 중요한 것은 방정식 시스템의 Jacobian이 사용 가능하거나 계산 가능하거나 쉽게 추정 할 수 있습니까?
Aron Ahmadia

아아! 귀하의 방정식이 Mathematica 사이트에 자세히 나와 있습니다. 여기로 가져가시겠습니까? (특히 Mathematica가 할 수있는 범위를 넘어서 수치 솔루션을 제안하려는 경우에는 교차 게시가 아닙니다.)
Aron Ahmadia

나는 오늘 나중에 Mathematica에서 방정식을 가져올 것입니다-5 시간 운전 후 나는 길을 벗어나야합니다.
Fomite

1
아닌가 . 위의 방정식에서 나온 것처럼 보입니다. 뭔가 빠졌습니까? dUsdt=dHdt
ja72

1
@GeoffOxberry : 미분 값이 0 일 때 방정식 # 1과 # 2는 동일하며 하나는 생략 할 수 있습니다.
ja72

답변:


13

다루는 방정식이 분모를 모두 제거한 후 다항식처럼 보입니다. 좋은 일입니다 (초월 함수는 대수적으로 다루기가 조금 더 어렵습니다). 그러나 방정식에 닫힌 형태의 해가 있다고 보장 할 수는 없습니다. 이것은 많은 사람들이 이론적으로 그것을 알고 있더라도 실제로 "얻지"않는 필수 포인트이므로 다음과 같이 결론을 내립니다. 다항식의 상당히 간단한 시스템이 있습니다. ( 번째) 근 등. 한 예에서 유명한 예는 입니다. 이 위키 백과 페이지 도 참조 하십시오 .nx5x+1=0

물론 풀 있는 방정식 시스템도 있으며 시스템이 그 중 하나인지 확인하는 것이 좋습니다. 또한 시스템을 풀 수없는 경우에도 어떤 식 으로든 더 간단한 방정식 시스템의 양식을 찾을 수 있습니다. 예를 들어, 첫 번째 변수 만 포함하는 하나의 방정식 (대수적으로 풀 수없는 경우에도)을 찾은 다음 첫 번째 변수와 두 번째 변수 만 포함하는 두 번째 방정식 등을 찾으십시오. 다항식 시스템의; 가장 잘 알려진 것은 Groebner의 기본 이론이며, 경쟁하는 이론은 정규 체인 이론입니다.

컴퓨터 대수 시스템 Maple (전체 공개 : 나는 그들을 위해 일함)에서 두 가지가 모두 구현됩니다. 이 solve명령은 일반적으로 Groebner 기본 방법을 호출하며 랩톱에서 빠르게 중단됩니다. 나는 정규 체인 계산을 시도했지만 인내심보다 오래 걸리지 만 메모리 측면에서 나쁘지 않은 것처럼 보입니다. 관심이 있으시다면 내가 사용한 명령에 대한 도움말 페이지는 here 이며 여기에 내가 사용한 코드가 있습니다.

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

전문적인 방법은 AMPL 또는 GAMS와 같은 모델링 언어로 방정식을 작성하고 IPOPT와 같은 솔버로 해결하는 것입니다.

AMPL은 상용 시스템이지만 무료 학생용 AMPL 버전은 최대 300 개의 방정식 및 변수에 문제를 일으킬 수 있습니다.

하나 또는 몇 가지 문제를 해결하려는 경우 최적화를 위해 NEOS 서버를 사용하여 온라인에서 자유롭게 해결하도록 할 수 있습니다. AMPL 설명을 제출하고 답변이 표시 될 때까지 기다리십시오.

더 큰 연구의 일환으로 이러한 시스템을 반복적으로 해결해야하는 경우 (예 : 매개 변수 변경) IPOPT (자유 라이센스가있는 소프트웨어)를 다운로드해야합니다.

편집 : 이해할 수있는 상징적 인 솔루션은 일반적으로 매우 작은 문제로 제한됩니다. 일반적으로 Groebner 기준의 크기는 변수의 수 또는 다항식의 정도와 처리 시간에 따라 폭발적으로 증가합니다. 따라서 Mathematica의 1 시간 이상의 대기 시간은 상징적 솔루션이 완전히 이해할 수 없다는 신호입니다 (증거는 아님). 또한 이러한 긴 표현을 평가하는 것은 수치 적으로 불안정 할 수 있으므로 의미있는 결과를 얻으려면 평가에서 높은 정밀도가 필요합니다.


6

전체 솔루션을 작성하는 것은 이유 내에서 불가능합니다. 그러나 다음은 시스템을 약간 낮추는 몇 가지 방정식입니다.

US 방정식 1과 2 이외의 방정식에는 나타나지 않습니다. 또한,이 방정식은 종속 세트 (방정식 1은 방정식 1의 -1 곱하기 2)이므로 방정식 1을 풀 수 있습니다. US 다른 모든 변수의 관점에서, 식 2는 폐기 될 수있다.

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

방정식 7은 모든 변수에서 선형이며, 풀기 위해 다시 배열 할 수 있습니다. D:

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

결과 식은 다음과 같이 남아있는 변수를 풀어야한다고 제안합니다. CACP; 우리는 6 개의 독립 방정식 만 가지고 있기 때문에 우리가 할 수있는 최선은 두 변수에서 시스템을 하나의 방정식으로 줄이는 것입니다.

다행히 방정식 3과 5를 함께 추가하면 모든 변수에서 선형 인 방정식을 얻을 수 있으며 UA 또는 UP. 방정식 4와 6을 함께 더하면 모든 변수에서 선형 인 방정식을 얻을 수 있습니다.UA 또는 UP (방정식 3과 5를 더할 때 해결되지 않은 것).

이 시점에서 우리는 UAUP 의 관점에서 H, CA, CP (당신이 제거 할 수 있기 때문에 D위의 표현을 사용하여). 우리는 방정식 1, 2, 5, 6 및 7을 사용했습니다. 우리는 방정식 3과 4를 더 단순하게 유지합니다.

방정식 3 또는 4를 사용하여 H 의 관점에서 CACP. 그런 다음 필요한 모든 치환을 수행하면 나머지 방정식은CACP. 이 방정식의 근본은 시스템의 정상 상태를 결정합니다. 상징적으로 이러한 뿌리를 찾는 것이 가능하거나 불가능할 수도 있습니다.

행운을 빕니다!


US방정식 1 및 2 이외의 방정식에는 나타나지 않습니다. 나는 방정식 1, 2 및 7을 제거했다고 가정합니다. (이것이 가장 쉬운 해결 방법입니다.) 방정식 3과 5를 추가하면 모든 변수에서 선형 인 방정식을 얻을 수 있습니다. 따라서 쉽게 해결할 수 있습니다. 마찬가지로 방정식 4와 6을 추가하면 모든 변수에서 선형 인 방정식을 얻을 수 있으므로 쉽게 풀 수 있습니다. 7의 4 개 변수를 처리합니다.D, UA, UP, US), 모든 것이 H, CA, CP.
Geoff Oxberry

이 시점에서 방정식 3과 4가 남았습니다. (수식 5와 6은 더 많은 용어를 가지고 있으므로 버려 보자.) 그 중 하나를 사용하여 풀 수 있습니다.H 의 관점에서 CACP그 시점에서 두 변수 측면에서 단일 방정식이 있습니다. CACP이 경우 방정식을 완전히 잘못 읽지 않는 한 상징적 솔루션을 찾기가 더 쉬울 수 있습니다.
Geoff Oxberry

바로 @ GeoffOxberry, ja72의 답변에 직접 의견을 추가해야한다고 생각합니다.
David Ketcheson

@DavidKetcheson : 완료; 담당자가 중요하지 않기 때문에 그것을 위키하는 것에 대해 걱정하지 않습니다. 나는 다시 돌아가서 아직 상징적 인 조작을하지 않았다.
Geoff Oxberry

3

방정식의 구조에 따라 다릅니다.

당신이 찾고 있다면 모든 방정식의 당신의 세트의 정상 상태, ErikP은 다항식으로 말하는 것처럼 당신이 그들을 다시 정렬 할 수 있습니다, 당신은 높은 정밀도에 대한 모든 수치 솔루션을 계산하기 위해 실제 대수 기하학에서 방법을 사용할 수 있습니다. Bertini 는 내가 아는 패키지 중 하나이지만 다른 패키지도 있습니다. 나는 몇 년 전 노트르담 (Notre Dame)에서 베르 티니 (Bertini)가 화학 역학에서 꾸준한 ODE 상태를 찾기 위해 사용 된 회의에 갔다. Bertini는 Notre Dame에서 개발되었습니다.

또 다른 가능성은 MD Stuber, V. Kumar 및 PI Barton, BIT Numerical Mathematics 50 (4), 885-917, DOI : DOI : 10.1007에 의해 "비선형 방정식의 모든 솔루션을 찾기위한 비평 활 제외 테스트 에서 제안 된 방법을 사용하는 것입니다. / s10543-010-0280-6 ; 이 방법은 방정식 시스템이 다항식 일 필요는 없습니다. 폴 바튼 (Paul Barton)은 저의 고문이며 매트 스튜 버 (Matt Stuber)는 저의 동료입니다. 당신이 좋아하면, 나는 그에게 소프트웨어를 요청하고 당신에게 보낼 수 있습니다. 이 논문은 Newton의 방법뿐만 아니라 전역 최적화 및 구간 산술 (ArnoldNeumaier의 책을 인용)의 방법을 사용합니다. 이 방법의 장점은 모든 솔루션을 찾아야한다는 것입니다. 단점은 복잡하다는 것입니다.

명확하지 않은 경우 ArnoldNeumaier는 해결하는 대신 제안합니다. F(x)=0 Newton의 방법과 같은 것을 직접 사용하여 (일반적으로 솔루션에 충분히 가까운 초기 추측을하면 작동합니다)

minxSF(x),

여기서 는 해결하려고하는 대신 문제에 대한 제약 조건으로 정의 된 실행 가능한 집합입니다. 매우 조잡한 수준에서 부드러운 비선형 프로그래밍 솔버를 사용하는 것은 Newton의 방법을 사용하는 것과 비슷하며 견고성과 성능을위한 알고리즘을 추가로 정교하게 만듭니다. IPOPT 는이 목적을위한 정말 좋은 소프트웨어입니다. 다른 솔버가 많이 있습니다 ( GAMS , AMPL 또는 NEOS에 대한 사용 가능한 솔버 목록을 참조 하십시오. 이와 같은 방법을 선택하는 경우 몇 가지주의 사항에 유의하십시오.S

  • 한 번에 최대 하나의 솔루션 만 찾습니다. 추가 솔루션을 찾으려면 이전에 찾은 모든 솔루션을 제외하는 제약 조건을 추가해야합니다.
  • IPOPT 또는 유사한 솔버를 사용하려면 최적화 문제가 볼록하지 않은 경우 방정식의 솔루션 (Newton의 방법과 동일한 기본 원리) 에 가깝거나 BARON , Couenne , Bonmin 과 같은 볼록하지 않은 최적화 솔버에 가까운 초기 추측이 필요합니다. 각각의 비 볼록 비선형 프로그래밍 솔버의 성능은 문제에 따라 달라 지므로 모든 솔버를 사용해보십시오.

1

나는 homotopy 방법을 보는 것이 좋습니다. 상징적이지는 않지만 문제의 모든 해결책을 제시합니다. 쉽게 확인할 수있는 도서관 :

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


예! Homotopy 연속 방법은 기하 급수적으로 어렵습니다 (고려해야합니다)2n초기 '시작'조건), 그러나이 작은 문제의 경우 계산적으로 다루기 쉽고 최소화 문제의 전체적인 최적 성을 보장 할 수 있습니다.
Aron Ahmadia

아마 디아 박사 (Dr. Ahmadia)는 분명히 호모 토피 방법에 관한 문헌을 따라 가지 않았습니다. Jan의 간행물을 읽고이 번호를 수정하십시오.
aterrel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.