• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

matlab练习程序(常微分方程组向量场)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

过去有画过常微分方程的向量场,通过向量场能够很形象的看出方程解的状态。

最近过节在家刷视频刷到了3Blue1Brown介绍微分方程的视频

视频中对钟摆建立的微分方程组通过向量场的形式也很形象的表达了系统状态。

这里用matlab也实现一下,同时对三维情况也做了一个实现。

绘制的方法就是计算方程在二维或三维某个点的方向,然后把方向归一化,画出归一化的向量即可。

二维微分方程组如下:

三维微分方程组如下:

matlab代码如下:

二维情况:

clear all;close all;clc;

mu = 0.1;  
gdl = 1;  

x = -2:0.4:16;
y = -5:0.4:5;
[x,y] = meshgrid(x,y);

dx = y;
dy= -mu*y-gdl*sin(x);

d = sqrt(dx.^2+dy.^2);
dx = dx./d;
dy = dy./d;

quiver(x,y,dx,dy);
hold on;
[t,h] = ode45(@test,[0 100],[0.01 3]);    
plot(h(:,1),h(:,2),\'r\')

[t,h] = ode45(@test,[0 100],[0.01 2]);   
plot(h(:,1),h(:,2),\'g\')
grid on;
axis equal;

test.m:

function dy=test(t,x)
mu = 0.1;  
gdl = 1;  
dy=[x(2);
    -mu*x(2)-gdl*sin(x(1))];

结果:

红色和绿色的线为方程组的两个特解。

三维情况:

clear all;close all;clc;
a = 16;
b = 4;
c = 45;

x = -40:6:40;
y =-40:6:40;
z = 0:6:80;
[x,y,z] = meshgrid(x,y,z);

dx = a*(y-x);
dy = c*x - x.*z-y;
dz = x.*y-b*z;

d = sqrt(dx.^2+dy.^2+dz.^2);
dx = dx./d;
dy = dy./d;
dz = dz./d;
quiver3(x,y,z,dx,dy,dz);

hold on;
[t,h] = ode45(@test2,[0 30],[12 4 0]);
plot3(h(:,1),h(:,2),h(:,3));
grid on;
axis equal;

test2.m:

function dy=test2(t,y)
a = 16;
b = 4;
c = 45;

dy=[a*(y(2)-y(1));
    c*y(1)-y(1)*y(3)-y(2);
    y(1)*y(2)-b*y(3)];

结果:


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap