-
问题的建模
若假设一个火力单位有
m
m
m件同种类型的武器,同步发射,一次发射时每件武器各发射出
n
n
n发射弹。在这样的条件下,击毁一个目标
V
V
V的概率,一般称为杀伤概率。若我们假设每发射弹弹着点的射击误差均位二维随机向量。假设第
i
i
i件武器第
j
j
j发射弹弹着点的射击误差向量是:
X
i
j
=
Y
i
j
+
Z
+
A
i
+
A
X_{ij} = Y_{ij}+Z+A_i+A
Xij=Yij+Z+Ai+A
其中,
X
i
j
X_{ij}
Xij取值
x
=
(
x
1
,
x
2
)
x = (x_1,x_2)
x=(x1,x2);对不同件的武器,不同的发射弹是非重复误差
Y
i
j
Y_{ij}
Yij的取值
y
=
(
y
1
,
y
2
)
y = (y_1,y_2)
y=(y1,y2),且服从如下概率密度的二维正态分布:
ϕ
1
(
y
1
,
y
2
)
=
1
2
π
∣
B
∣
1
2
e
−
1
2
(
y
1
,
y
2
)
B
−
1
(
y
1
,
y
2
)
T
\phi_1(y_1,y_2) = \frac{1}{2\pi|B|^{\frac{1}{2}}}e^{-\frac{1}{2}(y_1,y_2)B^{-1}(y_1,y_2)^T}
ϕ1(y1,y2)=2π∣B∣211e−21(y1,y2)B−1(y1,y2)T
其中
B
B
B为二阶协方差矩阵。其中对于不同的武器,误差
Z
Z
Z是重复误差取值为
z
=
(
z
1
,
z
2
)
z = (z_1,z_2)
z=(z1,z2),服从如下概率密度的二维正态分布:
ϕ
2
(
z
1
,
z
2
)
=
1
2
π
∣
C
∣
1
2
e
−
1
2
(
z
1
,
z
2
)
B
−
1
(
z
1
,
z
2
)
T
\phi_2(z_1,z_2) = \frac{1}{2\pi|C|^{\frac{1}{2}}}e^{-\frac{1}{2}(z_1,z_2)B^{-1}(z_1,z_2)^T}
ϕ2(z1,z2)=2π∣C∣211e−21(z1,z2)B−1(z1,z2)T
其中
C
C
C为二阶协方差矩阵。且
A
i
A_i
Ai是第
i
i
i件武器的系统误差,取值为
a
i
=
(
a
i
1
,
a
i
2
)
a_i = (a_{i1},a_{i2})
ai=(ai1,ai2)。
A
A
A是火力单位的系统误差,取常数值
a
=
(
a
1
,
a
2
)
a = (a_1,a_2)
a=(a1,a2)。比如说我们假设一发命中弹的杀伤概率为:
g
=
1
ω
0
g = \frac{1}{\omega_0}
g=ω01
ω
0
:
\omega_0:
ω0:击毁目标所需要的平均命中弹数目。如果我们设计的目标
V
V
V是边长为
2
l
2l
2l的正方形。因此具有
m
m
m件
武器组成的火力单位,一次发射
n
n
n发射弹,对目标
V
V
V的杀伤概率:
R
=
∫
−
∞
∞
∫
−
∞
∞
Q
(
z
1
,
z
2
)
ϕ
3
(
z
1
,
z
2
)
d
z
1
d
z
2
R = \int_{-\infty}^{\infty}\int_{-\infty}^{\infty}Q(z_1,z_2)\phi_3(z_1,z_2)dz_1dz_2
R=∫−∞∞∫−∞∞Q(z1,z2)ϕ3(z1,z2)dz1dz2
其中:
Q
(
z
1
,
z
2
)
Q(z_1,z_2)
Q(z1,z2)表示一次射击中
m
m
m件武器
n
n
n发导弹至少一发导弹击中
V
(
z
1
,
z
2
)
V(z_1,z_2)
V(z1,z2)的概率:
Q
(
z
1
,
z
2
)
=
1
−
∏
i
=
1
m
[
1
−
P
i
(
z
1
,
z
2
)
]
n
Q(z_1,z_2) = 1 - \prod_{i = 1}^m[1-P_i(z_1,z_2)]^n
Q(z1,z2)=1−i=1∏m[1−Pi(z1,z2)]n
P
i
(
z
1
,
z
2
)
P_i(z_1,z_2)
Pi(z1,z2)表示第
i
i
i种武器击中
V
(
z
1
,
z
2
)
V(z_1,z_2)
V(z1,z2)的概率:
P
i
(
z
1
,
z
2
)
=
∬
D
g
ϕ
1
(
x
1
−
z
1
−
a
i
1
−
a
1
,
x
2
−
z
2
−
a
i
2
−
a
2
)
d
σ
P_i(z_1,z_2) = \iint_{D}g\phi_1(x_1-z_1-a_{i1}-a_1,x_2-z_2-a_{i2}-a_2)d\sigma
Pi(z1,z2)=∬Dgϕ1(x1−z1−ai1−a1,x2−z2−ai2−a2)dσ
其中
D
D
D为边长为
2
l
2l
2l的正方形区域。其中
ϕ
3
(
z
1
,
z
2
)
\phi_3(z_1,z_2)
ϕ3(z1,z2)表示击种目标
V
(
z
1
,
z
2
)
V(z_1,z_2)
V(z1,z2)的总的误差概率密度函数,是
X
i
j
X_{ij}
Xij的概率密度函数。
求解以上模型理论上是计算其二重积分比较方便,详细的计算过程就不赘述,有想了解具体的计算过程的同学请参考我之前写的博客《通俗易懂的MonteCarlo积分方法(六)》
-
问题的仿真步骤
在这里我们不用以前那种比较复杂的积分计算方法。我们将直接采用投点法对这整个射击过程进行模拟。先产生服从给定分布的随机变量,再用随机投点法求积。
*STEP1:*产生二维正态分布随机向量 y i j ∼ ϕ 1 ( y 1 , y 2 ) , z i ∼ ϕ 2 ( z 1 , z 2 ) y_{ij}\sim \phi_1(y_1,y_2),z_i \sim\phi_2(z_1,z_2) yij∼ϕ1(y1,y2),zi∼ϕ2(z1,z2)
*STEP2:*计算代表一发导弹对的射击误差的随机向量的 x i j = ( x i j 1 , x i j 2 ) x_{ij} = (x_{ij1},x_{ij2}) xij=(xij1,xij2),其中:
x i j 1 = y i j 1 + z 1 + a i 1 + a 1 x i j 2 = y i j 2 + z 2 + a i 2 + a 2 x_{ij1} = y_{ij1} + z_1+a_{i1} + a_1\\ x_{ij2} = y_{ij2} + z_2 + a_{i2} + a_2 xij1=yij1+z1+ai1+a1xij2=yij2+z2+ai2+a2
*STEP3:*计算 F i j = [ X ∗ − x i j ; X ∗ + x i j ] F_{ij} = [X^*-x_{ij};X^*+x_{ij}] Fij=[X∗−xij;X∗+xij]为实际打击区域。*STEP4:*判断 F i j ∈ V ? F_{ij} \in V ? Fij∈V?( V V V为被打击对象所在区域)如果 F i j ∈ V , S i j = 1 , F_{ij}\in V,S_{ij} = 1, Fij∈V,Sij=1,否则 S i j = 0 S_{ij} = 0 Sij=0。
*STEP5:*计算一个火力单位一次射击命中的总次数 S : S: S:
S = ∑ i = 1 m ∑ j = 1 n S i j S = \sum_{i = 1}^m\sum_{j =1}^nS_{ij} S=i=1∑mj=1∑nSij
那么这个火力单位的命中率 H : H: H:
H = S m n H = \frac{S}{mn} H=mnS
那么现在开始计算杀伤概率,只要这么多次尝试有一次击中 V V V,便可以彻底摧毁 V V V,那么总的 杀伤概率为:
k = 1 − ∏ i = 1 m [ 1 − P i ( V ) ] k = 1 - \prod_{i = 1}^m[1-P_i(V)] k=1−i=1∏m[1−Pi(V)]
其中 P i ( V ) P_i(V) Pi(V)为武器 i i i能击中 V V V的概率,在这里我们做 M M M次仿真模拟,求得:
P i ( V ) = 1 M n ∑ k = 1 M ∑ j = 1 n S i j k P_i(V) = \frac{1}{Mn}\sum_{k = 1}^M\sum_{j = 1}^nS_{ijk} Pi(V)=Mn1k=1∑Mj=1∑nSijk
*STEP6:*重复实验 N N N次,得到 k i ( i = 1 , 2 , 3... ) k_i(i =1,2,3...) ki(i=1,2,3...) 其杀伤概率的均值为 R : R: R:
R = 1 N ∑ i = 1 N k i R = \frac{1}{N}\sum_{i = 1}^Nk_i R=N1i=1∑Nki -
求解代码:
我们不妨设有 m = 4 m = 4 m=4, n = 10 n = 10 n=10,被打击的点为原点坐标为 ( 0 , 0 ) (0,0) (0,0),二维随机变量 Y i j Y_{ij} Yij的均值为 ( 0 , 0 ) (0,0) (0,0)(炮口永远是对准目标的)。 m × n m\times n m×n个单位的方差矩阵 Y σ 1 , Y σ 2 Y_{\sigma_1},Y_{\sigma_2} Yσ1,Yσ2分别用随机数产生:
>> clear >> Ysi1 = rand(4,10); >> Ysi2 = rand(4,10);
Y σ 1 Y_{\sigma_1} Yσ1具体的值为:
Y σ 2 Y_{\sigma_2} Yσ2具体的值为:
>> Zsi1 = rand(4,1); >> Zsi2 = rand(4,1);
Z σ 1 Z_{\sigma_1} Zσ1的值为:
Z σ 2 Z_{\sigma_2} Zσ2的值为:
协方差矩阵
O
O
O为:
O
=
(
σ
1
2
ρ
σ
1
σ
2
ρ
σ
1
σ
2
σ
2
2
)
O = \begin{pmatrix}\sigma_1^2 &\rho\sigma_1\sigma_2\\ \rho\sigma_1\sigma_2&\sigma^2_2\end{pmatrix}
O=(σ12ρσ1σ2ρσ1σ2σ22)
我们设
ρ
=
0.8
\rho = 0.8
ρ=0.8。
我们分别设置 a 1 , a 2 = 0 a_1,a_2 = 0 a1,a2=0,即假设火力系统摆放位置等因素考虑确定,不存在系统误差。
我们设置 a i 1 , a i 2 a_{i1},a_{i2} ai1,ai2分别由在 [ − 0.1 , 0.1 ] [-0.1,0.1] [−0.1,0.1]上均匀分布随机数产生:
>> a_i1 = unifrnd(-0.1,0.1,[4 1]);
>> a_i2 = unifrnd(-0.1,0.1,[4 1]);
a i 1 a_{i1} ai1的值为:
a i 2 a_{i2} ai2的值为:
被打击目标的 l = 0.5 m l = 0.5m l=0.5m,即要打击一个 1 m 2 1m^2 1m2的正方体 V V V。
以下附上仿真代码:
function Attack
intialValue;%赋初值
m = 4;
n = 10;
l = 0.5;%一边长0.5m
rho = 0.8;
X_mean = 0;
Y_mean = 0;%被打击物体的坐标为(0,0);
N = 100;%仿真100次
M = 100;%子仿真100次
a1 = 0;
a2 = 0;
S = zeros(m,n,M);
P = zeros(1,m);
k = zeros(1,N);
Propablity = zeros(1,N);
for i = 1:N
%模拟打击过程
for j = 1:m
z = mvnrnd([X_mean,Y_mean],XFC(rho,Zsi1(j),Zsi2(j)));
for times = 1:M
for k = 1:n
y = mvnrnd([X_mean,Y_mean],XFC(rho,Ysi1(j,k),Ysi2(j,k)));
x(1) = y(1)+z(1)+a_i1(j)+a1;
x(2) = y(2)+z(2)+a_i2(j)+a2;
F(1) = X_mean + x(1);%实际打击的一个坐标
F(2) = Y_mean + x(2);%实际打击的另一个坐标
if (-l<=F(1)<= l)&&(-l<=F(2)<= l)
S(j,k,times) = 1;
else
S(j,k,times) = 0;
end
end
end
end
%计算杀伤率
Pro = 1;
for j = 1:m
PV = 0;
for k = 1:n
for times = 1:M
PV = PV + S(j,k,times);
end
end
P(j) = PV/(M*n);
Pro = Pro * (1-P(j));
end
k(i) = 1 - Pro;
Propablity(i) = sum(k(1:i))/i;
end
plot(1:N,Propablity,'g');
title('仿真迭代曲线');
xlabel('仿真次数');
ylabel('杀伤率');
disp(['杀伤率是:',num2str(Propablity(N))]);
end
function OS = XFC(rho,sigma1,sigma2)
OS = [sigma1^2,rho*sigma1*sigma2;rho*sigma1*sigma2,sigma2^2];
end
function intialValue
Ysi1 = rand(4,10);
Ysi2 = rand(4,10);
Zsi1 = rand(4,1);
Zsi2 = rand(4,1);
a_i1 = unifrnd(-0.1,0.1,[4 1]);
a_i2 = unifrnd(-0.1,0.1,[4 1]);
end
然后就:
???合着我这半天白搞了???