1、求解一阶微分方程
clc,clear
dy=@(t,y)y*sin(t)+cos(t);%定义微分方程右端项的匿名函数
s=ode45(dy,[0,10],1) %求微分方程的数值解,返回一个结构体
t0=1:10;y0=deval(s,t0) %计算对应的函数值
plot(t0,y0) %画方程的数值解图形
首先是句柄@的使用:https://blog.csdn.net/sinat_38816924/article/details/82193167
接着是ode45的使用:https://ww2.mathworks.cn/help/matlab/ref/ode45.html?searchHighlight=ode45&s_tid=doc_srchtitle
[t,y] = ode45(odefun,tspan,y0)
sol = ode45(___)
再接着是deval函数
y = deval(sol,x)
y = deval(___,idx)
和
y
= deval(sol
,x
)可以计算
y
= deval(x
,sol
)x
中包含的点处的微分方程问题的解sol
。
只返回带有向量
y
= deval(___,idx
)idx
中所列索引的解分量。您可以使用前面列出的任一输入参数组合。
2、求解二阶线性微分方程
clear
dy=@(x,y)[ y(2);2*y(2)-y(1)+exp(x)];s0=ode45(dy,[0,1],[1;-1]);%注意,这里是【0,1】,从初始条件0开始
t0=0:0.05:1;
y0=deval(s0,t0,1);
plot(t0,y0,'-o')
hold ons1=ode45(dy,[0,-1],[1;-1]);%注意,这里是【0,-1】,从初始条件0开始
t1=-1:0.05:0;
y1=deval(s1,t1,1);
plot(t1,y1,'-*')
还有另一种方法
syms y(x);%建立符号函数
dy=diff(y);
y=dsolve(diff(y,2)-2*diff(y)+y==exp(x),y(0)==1,dy(0)==-1);
ezplot(y,[-1,1])
首先是syms函数:https://ww2.mathworks.cn/help/symbolic/syms.html?searchHighlight=syms&s_tid=doc_srchtitle
还有diff函数:https://ww2.mathworks.cn/help/matlab/ref/diff.html?searchHighlight=diff&s_tid=doc_srchtitle
接着是dsolve函数:https://ww2.mathworks.cn/help/symbolic/dsolve.html?searchHighlight=dsolve&s_tid=doc_srchtitle
syms s(t) f(x,y)%创建符号函数diff-差分和近似导数
Y = diff(X)
计算沿大小不等于 1 的第一个数组维度的X
相邻元素之间的差分:
Y = diff(X,n)
通过递归应用diff(X)
运算符n
次来计算第 n 个差分。在实际操作中,这表示diff(X,2)
与diff(diff(X))
相同。dsolve-微分方程和系统解算器
S = dsolve(eqn)
解决了微分方程eqn
,在那里eqn
是一个象征性的方程。使用diff
和==
表示微分方程。例如,diff(y,x) == y
代表了方程dy/dx=y
。解决一个微分方程组通过指定eqn
作为一个向量的方程。
S = dsolve(eqn,cond)
解决了eqn
初始和边界条件cond