非刚性常微分方程的数值解法通常会用四阶龙格库塔算法,其matlab函数对应ode45。

对于dy/dx = f(x,y),y(0)=y0。

其四阶龙格库塔公式如下:

对于通常计算,四阶已经够用,四阶以上函数f(x,y)计算工作量大大增加而精度提高较慢。

下面以龙格库塔法解洛伦兹方程为例:

matlab代码如下:

main.m:

clear all;
close all;
clc; %系统龙格库塔法
[t,h] = ode45(@test_fun,[ ],[ ]);
plot3(h(:,),h(:,),h(:,));
grid on; %自定义龙格库塔法
[t1,h1]=runge_kutta(@test_fun,[ ],0.01,,);
figure;
plot3(h1(,:),h1(,:),h1(,:),'r')
grid on;

runge_kutta.m(函数参考网络):

%参数表顺序依次是微分方程组的函数名称,初始值向量,步长,时间起点,时间终点(参数形式参考了ode45函数)
function [x,y]=runge_kutta(ufunc,y0,h,a,b)
n=floor((b-a)/h); %步数
x()=a; %时间起点
y(:,)=y0; %赋初值,可以是向量,但是要注意维数
for i=:n %龙格库塔方法进行数值求解
x(i+)=x(i)+h;
k1=ufunc(x(i),y(:,i));
k2=ufunc(x(i)+h/,y(:,i)+h*k1/);
k3=ufunc(x(i)+h/,y(:,i)+h*k2/);
k4=ufunc(x(i)+h,y(:,i)+h*k3);
y(:,i+)=y(:,i)+h*(k1+*k2+*k3+k4)/;
end

test_fun(洛伦兹方程):

%构造微分方程
function dy=test_fun(t,y)
a = ;
b = ;
c = ; dy=[a*(y()-y());
c*y()-y()*y()-y();
y()*y()-b*y()];

得到很经典的洛伦兹吸引子,结果如下:

参考:

https://wenku.baidu.com/view/8211fbd428ea81c758f57893.html

