2013-04-14 7 views
0

уравнения выглядит следующим образом:Как выразить и решить эту систему дифференциальных уравнений в Matlab?

дхз (т)/дт = -c * хи (т) * уг (т)

DYI (т)/дт = а * Σ {= 1 в n} (xi (t) * yi (t)) + xi (t) * yi (t - 1) + b

где a, b и c - любые постоянные значения, которые вы хотите, например a = 1, b = 2, c = 3.

Σ {i = 1 to n} (xi (t) * yi (t)) означает суммирование от i = 1 до n, , например n = 3: x1 (t) * y1 (t) + x2 (t) * y2 (t) + x3 (t) * y3 (t)

Итак, как я могу выразить & решить это с помощью matlab?

+1

Вы проверили http://www.mathworks.com/help/symbolic/solve-a-system-of-differential-equations.html? –

+0

Да, но я не думаю, что это можно решить с помощью dsolve, потому что во втором уравнении есть такой термин: xi (t) * yi (t - 1). – JZ555

ответ

1

Вам необходимо построить так называемое дифференциальное уравнение с задержкой. Я собирался объяснить, как это сделать, но тогда я нашел это замечательное tutorial, чтобы сделать именно это. Пример 1 - это в основном то, что вам нужно.

Единственный дополнительный нюанс в том, что вы должны включать йх/и д/д в том же набор дифференциального уравнения

Позволь мне знать, если вам нужна дополнительная помощь

Edit: держать его в одном файле

function dYdt = ddefun(t,Y,Z) 
    % assume Y = [x;y] 
    x = Y(1:n); % 2n is the size of Y. this step is unnecessary ... 
    y = Y(n+1:2*n); % but helps visualize what is happening 

    ytau = Z(:,1); 

    dYdt(1:n) = -c*x.*y; 
    dYdt(n+1:2*n) = a*dot(x,y) + x.*ytau + b 

end 
+0

Спасибо. Я провел некоторое исследование этих замедленных дифференциальных уравнений и нашел здесь еще один пример: http://matlab.cheme.cmu.edu/tags/delay-differential-equation/ – JZ555

+0

В этом примере вам фактически не нужно включать уравнения в тот же набор. Итак, я должен сделать, чтобы создать функцию истории, которая дает мне прошлые значения xi и yi. Теперь единственная проблема заключается в том, как я создаю суммирование внутри функции, которая включает мой dde? – JZ555

+0

@ user2280026 Поскольку уравнения переплетаются, вы должны включить уравнения в один и тот же набор. То, что вы тогда делаете, - это [точка] (http://www.mathworks.com/help/matlab/ref/dot.html) продукта по переменным. Не переутомляйте свою проблему: см. Править выше – Rasman

0

Если вы ищете численное решение (это означает, что вам также нужны начальные условия), то наиболее распространенным решателем является ode45. Ссылка дает примеры того, как выражать конкретные ОДУ.

Позже Edit: Для термина у я ( т − 1) вы можете интегрировать функцию «куски» длины 1 для т — например t ∈ {[0,1], [1,2], [2,3] ...} — и используя ранее найденное решение как коэффициент в фактическом времени «кусок». Подобным образом решения «питаются» от самих себя, и вы не будете обеспокоены сверткой. Разумеется, необходимо рассмотреть y i ( t − 1) = 0 (или другая известная функция) в начальной итерации.