利用mathematica模拟炮弹轨迹

版权声明:转载请注明原作者及出处

1-明确各参数物理含义

m表示发射物质量(kg)

g表示重力加速度(m/s^2)

c表示阻力系数(无量纲),一般取决于炮弹几何外形和雷诺数,参考https://en.wikipedia.org/wiki/Drag_coefficient

a表示空气密度(1.29kg/m^3)

S表示炮弹迎风面积(m^2)

energy表示炮弹离开炮管时具备的动能(J)

theta表示炮弹发射角(rad)

vx0表示炮弹水平x方向初速度(m/s)

vy0表示炮弹竖直y方向初速度(m/s)

2-进行数值计算与作图的mathematica代码

m = 45;                                          *各项数值初始化*
g = 9.8;

c = 0.04;
a = 1.29;
S = 0.02;
k = 0.5*c*a*S;

energy = 32 10^6;
theta = Pi/4;
vx0 = Sqrt[2*energy/m]*Cos[theta];
vy0 = Sqrt[2*energy/m]*Sin[theta];
s1 = NDSolve[{                                          *NDSolve解微分方程组*
    vx'[t] == ((-k (vx[t]^2 + vy[t]^2))/m )*Cos[ArcTan[vy[t]/vx[t]]],
    vy'[t] == ((-k (vx[t]^2 + vy[t]^2))/m )*Sin[ArcTan[vy[t]/vx[t]]] - g,
    x'[t] == vx[t],
    y'[t] == vy[t],
    vx[0] == vx0, vy[0] == vy0, x[0] == 0, y[0] == 0},
   {vx, vy, x, y},
   {t, 0, 300}];
ParametricPlot[Evaluate[{x[t], y[t]} /. s1], {t, 0, 150},PlotRange -> {Full, Full}]    *将数值解做出参数图*


3-可变参数的数值计算与作图的mathematica代码

m = 45;                                          *各项数值初始化*
g = 9.8;

c = 0.04;
a = 1.29;
S = 0.02;
k = 0.5*c*a*S;

energy = 32 10^6;
theta = Pi/4;
vx0 = Sqrt[2*energy/m] Cos[theta];
vy0 = Sqrt[2*energy/m] Sin[theta];

Manipulate[Module[{s1 = NDSolve[{
      vx'[t] == ((-k (vx[t]^2 + vy[t]^2))/m)*Cos[ArcTan[vy[t]/vx[t]]],
      vy'[t] == ((-k (vx[t]^2 + vy[t]^2))/m)*Sin[ArcTan[vy[t]/vx[t]]] - g,
      x'[t] == vx[t],
      y'[t] == vy[t],
      vx[0] == vx0, vy[0] == vy0, x[0] == 0, y[0] == 0},
     {vx, vy, x, y},
     {t, 0, 300}]},
  ParametricPlot[Evaluate[{x[t], y[t]} /. s1], {t, 0, time},
   PlotRange -> {{0, 200000}, {0, 50000}}]],
 {k, 0.004*0.5*0.02*1.29, 0.04*0.5*0.02*1.29}, {{time, 150}, 1, 300}]               
*设置表示炮弹飞行时间的time参数可变*
*设置表示风阻的k参数可变*

结果显示如上,由于博客内部无法展现mathematica的交互性,需要大家亲自实践才能体会其中的动态变化。

总结

    此处考虑了与速度平方成正比的空气阻力,由于各项参数找不到准确值,设置一个可变参数范围,观察炮弹轨迹随着可变参数的变化规律才是最理想的。


  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
范德瓦尔斯方程是描述非理想气体行为的经典物理方程之一。它的一般形式为: $(P + \frac{aN^2}{V^2})(V - Nb) = NkT$ 其中,$P$ 表示气体的压强,$V$ 表示气体的体积,$T$ 表示气体的温度,$N$ 表示气体的摩尔数,$k$ 表示玻尔兹曼常数,$a$ 和 $b$ 是范德瓦尔斯常数,$a$ 描述分子之间的吸引作用,$b$ 描述分子之间的排斥作用。 在 Mathematica 中,我们可以使用 `Solve` 函数求解范德瓦尔斯方程。假设我们要求解一摩尔范德瓦尔斯气体的压强 $P$ 和体积 $V$,则可以使用以下代码: ```mathematica (* 定义常数 *) a = 3.59; (* 范德瓦尔斯常数 a,单位为 L^2 atm / mol^2 *) b = 0.0427; (* 范德瓦尔斯常数 b,单位为 L / mol *) k = 0.0820578; (* 玻尔兹曼常数,单位为 L atm / (mol K) *) T = 298; (* 气体温度,单位为 K *) n = 1; (* 气体摩尔数,单位为 mol *) (* 求解压强 P 和体积 V *) sol = Solve[(P + a n^2 / V^2) (V - n b) == n k T, {P, V}][[1]] ``` 在上述代码中,我们首先定义了范德瓦尔斯常数 $a$ 和 $b$、玻尔兹曼常数 $k$、气体温度 $T$ 和摩尔数 $n$。然后使用 `Solve` 函数求解范德瓦尔斯方程,得到压强 $P$ 和体积 $V$ 的解。最后,我们使用 `[[1]]` 提取解的第一个元素,因为 `Solve` 函数得到的是一个列表,其中每个元素都是一个方程的解。 运行上述代码后,您将得到一个包含压强 $P$ 和体积 $V$ 的解的列表。您可以使用 `sol[[1]]` 和 `sol[[2]]` 分别访问压强和体积的解。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值