Modelica单摆例子
软件:MWORKS.Sysplorer 24教育版
目的:使用Modelica语言编写一个单杆带小球的物理模型,小球初始位置需要自己设置,然后考虑空气阻力,小球会逐渐到达最低点。
实验条件:仿真100s,求解器为dassl。
model Pendulum_test "带有空气摩擦的阻尼Pendulum钟摆案例"
Real m = 1; //小球质量 kg
Real L = 5; //杆长 m
Real g = Modelica.Constants.g_n; //重力加速度 m/s2
Real F; //杆中力 N
Real vx(start = 0); //水平速度 m/s
Real vy(start = 0); //垂直速度 m/s
Real x(start = -5); //水平位移 m
Real y(start = 0); //垂直位移 m
Real v(start = 0); //实际速度
Real fx(start = 0); //水平阻力
Real fy(start = 0); //垂直阻力
parameter Real k = 0.1; //阻力系数
Real phi = Modelica.Constants.pi / 3;
annotation(Diagram(coordinateSystem(extent = {{-200, -200}, {200, 200}},
grid = {1, 1}), graphics = {Rectangle(origin = {0, 0},
fillColor = {255, 255, 255},
fillPattern = FillPattern.Backward,
extent = {{-50, 20}, {50, -20}}),
Ellipse(origin = {0, -120},
fillColor = {255, 255, 255},
fillPattern = FillPattern.Sphere,
extent = {{-10, -10}, {10, 10}}),
Line(origin = {0, 0},
points = {{0, -20}, {0, -120}})}));
equation
der(x) = vx;
der(y) = vy;
v = sqrt(vx ^ 2 + vy ^ 2);
x ^ 2 + y ^ 2 = L ^ 2;
fx = k * vx;
fy = k * vy;
m * der(vx) = -x * F / L + y * fx / L;
m * der(vy) = -y * F / L + x * fy / L - m * g;
end Pendulum_test;
仿真结果: