Hello大家好!最近帮人家解决了一个问题,要求是这样的,要求用4阶龙格库塔法画分叉图。分叉混沌图在电力系统,动力系统的研究中比较广泛,常用来对系统的周期性进行一些研究。我在网上找了不少资料,没有实质性的进展,这方面的信息比较匮乏,于是我把我知道的解决方法做个总结,也算是学习记录,分享给大家。
其实四阶龙格库塔法只能得到一个迭代式,而分叉图,也是根据迭代式来画的。基本上有了迭代式就可以画出分叉混沌图了。 这里先给几个例子。

1、作分叉图的基本原理

1.1、第一个例子

%MATLAB代码
%要求:混沌与分叉 利用迭代格式x(k+1)=λsin(pi*x(k)),做出相应的Feigenbaum图。
clc,clear
y=@(k,x)k*sin(pi*x);
x0=0.3;
hold on
axis([1,3,-1,2]);
grid
for k=1:0.01:2;for i=1:300x0=y(k,x0);if i>150pause(0.01)plot(k,x0,'.b')% hold on;endend
end
grid

这个例子是用一个简单的迭代式来画分叉混沌图的,从这个例子里,不难学到如何如何画分叉图,其原理不难,两个循环来在2维平面作图,一个if筛选迭代的结果。

还是类似上面那个例子,这里给出不一样的代码实现方法。没看懂的可以再看一遍,里面主要的还是两个for循环,下面这个代码是用第三个for循环来实现对迭代结果的筛选的,这里不必纠结细节,功能实现用if或者for都可以。

clear;clf;
%feigenbaum曾对超越函数y=r*sin(pi*x)进行
%了分岔与混沌的研究,利用迭代
%格式x(k+1)=r*sin(pi*x)作出相应的feigenbaum图,并写出对应的matlab程序
hold on
axis([0,3,-3,3]);
grid
for a=0:0.005:3x=[0.1]; for i=2:150x(i)=a*sin(pi*x(i-1)); endpause(0.1)for i=101:150plot(a,x(i),'k.'); end
end

1.2、第二个例子

这里再给另外一个方程的作图

%Henon mapping
%x(j+1)=1+yj-a*xj*xj
%y(j+1)=b*xj
clc
clear all
close all
a=0.4;b=0.3;
xjL=[];yjL=[];
for k=1:140a=0.5+(k-1)*0.01;xj=[];yj=[];x=0.1;y=0.1;for j=1:200x=1+y-a*x*x;y=b*x;xj=[xj;j x];  yj=[yj;j y];if j>=120xjL=[xjL;a b x];    yjL=[yjL;a b y]; endend
end
plot(xjL(:,1),xjL(:,3),'k.')
xlabel('\itt','FontSize',20,'FontName','Times New Roman');
ylabel('\itx','FontSize',20,'FontName','Times New Roman');
grid on;

2、四阶龙格库塔法求微分方程

理论上,现在只要得到某个方程的迭代式似乎都可以能画出它的分叉图,而4阶龙格库塔法只需要套一下公式就好了:

%%目标高阶常微分线性方程:mx''+c*x'+k*x+u*x*x+j*x^3 = F*cos(w*t)
for c=0:0.003:1;fun=@(c,x)[x(2);(-c.*x(2)-k.*x(1)-u.*x(1).^2-j.*x(1).^3+F.*cos(w.*t))./m];for n = 1:200  k1 = fun(c,x(n,:)');k2 = fun(c+h/2,x(n,:)'+h/2*k1); k3 = fun(c+h/2,x(n,:)'+h/2*k2);k4 = fun(c+h,x(n,:)'+h*k3);x(n+1,:) = x(n,:)+h/6*(k1+2*k2+2*k3+k4)';end
end

这里只是我的方程解法,网上这方面的例子有很多。我这里再给一个以前上课时老师给的例子吧:

function R=rk4(f,a,b,ya,N)
%y'=f(x,y)
%a,b左右端点。
%N为迭代步数。
%h为步长。
%ya为初值。
h=(b-a)/N;
T=zeros(1,N+1);
Y=zeros(1,N+1);
T=a:h:b;
Y(1)=ya;
for j=1:N
k1=h*feval(f,T(j),Y(j));
k2=h*feval(f,T(j)+h/2,Y(j)+k1/2);
k3=h*feval(f,T(j)+h/2,Y(j)+k2/2);
k4=h*feval(f,T(j)+h,Y(j)+k3);
Y(j+1)=Y(j)+(k1+2*k2+2*k3+k4)/6;
end
R=[T' Y']
T
Y

