求高手解决此数值分析编程问题,c++或者matlab都可以

matlab或者c++都行,我把所有的分都悬赏了,跪谢!
2024-11-29 04:53:18
推荐回答(2个)
回答1:

这个问题用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组曲线):

回答2:

附件里有两个系统的matlab程序。

运行过程:

  1. 打开所有m文件

  2. 运行Testode45 .m(第一个系统)和运行Testode452 .m(第二个系统)