Как решить систему дифференциальных уравнений в MATLAB?

#matlab

#matlab

Вопрос:

Когда я пытаюсь использовать dsolve для символического решения, он не может найти явное решение:

 T = 5;
r = 0.005;

dsolve(
'Dp11 = p12^2/r - 4*p12 - 2',
'Dp12 = p12 - p11 - 2*p22   (p12*p22)/r',
'Dp22 = 2*p22 - 2*p12   p22^2/r',
'Dg1 = g2*(p12/r - 2) - 1',
'Dg2 = g2*(p22/r   1) - g1',
'p11(T)=1',
'p12(T)=0',
'p22(T)=0',
'g1(T)=0.5',
'g2(T)=0')

syms x1 x2
x = [x1; x2];
u = -inv(R)*B'*(P*x - g)

u = -(p12*x1 - g2   p22*x2)/r

dsolve(
'Dp11 = p12^2/r - 4*p12 - 2',
'Dp12 = p12 - p11 - 2*p22   (p12*p22)/r',
'Dp22 = 2*p22 - 2*p12   p22^2/r',
'Dg1 = g2*(p12/r - 2) - 1',
'Dg2 = g2*(p22/r   1) - g1')

T = 5;
r = 0.005;
dsolve('Dp11 = p12^2/0.005 - 4*p12 - 2','Dp12 = p12 - p11 - 2*p22   (p12*p22)/0.005','Dp22 = 2*p22 - 2*p12   p22^2/0.005','Dg1 = g2*(p12/0.005 - 2) - 1','Dg2 = g2*(p22/0.005   1) - g1')
dsolve('Dp11 = p12^2/0.005 - 4*p12 - 2','Dp12 = p12 - p11 - 2*p22   (p12*p22)/0.005','Dp22 = 2*p22 - 2*p12   p22^2/0.005','Dg1 = g2*(p12/0.005 - 2) - 1','Dg2 = g2*(p22/0.005   1) - g1','p11(5)=1','p12(5)=0','p22(5)=0','g1(5)=0.5','g2(5)=0')
  

Затем я пытаюсь решить следующее и построить график, но следующее не может быть решено
с помощью ode45, failure at t = 2.39e-001 Unable to meet integration tolerances without reducing the step size below the smallest value allowed (4.44e-016) at time t

Тогда я пытаюсь y0 = [0 0 0 0 0] это может решить, однако это не конечное условие. Как я должен это решить?

 t0 = 0;
tf = 5;
y0 = [1 0 0 0.5 0];
[X, Y] = ode45(@exampleode, [t0 tf], y0);

function dy = exampleode(t, y)
r = 0.005;
dy = zeros(5, 1);
dy(1) = y(2)^2/r - 4*y(2) - 2;
dy(2) = y(2) - y(1) - 2*y(3)   (y(2)*y(3))/r;
dy(3) = 2*y(3) - 2*y(2)   y(3)^2/r;
dy(4) = y(5)*(y(2)/r - 2) - 1;
dy(5) = y(5)*(y(3)/r   1) - y(4);
  

Ответ №1:

dsolve неплохо справляется с решением линейных дифференциальных уравнений. Ваша проблема в том, что вы добавляете к ней нелинейный дифференциал, который кажется больше, чем он может обработать. Посмотрите на это так: общего решения для полиномиального уравнения пятой степени не существует: каждое решение должно быть найдено численно.

Это ваша вторая проблема, не уверен, что вы разобрались в этом, но ваше уравнение крайне нестабильно!

 [X, Y] = ode45(@exampleode, [t0 0.238], y0);
plot (X,Y)
  

Комментарии:

1. почему отрицательное? я пытаюсь запустить это сегодня вечером и довериться вам позже

2. Я не знаю, как вы вывели свое уравнение и начальные условия, но -1 делает систему стабильной, в то время как 1 этого не делает. Это неверно, когда вы меняете 0.5 на -0.5