另外啰嗦一句,MATLAB常用的解微分方程有ode,欧拉方法,龙格库塔,Dsolve。

3、最后我的代码与结果

MATLAB代码

clc;
clear all;
close all;
%%  mx''+c*x'+k*x+u*x*x+j*x^3 = F*cos(w*t),
m=1;
k=90;%80~110之间出现分叉,越大图越偏左移
u=-15;%正负数绝对值数值趋势一样,正数范围内,数字越小图越左越大,负数时,数越小图越小密集图越偏右
j=60;%正数数值越大,图越大,-12图消失,70四分叉消失,40到70之间
F=115;
w=pi;
%%%%%%%
t0=2;
%tf=300;
h=0.1;
t=t0;
%%%%%%%%%%
%c=0:0.01:1;
%%%%%%%
x(1,1)=t;%t初值对数值很敏感,直接关系到分叉的出现
x(1,2)=6;%与分支长短有关,对数据敏感,敏感程度略低于t0
%%mx''+c*x'+k*x+u*x*x+j*x^3 = F*cos(w*t),0<=t<=1
%for t=0.05:0.01:1%?á×?±ê
hold on
axis([0,1,-1.1,2]);
grid
for c=0:0.003:1;%1分4在0.001时边缘可见fun=@(c,x)[x(2);(-c.*x(2)-k.*x(1)-u.*x(1).^2-j.*x(1).^3+F.*cos(w.*t))./m];for n = 1:200  %%用4阶龙格库塔法求解微分方程得到迭代式,有了迭代式就可以作分叉混沌图了k1 = fun(c,x(n,:)');k2 = fun(c+h/2,x(n,:)'+h/2*k1); % ????????±?×????????ò???à??k3 = fun(c+h/2,x(n,:)'+h/2*k2);k4 = fun(c+h,x(n,:)'+h*k3);x(n+1,:) = x(n,:)+h/6*(k1+2*k2+2*k3+k4)';%???????×Runge-Kutta????++% plot(c(n),k1(1,1),'-k.') if n>100  %%单一个横坐标时对纵坐标的值进行筛选,也就是迭代次数大于100的才可以画在图上,迭代次数越多,精度越高,点也会越少pause(0.00001) %这一步是为了看到作图过程,类似短暂的暂停画布时间% cc=1-c;plot(c,x(n+1),'.b')   %%所谓的分叉混沌图,本质上是两个循环,外循环是横坐标,内循环是纵坐标的值,这里的内循环的值通过4阶龙格库塔法迭代得到%plot(c,k1(1,1),'.k')end% hold onend
end

