2011-04-25 121 views
0

当我尝试使用dsolve象征性解决,它无法找到一个明确的解决方案:如何在MATLAB中求解微分方程组?

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) 
+0

要加上那个点,可能y0是'[-1 0 0 0.5 0]' – Rasman 2011-04-26 15:38:07

+0

为什么是负数?我试着今晚运行它,并在晚些时候依靠你 – Jo0o0 2011-04-27 01:07:39

+0

我不知道你是如何得出你的方程和初始条件的,但是'-1'使系统稳定,而'1'没有。当您将'0.5'更改为'-0.5'时,情况并非如此 – Rasman 2011-04-27 02:31:03