如何用matlab求解非线性微分方程组

2024-12-26 02:54:07
推荐回答(2个)
回答1:

使用符号运算工具。

首先定义变量符号
syms s x t;
使用字符串定义公式
eq1 = 'diff(x, t) = 0.11*s*x/(0.06*x+s)';
eq2 = 'diff(s, t) = (-1)*0.029*x-0.234*s/(0.006*x+s)-s/(30*s^2+300*s+0.03)';

接下来是求解 比如现在要求解s,下面的代码可以给出s的表达式
solution = solve(eq1, eq2, s);

接下来求值
首先给变量赋值
x = 1;
t = 1;
之后运行
result = eval(solution);
可以求出解。

我现在写出的代码可能有错误,不过思路是这样的。我没调试。详细情况可以搜索 matlab 符号运算。

回答2:

若求解析解,没有解,过程如下:
dsolve('Dx=0.11*s*x/(0.006*x+s)','Ds=-0.029*x-0.234*s/(0.006*x+s)-s/(30*s^2+300*s+0.003)','t')
Warning: Explicit solution could not be found.
> In dsolve at 101

ans =

[ empty sym ]
若求数值解,过程如下:
m函数定义:
function dy=f7(t,y)
dy=[0.11*y(1)*y(2)/(0.006*y(1)+y(2));-0.029*y(1)-0.234*y(2)/(0.006*y(1)+y(2))-y(2)/(30*y(2)^2+300*y(2)+0.003)];
主程序:
[t,y]=ode45('f7',[0,20],[0;0])

t =

0
0.5000
1.0000
1.5000
2.0000
2.5000
3.0000
3.5000
4.0000
4.5000
5.0000
5.5000
6.0000
6.5000
7.0000
7.5000
8.0000
8.5000
9.0000
9.5000
10.0000
10.5000
11.0000
11.5000
12.0000
12.5000
13.0000
13.5000
14.0000
14.5000
15.0000
15.5000
16.0000
16.5000
17.0000
17.5000
18.0000
18.5000
19.0000
19.5000
20.0000

y =

0 0
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
貌似也不理想,不知道是不是初值设的不好的原因!