利用四阶龙格库塔法(Runge-Kutta methods)求解常微分方程并用其迭代式用MATLAB绘制分叉混沌图相关推荐

  1. 数值分析C++实现用四阶龙格-库塔(Runge-Kutta)方法求解常微分方程初值问题

    问题:用四阶龙格-库塔(Runge-Kutta)方法求解常微分方程初值问题. 算法描述 算法的程序框图: 具体算法: (1)读取a,b,n,f (2)计算步长h = (b-a)/n,x0=a,y0=f ...

  2. matlab色块轮廓,利用matlab绘制矩阵色块图.doc

    <利用matlab绘制矩阵色块图.doc>由会员分享,可在线阅读,更多相关<利用matlab绘制矩阵色块图.doc(19页珍藏版)>请在金锄头文库上搜索. 1.R语言中有一个根 ...

  3. 利用MATLAB 绘制矩阵色块图

    %% http://www.matlabsky.com/thread-32849-1-1.html % 根据实值矩阵绘制色块图,以下为测试代码. x = [1,-0.2,0.3,0.8,-0.5   ...

  4. matlab 色块图,第四章 利用matlab绘制矩阵色块图.doc

    R语言中有一个根据实值矩阵绘制色块图的程序(用于绘制相关系数矩阵图),可以用丰富的颜色和形状形象的展示矩阵元素值的大小.遗憾的是MATLAB中没有这样的函数,因此我就用MATLAB编写了一个matri ...

  5. 四阶龙格库塔法的基本思想_利用龙格库塔法求解郎之万方程.doc

    利用龙格库塔法求解郎之万方程.doc 利用龙格-库塔法求解朗之万方程1. 待解问题布朗颗粒是非常微小的宏观颗粒,其直径的典型大小为10-710-6m.颗粒不断受到液体介质分子的碰撞,在任一瞬间,一个颗 ...

  6. 四阶龙格库塔法-实现异步电机模型仿真

    序言 龙格库塔法是求解线性.非线性微分方程数值解的经典方法.具有计算精度高,稳定性好的特点.由于该方法在基于现代控制理论的观测器应用中十分重要,因此有必要通过一个经典的例子实现该方法的仿真应用. 关键 ...

  7. 四阶龙格库塔法求解一次常微分方程组(python实现)

    四阶龙格库塔法求解一次常微分方程组 一.前言 二.RK4求解方程组的要点 1. 将方程组转化为RK4求解要求的标准形式 2. 注意区分每个方程的独立性 三.python实现RK4求解一次常微分方程组 ...

  8. 欧拉法、预估校正法(改进的欧拉法)与四阶龙格库塔法求解常微分方程的数值解C++程序

    以y'=x+y,0<x<1,y(0)=1为例,取步长h=0.1,已知精确值为y=-x-1+2e^x,用来进行精度比较 #include<stdio.h> using names ...

  9. 四阶龙格-库塔法求解常微分方程的初值问题

    算法原理和程序框图 龙格-库塔法是一种求其准确解y(x)在一系列点xi处y(xi)的近似值yi的方法,yi称为数值解.经典的四阶龙格库塔法方程如下: y'=f(t,y),y(t0)=y0输出按如下求解 ...

  10. python解常微分方程龙格库_求解常微分方程组初值问题的龙格库塔法分析及其C代码...

    求解常微分方程组初值问题的 龙格库塔法分析及其 C 代码 1 .概 述 由高等数学的知识可知,一些特殊类型的常微分方程(组)能够求出给定初 始值的解析解, 而在科学与工程问题中遇到的常微分方程 (组) ...

最新文章

  1. win10 hao123劫持html文件,Win10 edge主页被hao123劫持如何解决|edge主页被hao123劫持的解决方法...
  2. vscode教程笔记
  3. 聊聊IO多路复用之select、poll、epoll详解
  4. Spark _17 _SparkShuffle、HashShuffleManager、SortShuffleManager
  5. NumPy之:NumPy简介教程
  6. db2中null和空值的区别_MySQL数据库的表中 NULL和空值 到底有什么区别呢?
  7. 原子访问、自旋锁、互斥锁、信号量
  8. 移动通信(Mobile Communication)
  9. Maxscript基本数据类型(一):String
  10. 面向光栅薄膜光学性能探究的Rsoft建模与仿真
  11. python3中26个英文字母排序_26个英文字母按排列顺序
  12. Maya:解决丢失的贴图和引用
  13. 免费HTTP代理商如何
  14. PERT 活动图 关键路径
  15. 微服务研究 - Swoole框架-Swoft初探
  16. 116 Ajax简单应用
  17. WPF 一个性能比较好的 gif 解析库
  18. 他整整用了两个月的时间,终于如愿的拿到阿里offer了!
  19. ctfshow命令执行(持续更新,已更至web39)
  20. NFC天线匹配调试简介1

热门文章

  1. android java 调试快捷键_最强Android studio 使用快捷键和调试技巧
  2. lisp一键室内标注_CAD插件:自动标注面积lisp程序
  3. [tomcat]-tomcat8安装apr
  4. 最新PYTHON批量下载快手个人主页短视频代码
  5. 【第157期】游戏策划:给@Archer的简历分析
  6. 测试环境由谁搭建?第三方软件测试环境搭建步骤流程
  7. 数字图像相关(Digital Image Correlation, DIC)中的非线性优化方法(FA-GN与IC-GN)
  8. linux设备驱动的实现与理解
  9. 【MATLAB教程案例11~20总结】优化类算法matlab仿真经验和技巧总结
  10. Android MTK 6763 User 版本默认打开usb调试