双摆杆是混沌理论的典型运动模型之一。涉及重力加速度、摆杆长度和质量。

1.双摆杆的摆角分析

input:

% 已知物理参数
L1 = 5;L2 = 3; %两摆杆长度和质量
m1 = 3;m2 = 5;
g = 9.80665; % 物理重力加速度m/s^2 % 定义初始参数
% y0的第1参数,即摆1的初始角度;第2,即摆2的初始角度
% 第3,摆1的初始角速度;第4,摆2的初始角速度
theta1_0 = pi/2;
theta2_0 = pi/2;
%警告: 在 t=2.623401e+00 处失败。在时间 t 处,步长必须降至所允许的最小值(7.105427e-15)以下,才能达到积分容差要求。
tspan = [0,0.01,2];
doublePendulum(tspan,theta1_0,theta2_0,L1,L2,m1,m2,g); function [T, Theta1, Theta2] = doublePendulum(tspan,theta1_0,theta2_0,L1,L2,m1,m2,g)
% 定义求解常微分方程所需的函数
function dydt = doubleP(t,y)
% 定义双摆模型方程
d1 = m1+m2*L1^2/L2^2;
d2 = m2*L1*L2*cos(y(1)-y(2))/L2^2;
d3 = m2*L1*L2*sin(y(1)-y(2))*y(4)^2/L2;
d4 = g/L2*sin(y(2)) + cos(y(1)-y(2))*y(3)^2/L2;
dydt = [y(3); y(4); (m2*d4*d2-d3*m2*cos(y(1)-y(2)))/(d1-m2*d2*d2); (d1*d4-m2*d3*cos(y(1)-y(2)))/(L2*(d1-m2*d2*d2))];
end
% 定义初值和时间步长
y0 = [theta1_0, theta2_0, 0, 0];
options = odeset('RelTol',1e-10,'AbsTol',1e-10); % 调用ode45求解微分方程组
[T,Y] = ode45(@doubleP,tspan,y0,options); % 计算摆的位置
Theta1 = L1*sin(Y(:,1));
Theta2 = L2*sin(Y(:,2))+Theta1;
Theta1 = -L1*cos(Y(:,1));
Theta2 = -L2*cos(Y(:,2))+Theta2; % 绘制双摆摆角随时间变化的图像
plot(T,Y(:,1:2))
legend('\theta_1','\theta_2')
xlabel('时间 t')
ylabel('摆角 \theta')
title('双摆摆角随时间变化的图像')
end

output:

2.双摆杆基本运动模型

input:

% 运用双摆模型动画
% 初始角度
theta1 = pi/3;
theta2 = -pi/4; % 初始速度
w1 = 0;
w2 = 0; % 物理参数
g = 9.8; % 重力加速度
l1 = 3; % 第一根杆长度
l2 = 2; % 第二根杆长度
m1 = 2; % 第一个质点质量
m2 = 1; % 第二个质点质量 % 仿真时间
tmax = 10;
dt = 0.01;
tspan = 0:dt:tmax; % 初始状态
init = [theta1 w1 theta2 w2]; % 调用ode45求解微分方程
[t,y] = ode45(@(t,y)double_pend(t, y, m1, m2, l1, l2, g), tspan, init); % 动画绘制
figure('Name', '双摆动画');
for i = 1:length(t)
x1 = l1*sin(y(i, 1));
y1 = -l1*cos(y(i, 1));
x2 = x1+l2*sin(y(i, 3));
y2 = y1-l2*cos(y(i, 3));
plot([0;x1;x2], [0;y1;y2], '-o', 'LineWidth', 2);
axis([-3 3 -3 1]);
title(sprintf('双摆动画, t = %.2f', t(i)));
grid on;
drawnow;
end % 使用 animatedline 函数来动态绘制出双摆的运动轨迹
% 要调用这个double_pend函数,需要传入若干个参数(见上),包括时间 T,摆的位置 Theta1 与 Theta2,摆杆长度 L1 和 L2,以及每个时间步长的间隔时间 interval
function dydt = double_pend(t, y, m1, m2, l1, l2, g)
theta1 = y(1);
w1 = y(2);
theta2 = y(3);
w2 = y(4); dtheta1dt = w1;
dw1dt = (m2*g*sin(theta2)*cos(theta1-theta2)-m2*l1*w1^2*sin(theta1-theta2)-...
m2*l2*w2^2*sin(theta1-theta2)-(m1+m2)*g*sin(theta1))/((m1+m2)*l1-m2*l1*cos(theta1-theta2).^2);
dtheta2dt = w2;
dw2dt = ((m1+m2)*(g*sin(theta1)*cos(theta1-theta2)-l1*w1^2*sin(theta1-theta2)...
-g*sin(theta2))-m2*l2*w2^2*sin(theta1-theta2)*cos(theta1-theta2))/((m1+m2)*l2-m2*l2*cos(theta1-theta2).^2); dydt = [dtheta1dt; dw1dt; dtheta2dt; dw2dt];
end

output:

