1. 程式人生 > >2018華為杯E題的一些思考和三維模型圖繪圖技巧總結

2018華為杯E題的一些思考和三維模型圖繪圖技巧總結

2018華為杯全國研究生數學建模E題:多無人機對組網雷達的協同干擾。第一部分先對賽題中幾個概念做出明確解釋!第二部分主要是模型需要使用的一些繪圖技巧總結。

1.賽題背景:

干擾機以"距離假目標欺騙"的方式來實施對地面組網雷達系統進行有效干擾
在這裡插入圖片描述注:干擾機基於偵察到的敵方雷達發射電磁波的訊號特徵,對其進行相應處理後,延遲(或導前)一定時間後再發射出去,使雷達接收到一個或多個比該目標真實距離靠後(或靠前)的回波訊號。一般虛假航跡點比真實幹擾機位置要遠遠靠後。
在這裡插入圖片描述注:形成一條虛假航跡的起始和終止時刻的干擾機飛行軌跡和位置,以及干擾機產生的虛假航跡。
注:為方便理解這裡對上面兩張圖再細化一下,給出不同飛行策略下的幾條疑似虛假航跡的概念位置:
在這裡插入圖片描述

在這裡插入圖片描述
1.1.博弈雙方:
紅方:干擾機;
藍方:地面組網雷達系統(5部);
1.2.何為"有效干擾"?
即5部雷達中至少有3部雷達同一時刻解算出的目標空間位置是相同的,融合中心就將其確定為一個合理的航跡點(即:為同源),20個連續的經融合中心確認的航跡點形成的合理航跡,將被組網雷達系統視為一條真實的目標航跡。
1.3.假目標點(目標航跡點資訊)的實質是什麼?
20個時刻,第t時刻m(m>=3)架次干擾機與地面n(n>=3)個雷達的連線的延長線的交點。
1.4."組網雷達資訊融合中心"幹一件什麼事情?
基於一定的融合規則判斷一個合理的目標航跡點,多個連續的合理目標航跡點就形成了目標航跡,即融合出一條疑似目標的有效軌跡(即:干擾機形成的干擾虛假航跡)
1.5.融合規則是什麼?
20個時刻,第t時刻m架次干擾機與地面n個雷達中的m個的連線的延長線要產生公共交點(即:虛假航跡點),詳見(圖5 t時刻5架次干擾機與5部雷達連線的延長線共交點)。通過協同控制無人機的飛行航跡,可在敵方的組網雷達系統中形成一條或多條欺騙干擾航跡,迫使敵方加強空情處置,達到欺騙目的。
1.6.干擾機和地面組網雷達的博弈關係如下,本質上是一個分段函式:假定m為干擾機數目,n為地面雷達數目。(m=1,2,3,4,5; n=1,2,3,4,5) 。博弈的結果使用F(m,n)表示。
在這裡插入圖片描述
注:從博弈角度來說,最優化問題簡化為干擾機產生有效干擾時,所需的最少無人機數量。
1.7.干擾機群中中心無人機在那裡合適?中心無人機的排程策略是什麼?
不是很清楚,略!正在等待一等獎論文揭開謎底。

2.模型需要使用的一些繪圖技巧總結

2.1. 干擾機群產生一個虛假航跡點的三維繪圖實現:

在這裡插入圖片描述

%%  1.畫出三維空間中相交的三條直線相較於同一個軌跡點
pp=[80,0,0;30,60,0;55,110,0;105,110,0;130,60,0] %雷達座標(單位:km)
p1=[60.6,69.982,69.982]; %軌跡點
% for i=1:5
hold on
for i=1:5
    k=0:0.01:1;
    p2=pp(i,:);
    hold on;  %% 這裡是實現三維相交直線相交的關鍵!!!
    x=p1(1)+k*(p2(1)-p1(1));
    y=p1(2)+k*(p2(2)-p1(2));
    z=p1(3)+k*(p2(3)-p1(3));
    plot3(x,y,z)
    text(p2(1,1),p2(1,2),p2(1,3),['雷達',num2str(i)])
