学习笔记10 微分方程的matlab符号求解方法

开始学微分方程,用汤家凤的基础课配他的辅导讲义。然后再来看代码。我要国二!!!!
代码全打一遍是防止思维跳跃,切忌形式主义
尽量做到,学一次,用一年。
求符号解

  1. 定义符号变量
  2. 调用dsolve函数
[y1,...,yN]=dsolve(eqns,conds,Name,Value)

eqns为符号微分方程或符号微分方程组;conds为初值条件或边界条件;Name和Value为可选的成对参数。

x 2 + y + ( x − 2 y ) y ′ = 0 x^2+y+\left( x-2y \right) y'=0 x2+y+(x−2y)y′=0

clc,clear
syms y(x)%定义符号变量
dsolve(x^2+y+(x-2*y)*diff(y)==0)

结果

ans =
 x/2 + ((4*x^3)/3 + x^2 + C1)^(1/2)/2
 x/2 - ((4*x^3)/3 + x^2 + C1)^(1/2)/2

这里的dsolve只有一个参数
下面升级
y ′ ′ ′ − y ′ ′ = x , y ( 1 ) = 8 , y ′ ( 1 ) = 7 , y ′ ′ ( 2 ) = 4 y^{'''}-y''=x,y\left( 1 \right) =8,y'\left( 1 \right) =7,y''\left( 2 \right) =4 y′′′−y′′=x,y(1)=8,y′(1)=7,y′′(2)=4

clc,clear
syms y(x)%定义符号变量
dy=diff(y);d2y=diff(y,2);
y=dsolve(diff(y,3)-diff(y,2)==x,y(1)==8,dy(1)==7,d2y(2)==4)%定义一阶导数和二阶导数,用于初值和边值条件的赋值
y=simplify(y)%把计算结果化简

结果

y = 
x*((exp(-1)*(19*exp(1) - 14))/2 - 1) + 7*exp(-2)*exp(x) - x^2/2 - x^3/6 + (exp(-1)*(19*exp(1) - 14))/2 - (exp(-1)*(25*exp(1) - 21))/3 - 1
y =
(17*x)/2 + 7*exp(x - 2) - 7*x*exp(-1) - x^2/2 - x^3/6 + 1/6

注意:我用的是新版的matlab2018b,化简统一用simplify()
遇到问题照着套就好。
进阶,常微分方程组
{ f ′ ′ + 3 g = sin ⁡ x g ′ + f ′ = cos ⁡ x \begin{cases} f^{''}+3g=\sin x\\ g'+f'=\cos x\\ \end{cases} {f′′+3g=sinxg′+f′=cosx​
求通解和在初编值条件为 f ′ ′ ( 2 ) = 0 , f^{''}(2)=0, f′′(2)=0, f ′ ′ ( 3 ) = 3 , g ′ ′ ( 5 ) = 1 f^{''}(3)=3,g^{''}(5)=1 f′′(3)=3,g′′(5)=1的解

clc,clear
syms f(x) g(x)%定义符号变量
df=diff(f)%定义f的一阶导数,用于初值或边值条件的赋值
[f1,g1]=dsolve(diff(f,2)+3*g==sin(x),diff(g)+df==cos(x))%求通解
f1=simplify(f1),g1=simplify(g1)%对符号解进行求解
[f2,g2]=dsolve(diff(f,2)+3*g==sin(x),diff(g)+df==cos(x),df(2)==0,f(3)==3,g(5)==1)
f2=simplify(f2),g=simplify(g2)%对符号解进行化简

上一篇:提升AdaBoost与提升树(boosting tree)


下一篇:C# 笔记 .net与C#简单说明