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

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. 02.中台框架前台项目 admin.ui.plus 学习-介绍与简单使用

    中台框架前台项目 admin.ui.plus 的初识 基于 vue3.x + CompositionAPI setup 语法糖 + typescript + vite + element plus + ...

  2. module.exports和exports,应该用哪个

    在 Node.js 编程中,模块是独立的功能单元,可以在项目间共享和重用.作为开发人员,模块让我们的生活更轻松,因为我们可以使用模块来增强应用程序的功能,而无需亲自编写.它们还允许我们组织和解耦代码, ...

  3. datetime去除时分秒

    datetime.datetime.now().replace(microsecond=0)

  4. sql-labs--Less-1--Error based-Single quotes

    sql="SELECT * FROM users WHERE id='id' LIMIT 0,1"; 打开第一关,我们看到如下界面,上面写着Please input the ID ...

  5. Teamcener AWC Solr链接被拒

    1.检查安装Solr安装情况 2.在tem上勾选添加 安装完成后,总共有2个文件夹需要注意,一个 solr-版本 的文件夹,一个 TcFTSindexer 的文件夹 如果是solr安装的是服务,则不需 ...

  6. 算法1:寻找完数(JS)

    任务一:寻找完数 打印10000以内的完数 完数:与自己所有因子之和相等的数. 1 let sum = 0, i, j; // 定义变量sum.i和j 2 3 for (i = 1; i < 1 ...

  7. How to start with Gradle?

    How to start with Gradle? Download the latest Gradle release from http://www.gradle.org/downloads Se ...

  8. 为什么 CSS flex 布局中没有 `justify-items` 和 `justify-self`?

    为什么 CSS flex 布局中没有 justify-items 和 justify-self? 为什么在 CSS flex 布局中存在 align-items 和 align-self,却没有 ju ...

  9. 算法修养--A*寻路算法

    A*寻路算法 广度优先算法 广度优先算法搜索以广度做未优先级进行搜索. 从起点开始,首先遍历起点周围邻近的点,然后再遍历已经遍历过的点邻近的点,逐步的向外扩散,直到找到终点. 这种算法就像洪水(Flo ...

  10. unity UGUI 正交相机实现图片的透视旋转效果

    UI透视效果常见的就是绕x轴或y轴旋转,来达到近大远小的效果.正经要做透视UI的话肯定直接用透视相机,如果透视效果用的极少(就一张图)不改动相机类型才按这种思路进行. 最简单直接的想法就是把矩形的图片 ...