基于Modelica的单摆运动过程的仿真

基于Modelica的单摆运动过程的仿真


点击蓝字 关注我们

单摆运动过程的数学模型

单摆运动的示意图所下图所示:

基于Modelica的单摆运动过程的仿真

依据欧拉第二定律,绕固定点所有力矩的和为零,在上图中,有两个力矩施加在点x处

一个是重力力矩,一个是惯性力矩。

重力力矩表示为:

惯性力矩表示为:

其中d(d(θ))表示θ的二阶导数,在这里表示角加速度

根据欧拉第二定律,在x处的力矩之和为零,也就是:

上式进一步简化为:

为了进一步简化问题,假设随着时间的推移,摆角θ将变的足够小,那么sin(θ)约等于θ

上式可简化为:

角速度ω可以表示为:

因此上式可以进一步表示为:

单摆运动过程的Modelica模型

单摆运动过程的Modelica模型的代码如下:

model SimplePendulm1

  //设置单位
  type Length = Real(final quantity = "Length", final unit = "m");
  type Acceleration = Real(final quantity = "Acceleration", final unit = "m/s2");
  type Angle = Real(final quantity = "Angle", final unit = "rad");
  type AngularVelocity = Real(final quantity = "AngularVelocity", final unit = "rad/s");

  //设置常量和参数
  parameter Length L = 2;
  constant Acceleration g = Modelica.Constants.g_n;

  //设置变量
  Angle theta;
  AngularVelocity omega;

  //初始方程
initial equation 
  theta = 0.1;
  omega = 0;

  //方程
equation 
  der(theta)
 = omega;
  der(omega) = -(g / L) * theta;
end SimplePendulm1;

查看仿真结果:

基于Modelica的单摆运动过程的仿真

没有进行简化的Modelica模型代码如下所示:

model SimplePendulm13

  //设置单位
  type Length = Real(final quantity = "Length", final unit = "m");
  type Acceleration = Real(final quantity = "Acceleration", final unit = "m/s2");
  type Angle = Real(final quantity = "Angle", final unit = "rad");
  type AngularVelocity = Real(final quantity = "AngularVelocity", final unit = "rad/s");

  //设置常量和参数
  parameter Length L = 2;
  constant Acceleration g = Modelica.Constants.g_n;

  //设置变量
  Angle theta;
  AngularVelocity omega;

  //初始方程
initial equation 
  theta = 1.57;
  omega = 0;

  //方程
equation 
  der(theta)
 = omega;
  der(omega) = -(g / L) * sin(theta);
end SimplePendulm13;

方程der(omega) = -(g / L) * sin(theta)不一样,将theta变成了sin(theta),以及将初始摆角设置为90度对应于弧度也就是1.57

查看仿真结果,如下图所示:

基于Modelica的单摆运动过程的仿真

现在将初始弧度都设置为0.1,比较两个模型的区别,结果如下图所示:

基于Modelica的单摆运动过程的仿真
基于Modelica的单摆运动过程的仿真

发现曲线几乎重合,但实际上还是会有一点点区别,但是进行如此简化是合理的

现在将初始弧度都设置为1.57,比较两个模型的区别,结果如下图所示:

基于Modelica的单摆运动过程的仿真
基于Modelica的单摆运动过程的仿真

发现结果差别比较大,因此但摆角比较大时,是不能进行sin(θ)约等于θ的假设的

用角度代替弧度

我们平常几乎都是关心角度的变化,而不是弧度的变化,因此有必要做如此的代替

在Modelica标准库中对于角度单位的定义如下:

type Angle = Real(final quantity = "Angle", final unit = "rad", displayUnit = "deg");

这样子设置角度的单位就可以,仿真结果如下所示:

基于Modelica的单摆运动过程的仿真

角速度随着角度的变化趋势,如下图所示:

基于Modelica的单摆运动过程的仿真

参考书籍:

《Modelica多领域物理系统建模入门与提高》


基于Modelica的单摆运动过程的仿真




基于Modelica的单摆运动过程的仿真

基于Modelica的单摆运动过程的仿真

基于Modelica的单摆运动过程的仿真


原文始发于微信公众号(DotNet学习交流):基于Modelica的单摆运动过程的仿真

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/230906.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!