linux 从查看本机地址到端口映射

IDEA中如何使用Debug调试项目

  返回  

数学建模学习(29):matlab求解微分方程组详细讲解,代码+案例讲解,学不会找我!

2021/8/21 6:31:58 浏览:

文章目录

    • 前言
    • 求解微分方程组
    • 求解矩阵微分方程组
    • 总结

前言

上一篇我已经详细讲过求微分方程,这一篇是对上一篇的补充,也就是变得稍微复杂一点,就是要求方程组了,如果你学会了上一篇,那么求解方程组其实并不难了。上一篇传送门:添加链接描述`

求解微分方程组

比如我们要求解以下方程组
在这里插入图片描述
解析:
首先第一步是生命变量

syms u(t) v(t)

使用 == 定义方程并使用 diff 函数表示微分。

ode1 = diff(u) == 3*u + 4*v;
ode2 = diff(v) == -4*u + 3*v;
odes = [ode1; ode2]

此时我们会看到返回如下:
在这里插入图片描述

使用 dsolve 函数求解系统,该函数将解作为结构元素返回。

S = dsolve(odes)

返回如下
在这里插入图片描述
要访问 u(t) 和 v(t),请索引到结构 S。

uSol(t) = S.u
vSol(t) = S.v

或者,通过提供多个输出参数直接存储 u(t) 和 v(t)

[uSol(t), vSol(t)] = dsolve(odes)

因此全部代码为:

%案例一
syms u(t) v(t)
ode1 = diff(u) == 3*u + 4*v;
ode2 = diff(v) == -4*u + 3*v;
odes = [ode1; ode2]
[uSol(t), vSol(t)] = dsolve(odes)

返回结果:
在这里插入图片描述
因为没有指定条件,所以出现常数 C1 和 C2。使用初始条件 u(0) == 0 和 v(0) == 0 求解系统。 dsolve 函数查找满足这些条件的常量的值。

cond1 = u(0) == 0;
cond2 = v(0) == 1;
conds = [cond1; cond2];
[uSol(t), vSol(t)] = dsolve(odes,conds)

此时matlab全部代码则为::

%案例一
syms u(t) v(t)
ode1 = diff(u) == 3*u + 4*v;
ode2 = diff(v) == -4*u + 3*v;
odes = [ode1; ode2]
%[uSol(t), vSol(t)] = dsolve(odes)
cond1 = u(0) == 0;
cond2 = v(0) == 1;
conds = [cond1; cond2];
[uSol(t), vSol(t)] = dsolve(odes,conds)

返回结果
在这里插入图片描述
使用 fplot 可视化解决方案。

fplot(uSol)
hold on
fplot(vSol)
grid on
legend('uSol','vSol','Location','best')

则此时matlab全部代码为:

%案例一
syms u(t) v(t)
ode1 = diff(u) == 3*u + 4*v;
ode2 = diff(v) == -4*u + 3*v;
odes = [ode1; ode2]
%[uSol(t), vSol(t)] = dsolve(odes)
cond1 = u(0) == 0;
cond2 = v(0) == 1;
conds = [cond1; cond2];
[uSol(t), vSol(t)] = dsolve(odes,conds)
fplot(uSol)
hold on
fplot(vSol)
grid on
legend('uSol','vSol','Location','best')

返回结果如下:
在这里插入图片描述

求解矩阵微分方程组

跟上面一样的,一葫芦画瓢。
例子如下:
在这里插入图片描述
则我们应该化为如下形式:
在这里插入图片描述
第一步定义这些矩阵和矩阵方程。

%矩阵微分
clear all
clc
syms x(t) y(t)
A = [1 2; -1 1];
B = [1; t];
Y = [x; y];
odes = diff(Y) == A*Y + B

返回
在这里插入图片描述

使用 dsolve 求解矩阵方程。通过使用simple 函数来简化解决方案。

[xSol(t), ySol(t)] = dsolve(odes);
xSol(t) = simplify(xSol(t))
ySol(t) = simplify(ySol(t))

返回
在这里插入图片描述
因为没有指定条件,所以出现常数 C1 和 C2。
现在使用初始条件 u(0) = 2 和 v(0) = -1 求解系统。当以矩阵形式指定方程时,您也必须以矩阵形式指定初始条件。 dsolve 查找满足这些条件的常量的值。

C = Y(0) == [2; -1];
[xSol(t), ySol(t)] = dsolve(odes,C)

返回
在这里插入图片描述
使用 fplot 可视化解决方案。

clf
fplot(ySol)
hold on
fplot(xSol)
grid on
legend('ySol','xSol','Location','best')

此时matab全部代码为:

%矩阵微分
clear all
clc
syms x(t) y(t)
A = [1 2; -1 1];
B = [1; t];
Y = [x; y];
odes = diff(Y) == A*Y + B
[xSol(t), ySol(t)] = dsolve(odes);
xSol(t) = simplify(xSol(t))
ySol(t) = simplify(ySol(t))
C = Y(0) == [2; -1];
[xSol(t), ySol(t)] = dsolve(odes,C)
clf
fplot(ySol)
hold on
fplot(xSol)
grid on
legend('ySol','xSol','Location','best')

可视化返回
在这里插入图片描述

总结

本片为止,我们已经学会了全部的微分方程求解。下一篇我将分析现实中的真实案例进行讲解,让我们编程人解决实际生活中问题。
github下载地址:

https://github.com/89461561511656/matlab

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号