MATLAB求解常微分方程:ode45函数与dsolve函数
ode45函数无法求出解析解,dsolve可以求出解析解(若有),但是速度较慢.
1. ode45函数
①求一阶常微分方程的初值问题
[t,y] = ode45(@(t,y)y-2*t/y,[0,4],1);
plot(t,y);
求解 y’ – y + 2*t / y且初值y(0) = 1的常微分方程初值问题,返回自变量和函数的若干个值.
若不写返回值,则会自动作出函数随自变量的变化图像.
ode45(@(t,y)y-2*t/y,[0,4],1);
②求解一阶微分方程组
x’ = -x^3-y,x(0)=1
y’ = x-y^3,y(0)=0.5.
自变量为t,且0<t<30.
求解过程如下.
第一步,在M函数文件中将函数x和函数y写成向量形式.
function f = fun(t,x);
f(1) = -x(1)^3 – x(2);
f(2) = x(1) – x(2)^3;
f = f(:);%确保f为列向量.
第二步,在M脚本文件中求解.
[t,x] = ode45(@fun,[0,30],[1;0.5]);
subplot(1,2,1);plot(t,x(:,1),t,x(:,2),':');xlabel('t');ylabel('x/y');%作x和y随t变化图
subplot(1,2,2);plot(x(:,1),x(:,2));xlabel('x');ylabel('y');%作x和y的相位图
第三步,在命令窗口运行M脚本文件中的代码.
③求解高阶常微分方程组
将高阶常微分方程组通过变量替换转化为一阶的常微分方程组,然后用ode45求解.
2. dsolve函数
①求解析解
y’ = a*x + b;
s = dsolve('D2y=a*y+b*x','x');
D2y用以表示y的二阶导数,默认是以t为自变量的,所以最好指明自变量为x.
②初值问题
y’ = y – 2*t / y , y(0) = 1;
s = dsolve('Dy == y - 2*t / y','y(0) ==1');
③边值问题
x*y’’ – 3*y’ = x^2 , y(1) = 0 , y(5) = 0;
s = dsolve('x*D2y - 3*Dy ==x^2','y(1)=0','y(5) == 0','x');
函数最后一个参数指明自变量为x.
④高阶方程
求解y’’ = cos(2x) – y , y(0) = 1 , y’(0) = 0;
s=dsolve('D2y == cos(2*x) - y','y(0) =1','Dy(0) = 0','x');
simplify(s);
⑤方程组问题
f’ = f + g , g’ = -f + g,f(0) = 1, g(0) =2;
[f,g]= dsolve('Df == f + g','Dg = -f + g','f(0)==1','g(0) == 2','x');
MATLAB求解常微分方程:ode45函数与dsolve函数的更多相关文章
- MATLAB中白噪声的WGN和AWGN函数的使用
MATLAB中白噪声的WGN和AWGN函数的使用如下: MATLAB中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN.WGN用于产生高斯白噪声,AWGN则用于在某一 信号 ...
- Matlab中如何将(自定义)函数作为参数传递给另一个函数
假如我们编写了一个积分通用程序,想使它更具有通用性,那么可以把被积函数也作为一个参数.在c/c++中,可以使用函数指针来实现上边的功能,在matlab中如何实现呢?使用函数句柄--这时类似于函数指针的 ...
- matlab——sparse函数和full函数(稀疏矩阵和非稀疏矩阵转换)
函数功能:生成稀疏矩阵 使用方法 :S = sparse(A) 将矩阵A转化为稀疏矩阵形式,即矩阵A中任何0元素被去除,非零元素及其下标组成矩阵S.如果A本身是稀疏的,sparse(S)返回S. S ...
- matlab sparse函数和full函数用法详解(转)
sparse函数 功能:Create sparse matrix-创建稀疏矩阵 用法1:S=sparse(X)--将矩阵X转化为稀疏矩阵的形式,即矩阵X中任何零元素去除,非零元素及其下标(索引)组成矩 ...
- Matlab的BP神经网络工具箱及其在函数逼近中的应用
1.神经网络工具箱概述 Matlab神经网络工具箱几乎包含了现有神经网络的最新成果,神经网络工具箱模型包括感知器.线性网络.BP网络.径向基函数网络.竞争型神经网络.自组织网络和学习向量量化网络.反馈 ...
- matlab——sparse函数和full函数
转载:http://www.cnblogs.com/lihuidashen/p/3435883.html matlab——sparse函数和full函数(稀疏矩阵和非稀疏矩阵转换) 函数功能:生成 ...
- Matlab中常见的神经网络训练函数和学习函数
一.训练函数 1.traingd Name:Gradient descent backpropagation (梯度下降反向传播算法 ) Description:triangd is a networ ...
- matlab中关于函数句柄、feval函数以及inline函数的解析 (转)
http://blog.sina.com.cn/s/blog_7bff755b010180l3.html MATLAB函数句柄 函数句柄(Function handle)是MATLAB的一种数据类型. ...
- 也谈matlab中读取视频的一个重要函数mmreader
也谈matlab中读取视频的一个重要函数mmreader 在matlab中输入help mmreader来查阅一下该函数,有如下信息: MMREADER Create a multimedia rea ...
随机推荐
- [洛谷P4124][CQOI2016]手机号码
题目大意:给你两个$l,r$,求出$[l,r]$中符合要求的数,要求为至少有$3$个相邻的相同数字,且不可以同时出现$8$和$4$ 题解:数位$DP$ 卡点:无 C++ Code: #include ...
- 02.Java面向对象问题
目录介绍 2.0.0.1 重载和重写的区别?重载和重写绑定机制有何区别?父类的静态方法能否被子类重写? 2.0.0.2 封装.继承.多态分别是什么? 2.0.0.3 接口和抽象类的区别是什么?接口的意 ...
- CF763C Timofey and Remoduling
题目戳这里. 这道题目纯粹是考思维. 若\(2N \le M\),由于答案肯定是\(s,s+d,\dots,s+(N-1)d\),我们任意枚举两个数\(a,b\),不妨设\(b\)在数列中出现在\(a ...
- 【ZJ选讲·BZOJ 5071】
小A的数字 有一串数字A1 ,A2,--,An,每次可以进行如下骚操作: 选择一个数字i,将(Ai-1,Ai,Ai+1)变为(Ai-1+Ai,-Ai,Ai+1+Ai), (特别地,若i=N,则( ...
- 类名.class 类名.this 详解
我们知道在java中,一个类在被加载的时候虚拟机就会自动的生成一个这个类的一个Class类型的“类对象”,每个类都对应着一个这样的类对象,通过这个Class类型的类对象,我们就能够使用“内省与反射”机 ...
- demo 集合
github: https://github.com/zhanghaifeng1234565/ProjectFunctionCollect https://github.com/XY-W ...
- java中的构造块、静态块等说明
一:这篇博客写的时候我在学校已经一个星期了,为什么又会想到写这le,因为这几天又在重新学下有关spring.myBatis的知识,其中在实例化sessionFactory的时候用到了静态块,虽然在学习 ...
- mysql root设置密码 linux
成功方案 mysqld_safe --user=mysql --skip-grant-tables --skip-networking & [root@localhost ~]# mysql ...
- 【poj3260-最少找零】多重背包+完全背包
多重背包+完全背包. 买家:多重背包:售货员:完全背包: 开两个数组,分别计算出买家,售货员每个面额的最少张数. 最重要的是上界的处理:上界为maxw*maxw+m(maxw最大面额的纸币). (网上 ...
- bzoj3127/3697 [Usaco2013 Open]Yin and Yang
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3127 http://www.lydsy.com/JudgeOnline/problem.ph ...