matlab-双摆仿真

news/2024/7/5 19:38:09
matlab-双摆仿真

在物理学和数学中,在动力系统领域,双摆是一个摆锤,另一个摆锤连接在其末端,是一个简单的物理系统,具有丰富的动态特性,对初始条件具有很强的敏感性。双摆的运动由一组耦合的常微分方程控制并且是混沌的。

 

由于双摆运动涉及到二阶微分方程组,在matlab中对双摆的仿真需要用到ode45求其数值解。

(代码来自 https://wenku.baidu.com/view/f78cec060912a21615792925.html)

clear all;
%控制r1 r2两个角位移 就可改变双摆初状态
r1=0.8;
r2=0.8;
m1=1;
m2=1;
L1=1;
L2=1;
g=9.8;
Da=inline(['[x(3);x(4);',...
    'inv([(m1+m2)*L1,m2*L2*cos(x(1)-x(2));',...
    'm1*L1*cos(x(1)-x(2)),m1*L2])*'...
    '[m2*L2*x(4)^2*sin(x(2)-x(1))-(m1+m2)*g*sin(x(1));',...
    'm2*L1*x(3)^2*sin(x(1)-x(2))-m2*g*sin(x(2))]]'],'t','x',...
    'flag','m1','m2','L1','L2','g');
set(gcf,'DoubleBuffer','on');
[t,x]=ode45(Da,[0,20],[r1,r2,0,0],[],m1,m2,L1,L2,g);
axis([-(L1+L2),(L1+L2),-(L1+L2)*1.8,1]);
axis square;hold on;
gh1=plot([0,L1*exp(i*(x(1)-pi/2))],'r-');
set(gh1,'linewidth',2,'markersize',6,'marker','o');
gh2=plot([L1*exp(i*(x(1)-pi/2)),L1*exp(i*(x(1)-pi/2))+L2*exp(i*(x(2)-pi/2))],'b-');
set(gh2,'linewidth',2,'markersize',6,'marker','o');
for k=2:size(x,1);
    C1=[0,L1*exp(i*(x(k,1)-pi/2))];
    C2=[L1*exp(i*(x(k,1)-pi/2)),L1*exp(i*(x(k,1)-pi/2))+L2*exp(i*(x(k,2)-pi/2))];
    set(gh1,'xdata',real(C1),'ydata',imag(C1));
    set(gh2,'xdata',real(C2),'ydata',imag(C2));
    title(['t=',num2str(t(k))],'fontsize',12);
    pause(0.1);
end
% figure;
% subplot(2 ,3 ,1);plot(t,x(:,1));title('t-\theta_1');
% xlabel('t');ylabel('\theta_1');
% subplot(2 ,3 ,2);plot(t,x(:,2));title('t-\theta_2');
% xlabel('t');ylabel('\theta_2');
% subplot(2 ,3 ,3);plot(t,x(:,3));title('t-\omega_1');
% xlabel('t');ylabel('\omega_1');
% subplot(2,3,4);plot(t,x(:,4));title('t-\omega_2');
% xlabel('t');ylabel('\omega_2');
% subplot(2,3,5);plot(x(:,1),x(:,3));title('\theta_1-\omega_1');
% xlabel('\theta_1');ylabel('\omega_1');
% subplot(2,3,6);plot(x(:,2),x(:,4));title('\theta_2-\omega_2');

  效果图和上图差不多,放一张截图

另外,科学网上也有对双摆的模拟程序

http://blog.sciencenet.cn/blog-292361-1038664.html

posted on 2018-12-29 20:45 hyb965149985 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/hyb965149985/p/10197879.html


http://www.niftyadmin.cn/n/4110988.html

相关文章

怎么样快速修改HOSTS文件?让火绒等小工具来帮忙

在工作中我们经常会遇到修改HOSTS的情形。今天小编就告诉大家如何快速修改HOSTS文件。 先来看看,什么是HOSTS? 什么是HOSTS文件? Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址…

Vue.js常用指令:v-show和v-if

一、v-show指令 v-show指令可以用来动态的控制DOM元素的显示或隐藏。v-show后面跟的是判断条件,语法如下: v-show"判断变量" 例如: v-show"true",表示显示DOM元素。 v-show"false", 表…

facebook文件系统_Facebook Messenger v4更新后在哪里可以找到请求文件夹

facebook文件系统When you get messages from non-friends on Facebook Messenger, they go to a “requests” folder. The thing is, this folder isn’t really easy to find, especially after Messenger’s recent update to version 4. 当您从Facebook Messenger上的非朋…

SQL SERVER 查询第一个数字和最后一个数字的位置

我们在实际开发中,有时候需要得到字符串中的数字位置,然后对字符串做处理。获取位置我们用PATINDEX方法,因为PATINDEX是支持正则表达式的,可以匹配数字,而类似CHARINDEX这种函数,只能查询匹配固定的字符串。…

php中 instanceof有什么作用

php中 instanceof有什么作用 作用:(1)判断一个对象是否是某个类的实例,(2)判断一个对象是否实现了某个接口。

学习Node.js笔记(一)

从最简单的一个node服务器开始说起 nodejs最常用的就是搭建服务器,今天就从0开始搭建自己的服务器,要想使用node来进行搭建服务器首先肯定是得下载node,直接百度一下node,从官网下载。下载完成后,直接安装软件就可以了…

SQL SERVER 90度行列互换

我们有时候在处理数据显示的时候,需要把之前的数据进行90度的行列互转(注:不是行转列),数据处理起来比较麻烦,提供一个方法,测试数据: --测试数据 if not object_id(tab) is null d…

Java 8 lambda 表达式10个示例

Java 8 发布于4年前,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动。特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里。在Java 8之前,如果想将行为传入函数&…