2016-10-20 6 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

Вы можете непосредственно заменить значения в результате использования 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) 

То же самое с b