这个问题用MATLAB求解非常简单,但是题目好像有两个问题:
1、两组微分方程中的方程是否应分别为dx1/dt和dx2/dt?
2、这两个系统的过渡过程很短,没必要把仿真时间设太长(事实上,1秒都显的太长)。
程序代码如下(tf为仿真时间,可酌情修改):
dx1 = inline('[-(x(1)-1)^3-(x(1)-1)*x(2)^2; -x(2)^5]', 't', 'x');
dx2 = inline('[-x(1)^3-x(1)*x(2)^2; -x(2)^3]', 't', 'x');
X0 = [-100, 40; -100, -50; 0.01 60; 100 100];
n = size(X0,1);
tf = 0.5;
for i=1:n
x0 = X0(i, :);
[t, x] = ode45(dx1, 0:0.01:tf, x0);
subplot(n, 2, (i-1)*2+1)
plot(t, x)
legend('x_1', 'x_2', 0)
ylabel(sprintf('x_0 = (%.3g, %.3g)', x0));
if i==1, title('系统I'); end
[t, x] = ode45(dx2, 0:0.01:tf, x0);
subplot(n, 2, i*2)
plot(t, x)
legend('x_1', 'x_2', 0)
if i==1, title('系统II'); end
end
结果效果图(把2个系统、4组初值分别仿真,得到8组曲线):
附件里有两个系统的matlab程序。
运行过程:
打开所有m文件
运行Testode45 .m(第一个系统)和运行Testode452 .m(第二个系统)