【matlab混沌理论】1.3.双摆杆基本模型的更多相关文章

  1. 混沌理论(Chaos theory)和非线性系统

    混沌理论(Chaos theory)是关于非线性系统在一定参数条件下展现分岔(bifurcation).周期运动与非周期运动相互纠缠,以至于通向某种非周期有序运动的理论.在耗散系统和保守系统中,混沌运 ...

  2. Java 理论与实践: 修复 Java 内存模型,第 2 部分(转载)

    在 JSR 133 中 JMM 会有什么改变? 活跃了将近三年的 JSR 133,近期发布了关于如何修复 Java 内存模型(Java Memory Model, JMM)的公开建议.在本系列文章的 ...

  3. 进程池与线程池基本使用、协程理论与实操、IO模型、前端、BS架构、HTTP协议与HTML前戏

    昨日内容回顾 GIL全局解释器锁 1.在python解释器中 才有GIL的存在(只与解释器有关) 2.GIL本质上其实也是一把互斥锁(并发变串行 牺牲效率保证安全) 3.GIL的存在 是由于Cpyth ...

  4. MATLAB 机器人学工具箱(Robotics Toolbox )sl_drivepoint 模型 consecutive zero crossings 问题

    操作环境 工具箱:Robotics Toolbox for MATLAB 版本 10.2.1 作者 Peter Corke MATLAB版本:R2018a 操作系统:win10 问题 sl_drive ...

  5. [ActionScript 3.0] AS3 双A字模型

    package { import caurina.transitions.Tweener; import flash.display.Sprite; import flash.events.Mouse ...

  6. 《量化投资:以MATLAB为工具》连载(2)基础篇-N分钟学会MATLAB(中)

    http://www.matlabsky.com/thread-43937-1-1.html   <量化投资:以MATLAB为工具>连载(3)基础篇-N分钟学会MATLAB(下)     ...

  7. 如何实现Linux+Windows双系统启动

    设置你的计算机根据需要启动 Windows 10 或 Ubuntu 18.04. 尽管 Linux 是一个有着广泛的硬件和软件支持的操作系统,但事实上有时你仍需要使用 Windows,也许是因为有些不 ...

  8. 混沌数学之Chua's circuit(蔡氏电路)

    蔡氏电路(英语:Chua's circuit),一种简单的非线性电子电路设计,它可以表现出标准的混沌理论行为.在1983年,由蔡少棠教授发表,当时他正在日本早稻田大学担任访问学者[1].这个电路的制作 ...

  9. 【转载】matlab常用函数

    第一篇:Matlab软件函数 一.软件操作函数 1)命令窗口函数: clc:清空命令窗口,使用向上箭头翻看命令. open:打开文件,文本文件(*.doc),可执行文件(*.exe),图形文件(*.f ...

  10. MatLab 组件大全

    MATLAB                                                                    矩阵实验室 7.0.1 Simulink       ...

随机推荐

  1. freeswitch sofia协议栈调试

    概述 freeswitch是一款简单好用的VOIP开源软交换平台. fs内部使用sofia的sip协议栈,本文介绍如何调试跟踪sofia协议栈. 环境 centos:CentOS  release 7 ...

  2. Mac SpringBoot项目 Gradle 7.3 转 Maven 手把手教学,包学会~

    导读 最近我手上有个使用Gradle构建的项目,国内使用Gradle的人相对较少.而且我也觉得Gradle的依赖管理方式有些复杂,让我感到有些困惑.因此,我想将项目转换为Maven构建方式.Maven ...

  3. 一篇文章让你弄懂分布式一致性协议Paxos

    一.Paxos协议简介 Paxos算法由Leslie Lamport在1990年提出,它是少数在工程实践中被证实的强一致性.高可用.去中心的分布式协议.Paxos协议用于在多个副本之间在有限时间内对某 ...

  4. 支持JDK19虚拟线程的web框架,之四:看源码,了解quarkus如何支持虚拟线程

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本篇是<支持JDK19虚拟线程的web ...

  5. dedebiz 清理冗余废弃未引用图片方法

    原理描述: 在原有织梦后台菜单中增加"清理冗余图片按钮",实现清理冗余图片的功能. 操作步骤: 1. 打开后台admin\sys_sql_query.php代码 在该文件中搜索如下 ...

  6. ClickHouse(15)ClickHouse合并树MergeTree家族表引擎之GraphiteMergeTree详细解析

    GraphiteMergeTree该引擎用来对Graphite数据(图数据)进行瘦身及汇总.对于想使用ClickHouse来存储Graphite数据的开发者来说可能有用. 如果不需要对Graphite ...

  7. RAC 环境中 gc block lost 和私网通信性能问题的诊断

    声明:此文来自于MOS(Doc ID 1674865.1),整理在此以便于大家阅读学习. ■ 概要 在Oracle的RAC环境中,数据库会收集global cache 的工作负载统计信息,并把这些信息 ...

  8. 关于如何解决visualc++6.0打开文件闪退的一种方式(附带解决输入法无法显示)

    这里我把VisualC++6.0安装程序和filetool分享在我的网盘里面了 网盘下载QAQ 链接:https://pan.baidu.com/s/1azSMX_cOKgb64WT7-gTdbQ?p ...

  9. HCTF 2023 wp

    HCTF 2023 wp 一.Misc 1.玩原神玩的 分析:附件为一张图片 观察最后一行,明显有flag的格式 搜索得知是 对照得flag为:hctf{yuanlainiyewanyuanshenh ...

  10. P2951 [USACO09OPEN] Hide and Seek S 题解

    Problem 题目概述 给你一个无向图,边权都为 \(1\) ,求:离 \(1\) 号点最远的点的编号.最远的距离.有几个点是离 \(1\) 号点最远的. 思路 直接用:优先队列 \(BFS\),先 ...