首页 > 编程笔记 > MATLAB笔记 阅读:23

MATLAB dsolve()函数:求解微分方程(附带实例)

微分方程是数学的重要分支之一,大致与微积分同时产生,并随实际需要而发展。在高等数学中,将含自变量、未知函数和它的微商(或偏微商)的方程称为常(或偏)微分方程,如:


一般地,未知函数是一元函数的,叫作常微分方程;未知函数是多元函数的,叫作偏微分方程。微分方程有时也简称方程。

在 MATLAB 中,实现微分方程求解的函数是 dsolve(),它的调用格式及说明如下表所示:

表 1 dsolve() 函数调用格式及说明
调用格式 说明
S = dsolve(eqn) 求解常微分方程,eqn 是一个使用 diff 和 “=” 表示微分方程的符号方程
S = dsolve(eqn,cond) 用初始条件或边界条件求解常微分方程
S = dsolve(eqn,cond,Name,Value) 使用一个或多个名称-值对组参数指定附加选项
Y = dsolve(eqns) 求解常微分方程组,并返回包含解的结构数组。结构数组中的字段数量对应系统中独立变量的数量
Y = dsolve(eqns,conds) 用初始条件或边界条件 conds 求解常微分方程组 eqns
Y = dsolve(eqns,conds,Name,Value) 使用一个或多个名称-值对组参数指定附加选项
[y1,…,yN] = dsolve(eqns) 求解常微分方程组,并将解分配给变量
[y1,…,yN] = dsolve(eqns,conds) 用初始条件或边界条件 conds 求解常微分方程组 eqns
[y1,…,yN] = dsolve(eqns,conds,Name,Value) 使用一个或多个名称-值对组参数指定附加选项

【实例 1】求解微分方程,MATLAB 程序如下:
>> close all                                   % 关闭当前已打开的文件
>> clear                                       % 清除工作区的变量
>> syms x(t) y(t)                              % 定义符号函数x(t)和y(t)
>> eqns=[diff(x,t)==y,diff(y,t)==-x];          % 输入微分方程组
>> S=dsolve(eqns)                              % 求解微分方程组
S =
包含以下字段的 struct:
   y: [1x1 sym]
   x: [1x1 sym]
>> disp(' ')                                   % 显示空值
  
>> disp(['微分方程组的解',blanks(2),'x',blanks(22),'y'])%显示指定的内容
微分方程的解  x                      y
>> disp([S.x,S.y])                             % 显示方程的解
[ C1*cos(t) + C2*sin(t), C2*cos(t) - C1*sin(t)]

【实例 2】求微分方程 y′2+5y′−xy=0 的通解,MATLAB 程序如下:
>> clear all                                   % 清除工作区的变量
>> syms y(x)                                   % 定义符号函数y(x)
>> eqn=diff(y,x,2)+5*diff(y,x)-x*y==0;         % 定义符号表达式
>> y=dsolve(eqn)                               % 求解微分方程
y =
    (C1*airy(0, x + 25/4))/exp(5*x)^(1/2) + (C2*airy(2, x + 25/4))/exp(5*x)^(1/2)

【实例 3】求微分方程 xy′−5y′+x3=0 在 y(1)=0、y(5)=0 时的解,并绘制解的曲线。MATLAB 程序如下:
1) 求方程的解:
>> close all                                  % 关闭当前已打开的文件
>> clear                                      % 清除工作区的变量
>> syms y(x)                                  % 定义符号函数y(x)
>> eqn=x*diff(y,x,2)-5*diff(y,x)+x^3==0;      % 定义符号表达式
>> y=dsolve(eqn,'y(1)=0,y(5)=0','x')          % 求解微分方程
y =
- (13*x^6)/2604 + x^4/8 - 625/5208

2) 绘制曲线:
>> xn=-1:6;                                              % 创建介于-1~6的向量,默认间隔值为1
>> yn=subs(y,'x',xn)                                     % 将表达式y中的所有x替换为xn
yn =
[ 0, -625/5208, 0, 387/248, 592/93, 2835/248, 0, -1705/24]
>> fplot(y,[-1 6])                                       % 在指定区间绘制表达式的图像
>> axis([-1 6 -10 15])                                   % 调整坐标轴的范围
>> hold on                                               % 保留当前坐标区的绘图
>> plot([1,5],[0,0],'.r','MarkerSize',20)                % 使用大小为20的、红色的点标记绘制指定位置的图像
>> text(1,1,'y(1)=0')                                    % 在指定位置为数据点添加文本说明
>> text(4,1,'y(5)=0')
>> title(['x*D2y - 5*Dy = -x^3',', y(1)=0,y(5)=0'])      % 为图像添加标题
>> hold off                                              % 关闭保持命令
绘图结果如下图所示:


图 2 微分方程的解

相关文章