level 2
TF十年之约880
楼主
(#忽略我的用户名。。)我是mathematica新手(从下载到现在才半个月。。)我的作业是模拟弹道轨迹并调初速度和角度来精确打击目标(考虑空气阻力,科氏力,重力的变化),公式都弄出来了,但是代码总是出错。。。
Rx[y_, v_] := 0.5*0.35*v^2*(1 - 2.1904*10^-5*y)^4.4 /; 0 < y <= 9300;
Rx[y_, v_] :=
0.5*0.35*v^2*0.292257*
E^(-2.1206426*(ArcTan[(2.344*(y - 9300) - 6328)/32221.057] +
0.193525)) /; 9300 < y <= 12000;
Rx[y_, v_] :=
0.5*0.35*v^2*0.193725*E^(-(y - 12000)/6483.305)*288.9/221.5 /;
12000 < y <= 30000;
Rx[y_, v_] := 0 /; y > 30000;
G[y_] := 9.8*((6300*10^3)/(6300*10^3 + y))^2 /; y > 0;
Fcorx[vz_, vy_] := -2*
m*\[Omega]*(vz*Sin[fi] + vy*Cos[fi]*Sin[\[Alpha]lpha]);
Fcory[vz_, vx_] := -2*
m*\[Omega]*(-vx*Cos[fi]*Sin[alpha] - vz*Cos[fi]*Cos[alpha]);
Fcorz[vy_, vx_] := -2*m*\[Omega]*(vy*Cos[fi]*Cos[alpha] - vx*Sin[fi]);
m = 3000;
alpha = betta + Pi/2;
\[Omega] = 7.2921*10^-5;
y = sy[t];
x = sx[t];
z = sz[t];
vx = sx'[t];
vy = sy'[t];
vz = sz'[t];
vx0 = v0*Cos[theta]*Sin[betta];
vy0 = v0*Sin[theta];
vz0 = v0*Cos[theta]*Cos[betta];
v^2 = vx^2 + vy^2 + vz^2;
Manipulate[Module[
{s1 = NDSolve[
{sx''[t] ==
1/m*(-2*\[Omega]*(sz'[t]*Sin[fi] +
sy'[t]*Cos[fi]*Sin[\[Alpha]lpha]) -
Rx*(sy'[t]*sx'[t])/(sx'[t]^2 + sz'[t]^2)),
sy''[t] ==
1/m*(-9.8*((6300*10^3)/(6300*10^3 + sy'[t]))^2 -
2*m*\[Omega]*(-sx'[t]*Cos[fi]*Sin[alpha] -
sz'[t]*Cos[fi]*Cos[alpha]) - Rx*sy'[t]/s'[t]),
sz''[t] ==
1/m*(-2*m*\[Omega]*(sy'[t]*Cos[fi]*Cos[alpha] -
sx'[t]*Sin[fi]) -
Rx*(sz'[t]*sy'[t])/(sx'[t]^2 + sz'[t]^2)), sx[t] == x[t],
sy[t] == y[t], sz[t] = z[t],
sx'[t] == vx[t], sy'[t] == vy[t], sz'[t] == vz[t],
sx[0] == vx0, vy[0] == vy0, vz[0] == vz0, x[0] == 0, y[0] == 0,
z[0] == 0}
{vx, vy, vz, x, y, z}, {t, 0, 300}]},
ParametricPlot3D[Evaluate[{x[t], y[t], z[t]} /. s1], {t, 0, time},
PlotRange -> {{0, 20000}, {0, 70000}, {0, 70000}}, {{time, 300}, 1,
300}]], {v0, 1200, 3000}, {betta, 0, 2*Pi}, {theta, 0, Pi/2}]
运行之后一堆错误。。。
2019年11月29日 08点11分
1
Rx[y_, v_] := 0.5*0.35*v^2*(1 - 2.1904*10^-5*y)^4.4 /; 0 < y <= 9300;
Rx[y_, v_] :=
0.5*0.35*v^2*0.292257*
E^(-2.1206426*(ArcTan[(2.344*(y - 9300) - 6328)/32221.057] +
0.193525)) /; 9300 < y <= 12000;
Rx[y_, v_] :=
0.5*0.35*v^2*0.193725*E^(-(y - 12000)/6483.305)*288.9/221.5 /;
12000 < y <= 30000;
Rx[y_, v_] := 0 /; y > 30000;
G[y_] := 9.8*((6300*10^3)/(6300*10^3 + y))^2 /; y > 0;
Fcorx[vz_, vy_] := -2*
m*\[Omega]*(vz*Sin[fi] + vy*Cos[fi]*Sin[\[Alpha]lpha]);
Fcory[vz_, vx_] := -2*
m*\[Omega]*(-vx*Cos[fi]*Sin[alpha] - vz*Cos[fi]*Cos[alpha]);
Fcorz[vy_, vx_] := -2*m*\[Omega]*(vy*Cos[fi]*Cos[alpha] - vx*Sin[fi]);
m = 3000;
alpha = betta + Pi/2;
\[Omega] = 7.2921*10^-5;
y = sy[t];
x = sx[t];
z = sz[t];
vx = sx'[t];
vy = sy'[t];
vz = sz'[t];
vx0 = v0*Cos[theta]*Sin[betta];
vy0 = v0*Sin[theta];
vz0 = v0*Cos[theta]*Cos[betta];
v^2 = vx^2 + vy^2 + vz^2;
Manipulate[Module[
{s1 = NDSolve[
{sx''[t] ==
1/m*(-2*\[Omega]*(sz'[t]*Sin[fi] +
sy'[t]*Cos[fi]*Sin[\[Alpha]lpha]) -
Rx*(sy'[t]*sx'[t])/(sx'[t]^2 + sz'[t]^2)),
sy''[t] ==
1/m*(-9.8*((6300*10^3)/(6300*10^3 + sy'[t]))^2 -
2*m*\[Omega]*(-sx'[t]*Cos[fi]*Sin[alpha] -
sz'[t]*Cos[fi]*Cos[alpha]) - Rx*sy'[t]/s'[t]),
sz''[t] ==
1/m*(-2*m*\[Omega]*(sy'[t]*Cos[fi]*Cos[alpha] -
sx'[t]*Sin[fi]) -
Rx*(sz'[t]*sy'[t])/(sx'[t]^2 + sz'[t]^2)), sx[t] == x[t],
sy[t] == y[t], sz[t] = z[t],
sx'[t] == vx[t], sy'[t] == vy[t], sz'[t] == vz[t],
sx[0] == vx0, vy[0] == vy0, vz[0] == vz0, x[0] == 0, y[0] == 0,
z[0] == 0}
{vx, vy, vz, x, y, z}, {t, 0, 300}]},
ParametricPlot3D[Evaluate[{x[t], y[t], z[t]} /. s1], {t, 0, time},
PlotRange -> {{0, 20000}, {0, 70000}, {0, 70000}}, {{time, 300}, 1,
300}]], {v0, 1200, 3000}, {betta, 0, 2*Pi}, {theta, 0, Pi/2}]
运行之后一堆错误。。。