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

单摆运动过程的数学模型

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

在这里插入图片描述

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

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

重力力矩表示为:

M   g   = m g L s i n ( θ ) M~g~=mgLsin(θ) M g =mgLsin(θ)

惯性力矩表示为:

M   i   = m L 2 d ( d ( θ ) ) M~i~=mL^2d(d(θ)) M i =mL2d(d(θ))

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

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

M   g + M   i = m g L s i n ( θ ) + m L 2 d ( d ( θ ) ) = 0 M~g+M~i=mgLsin(θ)+mL^2d(d(θ))=0 M g+M i=mgLsin(θ)+mL2d(d(θ))=0

上式进一步简化为:

d ( d ( θ ) ) = − g s i n ( θ ) / L d(d(θ))=-gsin(θ)/L d(d(θ))=gsin(θ)/L

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

上式可简化为:

d ( d ( θ ) ) = − g θ / / L d(d(θ))=-gθ//L d(d(θ))=gθ//L

角速度ω可以表示为:

ω = d θ / d t ω=dθ/dt ω=dθ/dt

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

d ω / d t = − g θ / L dω/dt=-gθ/L dω/dt=gθ/L

单摆运动过程的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模型代码如下所示:

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

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

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

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

在这里插入图片描述

在这里插入图片描述

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

用角度代替弧度

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

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

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

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

在这里插入图片描述

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

在这里插入图片描述

参考书籍:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值