2016-10-20 5 views
3

변수 eqn1과 eqn2에 의해 주어진 미분 방정식의 시스템을 풀려고합니다.Matlab : 조건이 작동하지 않는 dsolve

lambda1 = 3; 
lambda2 = 2; 
gamma1 = 1; 
gamma2 = 1; 
delta1 = 1; 
delta2 = 1; 

syms n1(t) n2(t) 
eqn1 = diff(n1) == (lambda1 - gamma1)*n1 - delta1*(n1 + n2)*n1; 
eqn2 = diff(n2) == (lambda2 - gamma2)*n2 - delta1*(n1 + n2)*n2; 

c1 = n1(0) == 10; 
c2 = n2(0) == 10; 
[a, b] = dsolve(eqn1, eqn2, c1, c2) 

나는 조건 (C1)을 지정하고 C2 그냥 실행되지 않는 경우 :

[a, b] = dsolve(eqn1, eqn2) 

을 한 후 모든 것이 잘 내가 얻을 :

a = 

(6*exp(2*t)*n1(0))/(3*exp(2*t)*n1(0) + 4*exp((3*t)/2)*n2(0) + 6) 


b = 

(6*exp(t/2)*exp(t)*n2(0))/(3*exp(2*t)*n1(0) + 4*exp((3*t)/2)*n2(0) + 6) 

을하지만 최대한 빨리하려고으로 소스 코드에서 볼 수 있듯이 n1 (0)과 n2 (0)을 지정하기 위해 다음과 같은 경고 메시지가 표시됩니다.

a = 

Warning: The result cannot be displayed due a previously interrupted  computation or out of memory. Run 'reset(symengine)' and rerun the commands to regenerate the result. 
> In sym.disp at 36 
    In sym.display at 37 
    In competingForResources at 15 

b = 

    [] 

그리고 결과를 플로팅 할 수 없습니다. 나는 거기에서 무엇을 놓치고 있습니까? 올바른 방법으로 조건을 지정하는 방법, 그래서 결과를 얻을 수 있습니까?

답변

1

직접 b

subs

[a, b] = dsolve(eqn1, eqn2); 
a=subs(a,'n1(0)',10); 
a=subs(a,'n2(0)',10) 

a = 

(60*exp(2*t))/(30*exp(2*t) + 40*exp((3*t)/2) + 6) 

같은 사용하여 결과의 ​​값을 대체 할 수 있습니다