【matlab混沌理论】1.3.双摆杆基本模型
双摆杆是混沌理论的典型运动模型之一。涉及重力加速度、摆杆长度和质量。
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.双摆杆基本模型的更多相关文章
- 混沌理论(Chaos theory)和非线性系统
混沌理论(Chaos theory)是关于非线性系统在一定参数条件下展现分岔(bifurcation).周期运动与非周期运动相互纠缠,以至于通向某种非周期有序运动的理论.在耗散系统和保守系统中,混沌运 ...
- Java 理论与实践: 修复 Java 内存模型,第 2 部分(转载)
在 JSR 133 中 JMM 会有什么改变? 活跃了将近三年的 JSR 133,近期发布了关于如何修复 Java 内存模型(Java Memory Model, JMM)的公开建议.在本系列文章的 ...
- 进程池与线程池基本使用、协程理论与实操、IO模型、前端、BS架构、HTTP协议与HTML前戏
昨日内容回顾 GIL全局解释器锁 1.在python解释器中 才有GIL的存在(只与解释器有关) 2.GIL本质上其实也是一把互斥锁(并发变串行 牺牲效率保证安全) 3.GIL的存在 是由于Cpyth ...
- MATLAB 机器人学工具箱(Robotics Toolbox )sl_drivepoint 模型 consecutive zero crossings 问题
操作环境 工具箱:Robotics Toolbox for MATLAB 版本 10.2.1 作者 Peter Corke MATLAB版本:R2018a 操作系统:win10 问题 sl_drive ...
- [ActionScript 3.0] AS3 双A字模型
package { import caurina.transitions.Tweener; import flash.display.Sprite; import flash.events.Mouse ...
- 《量化投资:以MATLAB为工具》连载(2)基础篇-N分钟学会MATLAB(中)
http://www.matlabsky.com/thread-43937-1-1.html <量化投资:以MATLAB为工具>连载(3)基础篇-N分钟学会MATLAB(下) ...
- 如何实现Linux+Windows双系统启动
设置你的计算机根据需要启动 Windows 10 或 Ubuntu 18.04. 尽管 Linux 是一个有着广泛的硬件和软件支持的操作系统,但事实上有时你仍需要使用 Windows,也许是因为有些不 ...
- 混沌数学之Chua's circuit(蔡氏电路)
蔡氏电路(英语:Chua's circuit),一种简单的非线性电子电路设计,它可以表现出标准的混沌理论行为.在1983年,由蔡少棠教授发表,当时他正在日本早稻田大学担任访问学者[1].这个电路的制作 ...
- 【转载】matlab常用函数
第一篇:Matlab软件函数 一.软件操作函数 1)命令窗口函数: clc:清空命令窗口,使用向上箭头翻看命令. open:打开文件,文本文件(*.doc),可执行文件(*.exe),图形文件(*.f ...
- MatLab 组件大全
MATLAB 矩阵实验室 7.0.1 Simulink ...
随机推荐
- 11、Mybatis之逆向工程
11.1.正向与逆向工程概述 正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表:例如Hibernate是支持正向工程的. 逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成Ja ...
- python如何提取浏览器中保存的网站登录用户名密码
python如何提取Chrome中的保存的网站登录用户名密码? 很多浏览器都贴心地提供了保存用户密码功能,用户一旦开启,就不需要每次都输入用户名.密码,非常方便.作为python脚本,能否拿到用户提前 ...
- Jmeter+Ant+Jenkins接口自动化框架(续)
前段时间给公司内部项目搭建了一套接口自动化框架,基于实际使用,需要配置自动发送邮件功能,将 执行结果发送给相关负责人.Jenkins本身也提供了一个邮件通知功能,但在提供详细的邮件内容.自定义邮 件格 ...
- Python API接口对接详解与实践
在数字化时代,数据交互已经成为各种应用的必备功能.API(应用程序编程接口)就是实现不同应用程序之间数据交互的一种方式.Python作为一种功能强大的编程语言,也提供了许多用于对接API的库和框架 ...
- 如何通过API接口获取1688的商品详情
1688是中国最大的B2B电商平台之一,吸引了大量的国内外买家和卖家,提供了丰富的商品资源.许多开发者和企业想要通过API接口获取1688商品的详细信息,以便于进行商品数据分析.价格监控等工作.在本文 ...
- Codeforces 1463D Pairs
题意 对于数字\(1\)~\(2n\),可以构造出\(n\)个二元组,对于\(n\)个二元组,选择一个数组\(x\),留下\(x\)个二元组的最小值,留下\(n-x\)个二元组的最大值,其构成了一个集 ...
- AtCoder ABC183F Confluence
题意 \(n\)个人,每个人属于一个班级\(ci\),这些人会有些小团体(并查集) 两种操作: \(1\) \(a\) \(b\),将\(a\)所在的集体和\(b\)所在的集体合并 \(2\) \(x ...
- Linux挂载新磁盘
Linux挂载新磁盘 1. 查看磁盘 # df -lh # 查看磁盘占用情况,同时可以查看已挂载的磁盘及其挂载位置 # fdisk -l # 查看所有的磁盘分区 图中 /dev/sdb 下无分区信息, ...
- Java自学网站--十几个网站的分析与评测
简介 很多想学Java的人不知道怎样选教程,本文对Java自学网站进行评测. 本文不带主观倾向,只客观分析各个网站的区别. 第1类:大型培训机构(黑马等) 典型机构 黑马.尚硅谷.动力节点.白马.千 ...
- 给定3个整数a、b、c,计算表达式(a+b)/c的值,/是整除运算。[无解]
题目4-2:给定3个整数a.b.c,计算表达式(a+b)/c的值,/是整除运算. 给定3个整数a.b.c,计算表达式(a+b)/c的值,/是整除运算. 输入格式:输入仅一行,包括三个 整数a.b.c, ...