end
hold on;
plot3(60.6,69.982,69.982,'b^','MarkerSize',10,'MarkerFacecolor','b');
plot3(pp(1:5,1),pp(1:5,2),pp(1:5,3),'rp','MarkerSize',10,'MarkerFacecolor','r')
 text(60.6,69.982,69.982,'軌跡點At1')
 xlabel('x軸(km)');
 ylabel('y軸(km)');
 zlabel('z軸(km)');
 title(['第1時刻軌跡點與',num2str(i),'個雷達的位置分析'])
 view([-45,45])
 
%%  2.畫出靛青色截平面,並標註截平面與連線的交點
zz=ones(130,130)*2;
% zz = z1/3000;
hold on;
x1=1:1:130;
y1=1:1:130;
%mesh(x1,y1,zz,'EdgeColor','w','FaceColor','w','MarkerEdgecolor','w','MarkerFacecolor','w');
mesh(x1,y1,zz,'EdgeColor','c','FaceColor','c','MarkerEdgecolor','c','MarkerFacecolor','c');
axis([1 130 1 130 1 70])
 % 畫出軌跡1到5個雷達點的效果圖
 guiji1x=[77713.73,29142.67,53428.2,101999.26,126284.79];
 guiji1y=[1731.87,60017.15,108588.21,108588.21,60017.15];
 guiji1z=ones(5,1)*2100;
 %座標轉換為km
 hold on;
 plot3(guiji1x'/1000,guiji1y/1000,guiji1z/1000,'r*','MarkerSize',10,'MarkerFacecolor','r');
 for i=1:5
     text(guiji1x(i)'/1000,guiji1y(i)/1000,guiji1z(i)/1000+1.5,['截點',num2str(i)])
 end
 xlabel('x軸(km)');
 ylabel('y軸(km)');
 zlabel('z軸(km)');
 title('第1時刻擷取五稜錐的5條稜的截點位置分析')
 view([-45,45])

2.2.畫出20個已知軌跡點與組網雷達的三維空間中的連線及延長線交點:

%% 在同一幅圖上畫出20個軌跡點
data= xlsread('D:\Program Files\MATLAB\workspace\E2018\F1_guiji.xls');
%軌跡單位是m
guiji=[data(:,2),data(:,3),data(:,3)]
guiji=guiji/1000;
pp=[80,0,0;30,60,0;55,110,0;105,110,0;130,60,0]
for j=1:20
    p1=guiji(j,:);%軌跡點
    for i=1:5
        k=0:0.01:1;
        p2=pp(i,:); %5臺無人機
        hold on;
        x=p1(1)+k*(p2(1)-p1(1));
        y=p1(2)+k*(p2(2)-p1(2));
        z=p1(3)+k*(p2(3)-p1(3));
        plot3(x,y,z)
    end
end

在這裡插入圖片描述
2.3.以上所有程式碼疊加的效果圖
在這裡插入圖片描述
2.4.一些更好看的三維立體效果模擬
在這裡插入圖片描述在這裡插入圖片描述為了更加美觀為與不同雷達相連的連線著色

data= xlsread('D:\Program Files\MATLAB\workspace\E2018\F1_guiji.xls');
%軌跡單位是m
guiji=[data(:,2),data(:,3),data(:,3)]
guiji=guiji/1000;
Falsetarget=guiji;
radar = zeros(5,3);
radar(1,1)= 80;
radar(2,1) = 30; radar(2,2) = 60;
radar(3,1) = 55; radar(3,2) =  110;
radar(4,1) = 105; radar(4,2) = 110;
radar(5,1) = 130; radar(5,2) = 60;
radar = radar*1000;

%% 繪圖
plot3(Falsetarget(:,1),Falsetarget(:,2),Falsetarget(:,3),'ro','MarkerFaceColor',[1 0 0]);
grid on
hold on
plot3(radar(:,1),radar(:,2),radar(:,3),'^','MarkerSize',10,...
    'MarkerEdgeColor','r',...
    'MarkerFaceColor',[1 0 0]);
for i = 1:5
    text(radar(i,1)+10,radar(i,2),radar(i,3),['雷達' num2str(i)]);
end
for i = 1:5
    for j = 1:20
        if i == 1
            plot3([radar(i,1),Falsetarget(j,1)],[radar(i,2),Falsetarget(j,2)],[radar(i,3),Falsetarget(j,3)],'b');
        end
        if i == 2
            plot3([radar(i,1),Falsetarget(j,1)],[radar(i,2),Falsetarget(j,2)],[radar(i,3),Falsetarget(j,3)],'r');
        end
        if i == 3
            plot3([radar(i,1),Falsetarget(j,1)],[radar(i,2),Falsetarget(j,2)],[radar(i,3),Falsetarget(j,3)],'m');
        end
        if i == 4
            plot3([radar(i,1),Falsetarget(j,1)],[radar(i,2),Falsetarget(j,2)],[radar(i,3),Falsetarget(j,3)],'k');
        end
        if i == 5
            plot3([radar(i,1),Falsetarget(j,1)],[radar(i,2),Falsetarget(j,2)],[radar(i,3),Falsetarget(j,3)],'g');
        end
     end
end
x = 0:1000:150000;
y = 0:1000:150000;
size(x,2)
mesh(x,y,ones(size(x,2),size(y,2))*2250,'EdgeColor','c','FaceColor','c','MarkerEdgecolor','c','MarkerFacecolor','c');
xlabel('X(單位:m)');
ylabel('Y(單位:m)');
zlabel('Z(單位:m)');
title('組網雷達與虛假目標航跡點連線')
hold off

在這裡插入圖片描述

2.5.組網雷達地面覆蓋範圍

data= xlsread('D:\Program Files\MATLAB\workspace\E2018\F1_guiji.xls');
%軌跡單位是m
guiji=[data(:,2),data(:,3),data(:,3)]
%% 2018-9-18畫圖。
%% 新增5個雷達
Falsetarget=guiji;
radar = zeros(5,3);
radar(1,1)= 80;
radar(2,1) = 30; radar(2,2) = 60;
radar(3,1) = 55; radar(3,2) =  110;
radar(4,1) = 105; radar(4,2) = 110;
radar(5,1) = 130; radar(5,2) = 60;
radar = radar*1000;

%% 繪圖
%plot3(Falsetarget(:,1),Falsetarget(:,2),Falsetarget(:,3),'ro','MarkerFaceColor',[1 0 0]);
grid on
hold on
plot3(radar(:,1),radar(:,2),radar(:,3),'^','MarkerSize',10,...
    'MarkerEdgeColor','r',...
    'MarkerFaceColor',[1 0 0]);
for i = 1:5
    text(radar(i,1)+10,radar(i,2),radar(i,3),['雷達' num2str(i)]);
end

在這裡插入圖片描述
2.6.問題一(使用空間解析結合嘗試求解)
使用截平面法指定z的高度,使用直線的點法式公式來求取干擾機的位置座標。這裡可以使用matlab很好用的命令subs自動帶入已經存在的引數值加以計算,同時使用eval()將帶入數值的syms表示式的結果轉化為具體數值。

%% h=2322.8m去擷取雷達1,2,3
%軌跡單位為m
guiji= xlsread('D:\Program Files\MATLAB\workspace\E2018\F1_guiji.xls');
guiji=guiji(:,2:4)
leidazuobiao=[80000,0,0;30000,60000,0;55000,110000,0;105000,110000,0;130000,60000,0]
%% 求取截面座標
Path2000X=cell(20,3);
Path2000Y=cell(20,3);
gaodu=[2322.8] 
for j=1:length(guiji)%僅僅考慮一個軌跡點
    for i=1:3
%         a(j,i)=guiji(j,1)-leidazuobiao(i,1);
%         b(j,i)=guiji(j,2)-leidazuobiao(i,2);
%         c(j,i)=guiji(j,3)-leidazuobiao(i,3);
%使用直線的點法式公式
%Lji:(x-guiji(i,1))/a(j,i)=(y-guiji(i,2))/b(j,i)=(z-guiji(i,3))/c(j,i)
        syms x y h x0 y0 z0 a0 b0 c0;
        x=x0+a0*(h-z0)/c0;
        y=y0+b0*(h-z0)/c0;
        a0=guiji(j,1)-leidazuobiao(i,1)
        b0=guiji(j,2)-leidazuobiao(i,2)
        c0=guiji(j,3)-leidazuobiao(i,3)
        x0=guiji(i,1)
        y0=guiji(i,2)
        z0=guiji(i,3)
        %high=min(guiji(:,3)) ;%63.9570km;但是無人機飛行高度在2000-2500m
        h=gaodu(1)  %h=2000m
        y1=subs(x)
        y2=subs(y)
        disp('==========')
        Path2000X{j,i}= eval(y1) %將syms轉化為數值
        Path2000Y{j,i}= eval(y2)
    end
    
end
 %% 對2,3雷達處的20個座標分別再以4個點依次擬合出來直線個5條。那麼我一共是有10條無人機飛行的直線
 %4個一組作直線擬合
 XX=[Path2000X{:,2}]'
YY=[Path2000Y{:,2}]'
XX1=[Path2000X{1:4,2}]'
YY1=[Path2000Y{1:4,2}]'
YY2=[Path2000Y{5:8,2}]'
XX2=[Path2000X{5:8,2}]'
XX3=[Path2000X{9:12,2}]'
YY3=[Path2000Y{9:12,2}]'
XX4=[Path2000X{13:16,2}]'
YY4=[Path2000Y{13:16,2}]'
YY5=[Path2000Y{17:20,2}]'
XX5=[Path2000X{17:20,2}]'
%
XX1=[Path2000X{1:4,3}]'
YY1=[Path2000Y{1:4,3}]'
YY2=[Path2000Y{5:8,3}]'
XX2=[Path2000X{5:8,3}]'
XX3=[Path2000X{9:12,3}]'
YY3=[Path2000Y{9:12,3}]'
XX4=[Path2000X{13:16,3}]'
YY4=[Path2000Y{13:16,3}]'
YY5=[Path2000Y{17:20,3}]'
XX5=[Path2000X{17:20,3}]'


%%
clear PPPPPPPPPPPPPPPo1
PPPPPPPPPPPPPPPo1= xlsread('D:\Program Files\MATLAB\workspace\E2018\CC2.xlsx','sheet2','A1:BI4');
PPPPPPPPPPPPPPPo1=round(PPPPPPPPPPPPPPPo1,1)
xlswrite('D:\zhou.xlsx',PPPPPPPPPPPPPPPo1,'sheet1','A1:BI4');

2.7.答案格式拼接
拼湊如下圖所示格式的答案,無人機架次及20個時刻對應的X,Y,Z座標。
在這裡插入圖片描述

%% 填寫答案,構造答案表格
%''是matlab中字元陣列,寫入的是單個的漢字而不是字串,使用cell就是字串了
% str0='無人機編號';
% xlswrite('D:\zhou.xlsx',str0,'sheet1','A1');
%寫入第一行
str1=cell(1,61);%matlab中字串處理用cell會很方便,每個字串是一個物件,leng(str1)=1
str1{1,1}='無人機編號';
str2={'x','y','z'}
for i=1:20
    for j=1:3
        str1{1,3*(i-1)+j+1}=['第',num2str(i),'個時刻空間位置',str2{j},'座標值'];
    end
end
xlswrite('D:\zhou.xlsx',str1,'sheet1','A1:BI1');
%寫入編號
num1=1:1:5;
num1=num1';%轉換為列向量
xlswrite('D:\zhou.xlsx',num1,'sheet1','A2');
%將答案寫入到統一個格式cell中
AAA=jiemian_mute{1,1}';
BBB=jiemian_mute{1,2}';
for i=1:5
    for j=1:20
            daan{i,3*(j-1)+1}=AAA{i,j};
            daan{i,3*(j-1)+2}=BBB{i,j};
            daan{i,3*(j-1)+3}=2000;
    end
end
xlswrite('D:\zhou.xlsx',daan,'sheet1','B2:BI6');