matlab练习程序(龙格库塔法)的更多相关文章

  1. matlab练习程序(SUSAN检测)

    matlab练习程序(SUSAN检测) SUSAN算子既可以检测角点也可以检测边缘,不过角点似乎比不过harris,边缘似乎比不过Canny.不过思想还是有点意思的. 主要思想就是:首先做一个和原图像 ...

  2. (转)matlab练习程序(HOG方向梯度直方图)

    matlab练习程序(HOG方向梯度直方图)http://www.cnblogs.com/tiandsp/archive/2013/05/24/3097503.html HOG(Histogram o ...

  3. matlab示例程序--Motion-Based Multiple Object Tracking--卡尔曼多目标跟踪程序--解读

    静止背景下的卡尔曼多目标跟踪 最近学习了一下多目标跟踪,看了看MathWorks的关于Motion-Based Multiple Object Tracking的Documention. 官网链接:h ...

  4. matlab练习程序(透视投影,把lena贴到billboard上)

    本练习程序是受到了这个老外博文的启发,感觉挺有意思,就尝试了一下.他用的是opencv,我这里用的是matlab. 过去写过透视投影,当时是用来做倾斜校正的,这次同样用到了透视投影,不过更有意思,是将 ...

  5. matlab练习程序(多圆交点)

    最近总是对计算几何方面的程序比较感兴趣. 多圆求交点,要先对圆两两求交点. 有交点的圆分为相切圆和相交圆. 相切圆求法: 1.根据两圆心求直线 2.求公共弦直线方程 3.求两直线交点即两圆切点. 相交 ...

  6. matlab练习程序(矩形变换为单连通形状)

    变换使用的模板必须是单连通的,而且模板中心必须在模板内,如果在模板中打个结或是月牙形,这里的程序就处理不了了. 虽然非单连通模板也有办法处理,不过不是这里要讨论的. 这里用到的方法和矩形变换为圆那片文 ...

  7. matlab练习程序(渲染三原色)

    这里我用的空间是x向右为正,y向下为正,z向屏幕里面为正.相当于标准右手系绕x轴旋转了180度. 将三个点光源放在 r = [0.3,0,0.5];g = [0.3,-0.5*cos(pi/6),-0 ...

  8. matlab练习程序(生成希尔伯特曲线)

    能够使用这样一条线遍历图像中所有的像素,不过这里没有这样做,而只是生成了这样一条曲线. 程序中h,w是最终图像的高和宽,n为希尔伯特曲线阶数. 这里如果n等于log2(h)或log2(w),则图像就全 ...

  9. matlab练习程序(随机直线采样)

    我只是感觉好玩,写了这样一段程序. 原理就是先随机生成两个点,然后根据这两个点画直线,最后在直线上的像素保留,没在直线上的像素丢弃就行了. 最后生成了一幅含有很多空洞的图像. 当然,对含有空洞的图像是 ...

随机推荐

  1. Bugku-CTF加密篇之奇怪的密码(突然天上一道雷电 gndk€rlqhmtkwwp}z )

    奇怪的密码 突然天上一道雷电 gndk€rlqhmtkwwp}z  

  2. 利用单臂路由实现VLAN间的路由

    实验4:利用单臂路由实现VLAN间的路由. 实验原理:  实验内容: 本实验模拟公司网络场景,路由器R1是公司的出口网关,员工PC通过接入层交换机(如S2和S3)接入公司网络,接入层交换机又通过汇聚交 ...

  3. [Linux kali] Kali KDE桌面安装中文输入法 不能登录系统

    #开始 第一次实体机上面安装kali的KDE桌面版本 结果就遇到了很多的BUG 比如这次就是安装中文输入法有问题 这次安装的是fcitx框架的 尝试了 谷歌输入法 还有搜狗输入法 都有这个问题 也就是 ...

  4. 再次配置caffe-windows vs2015+cuda10.0+RTX2070+python3.5

    前段时间换了一个配置高一点的台式机,因此重新安装了caffe,这次安装遇到了很多以前没有遇到的问题,特记录一下. 先罗列一下电脑配置:vs2015+cuda10.0+python3.5(Anacond ...

  5. Jenkins+Maven+Github+Springboot实现可持续自动部署(非常详细)

    目前公司开发的项目已经部署到服务器上,部署项目的测试环境和生产环境,加上每个项目n个服务,于是我就 , 骚就是骚,但是就是太累了,于是花点时间研究了一下Jenkins. Jenkins的作用和它的lo ...

  6. 强化学习-Q-learning学习笔记

    Q学习动作探索策略中的ep-greepy,以ep的概率进行随机探索,以1-ep的概率以最大值策略进行开发,因为设定的迭代次数比较多,所以肯定存在一定的次数去搜索不同的动作. 1)Python版本 b站 ...

  7. 「CF911F」Tree Destruction

    传送门 Luogu 解题思路 显然的贪心策略,因为每次都要尽量使得删点后的收益最大. 我们可以求出树的直径(因为树上的任意一个节点与其距离最远的点一定是直径的端点). 然后我们对于所有不是直径上的点, ...

  8. .NET中的字符串(2):你真的了解.NET中的String吗?

    概述 String在任何语言中,都有它的特殊性,在.NET中也是如此.它属于基本数据类型,也是基本数据类型中唯一的引用类型.字符串可以声明为常量,但是它却放在了堆中.希望通过本文能够使大家对.NET中 ...

  9. twisted task.cpperator

    twisted task.cpperator 1.      twisted task.cpperator 1.1.    简介-cooperator 官方文档: https://twistedmat ...

  10. Spring Boot 使用 Dom4j XStream 操作 Xml

    Xml 现在仍然占据着比较重要的地位,比如微信接口中使用了 Xml 进行消息的定义.本章重点讨论 Xml 的新建.编辑.查找.转化,可以这么理解,本章是使用了 dom4j.xstream 也是在开发者 ...