我是靠谱客的博主 激动小笼包,最近开发中收集的这篇文章主要介绍dsolve文档,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

描述:微分方程(组)求解

警告:输入的符号向量在未来会被移除,应将dsolve('Dy = y')等输入替换

syms y(t)
dsolve(diff(y,t) == y)

语法

S = dsolve(eqn)
S = dsolve(eqn,cond)
S = dsolve(eqn,cond,Name,Value)
[y1,...,yN] = dsolve(___)

描述
S = dsolve(eqn) 解决微分方程eqn,eqn代表一个符号方程。用diff和 == 代表微分方程。例如 diff(y,x) ==y 代表方程dy/dx=y。通过将 eqn 指定为微分方程的向量来求解这些方程组。
S = dsolve(eqn,cond) 使用初始条件或边界条件条件求解 eqn。
S = dsolve(eqn,cond,Name,Value) 使用被一个或多个名称、值对参数指定的其他选项。
[y1,…,yN] = dsolve(___)将解分配给变量 y1,…,yN。

例:
解决微分方程问题:通过==来指定一个微分方程,并通过diff函数来代表微分。然后通过dsolve解决方程。
求解:dy/dt=ay.

syms a y(t)
eqn = diff(y,t) == a*y;
dsolve(eqn)
ans =
C2*exp(a*t)

解决高阶微分方程:通过用diff(y,t,2) 或者 diff(y,t,t)来指定一个二阶导数的方程。类似的,n阶diff(y,t,n)
求解:(d^2 y)/(dt^2 )=ay

syms y(t) a
eqn = diff(y,t,2) == a*y;
ySol(t) = dsolve(eqn)
ySol(t) =
C2*exp(-a^(1/2)*t) + C3*exp(a^(1/2)*t)

解决带有初值问题的微分方程:使用 == 运算符将条件指定为要解決的第二个输入。指定条件可消除任意常量,如 来自结果的C1、C2。。。
求解:dy/dt=ay,y(0)=5

syms y(t) a
eqn = diff(y,t) == a*y;
cond = y(0) == 5;
ySol(t) = dsolve(eqn,cond)
ySol(t) =
5*exp(a*t)

解决带有两个初值的高阶微分方程(d^2 y)/(dt^2 )=ay,y(0)=b 和 y’(0)=1:通过将 diff(y,t) 分配给 Dy,然后使用 Dy(0) == 1 来创建第二个条件。

syms y(t) a b
eqn = diff(y,t,2) == a^2*y;
Dy = diff(y,t);
cond = [y(0)==b, Dy(0)==1];
ySol(t) = dsolve(eqn,cond)
ySol(t) =
(exp(a*t)*(a*b + 1))/(2*a) + (exp(-a*t)*(a*b - 1))/(2*a)

求解微分方程组:通过将微分方程组指定为向量来求解微分方程组。dsolve 返回包含解的结构。
求解:
dy/dt=z
dz/dt=−y.

syms y(t) z(t)
eqns = [diff(y,t) == z, diff(z,t) == -y];
sol = dsolve(eqns)
sol = 
  struct with fields:

    z: [1×1 sym]
    y: [1×1 sym]
soly(t) = sol.y
solz(t) = sol.z
soly(t) =
C2*cos(t) + C1*sin(t)
solz(t) =
C1*cos(t) - C2*sin(t)

将输出分配给函数或变量:求解多个函数时,dsolve 默认返回一个结构。或者,可以通过将输出显式指定为向量来直接将解分配给函数或变量。dsolve 使用 symvar 按字母顺序对输出进行排序。

syms y(t) z(t)
eqns = [diff(y,t)==z, diff(z,t)==-y];
[ySol(t) zSol(t)] = dsolve(eqns)
ySol(t) =
C2*cos(t) + C1*sin(t)
zSol(t) =
C1*cos(t) - C2*sin(t)

无解时:如果 dsolve 无法求解您的方程,尝试以数值方式求解方程

syms y(x)
eqn = diff(y, 2) == (1 - y^2)*diff(y) - y;
dsolve(eqn)
 Warning: Unable to find explicit solution. 
> In dsolve (line 201) 
ans =
[ empty sym ]

默认情况下,dsolve 会应用通常不正确的简化,但会生成更简单的解决方案。有关详细信息,请参阅算法。相反,请通过关闭这些简化来包括这些特殊情况。
dy/dt=a/√y+y,y(a)=1的用和不用简化
通过将‘IgnoreAnalyticConstraints’设置为 false 来关闭简化。

syms a y(t)
eqn = diff(y) == a/sqrt(y) + y;
cond = y(a) == 1;
withSimplifications = dsolve(eqn, cond)
withSimplifications =
(exp((3*t)/2 - (3*a)/2 + log(a + 1)) - a)^(2/3)
withoutSimplifications = dsolve(eqn, cond, 'IgnoreAnalyticConstraints', false)
withoutSimplifications =
piecewise(pi/2 < angle(-a), {piecewise(in(C11, 'integer'),...
 (- a + exp((3*t)/2 - (3*a)/2 + log(a + 1) + pi*C11*2i))^(2/3))},...
 angle(-a) <= -pi/2, {piecewise(in(C12, 'integer'),...
 (- a + exp((3*t)/2 - (3*a)/2 + log(a + 1) + pi*C12*2i))^(2/3))},...
 angle(-a) in Dom::Interval(-pi/2, [pi/2]), {piecewise(in(C13, 'integer'),...
 (- a + exp((3*t)/2 - (3*a)/2 + log(a + 1) + pi*C13*2i))^(2/3))})

withSimplifications易于使用但不完整,而没有Simplifications包括特殊情况,但不易使用。
此外,对于某些方程,如果将“忽略分析约束”设置为 false,则 dsolve 找不到显式解。

输入参数:
eqn — 微分方程或方程组
微分方程或方程组,指定为符号方程或符号方程的向量。

使用 == 运算符指定微分方程。在等式中,使用 diff 表示微分。例如,diff(y,x) 将符号函数 y(x) 与 x 区分开来。通过使用符号作为符号 y(x) 来创建符号函数 y(x)。因此,要求解 d^2y(x)/dx2 = x*y(x),请输入:

syms y(x)
dsolve(diff(y,x,2) == x*y)

通过使用方程向量指定微分方程组,例如
dsolve([diff(y,t) == z, diff(z,t) == -y])。

cond — 初始或边界条件:
初始或边界条件,指定为符号方程或符号方程的向量。
当条件包含导数时,使用 diff 表示导数,并将 diff 调用分配给变量。然后使用该变量创建条件。使用方程向量指定多个条件。如果条件数小于因变量数,则解包含任意常量 C1、C2,…

最后

以上就是激动小笼包为你收集整理的dsolve文档的全部内容,希望文章能够帮你解决dsolve文档所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部