自来水管道连接问题张鹏.docx
《自来水管道连接问题张鹏.docx》由会员分享,可在线阅读,更多相关《自来水管道连接问题张鹏.docx(20页珍藏版)》请在冰豆网上搜索。
自来水管道连接问题张鹏
自来水管道
连接问题
的数学建模与Matlab求解
姓名:
张鹏20113517
年级专业:
自动化1104
日期:
20130920
目录
一.题目重述:
3
二.问题分析:
6
三.模型基本假设:
6
四.Matlab程序中变量说明:
7
五.模型的建立与求解:
7
5.1运用向量的方法求解障碍区面积7
5.2求用户点与任意两个同一障碍区的顶点构成三角形的面积之和8
5.3判断有效用户8
六.Matlab求解程序:
9
一.题目重述:
自来水是人们日常生活中不可缺少的生活要素,然而自来水管网的组建却有很多问题需要解决。
一般来说,我们假设管网中任意两个用户之间存在直线段相连,但是在连接过程中,有些区域是必须绕开的,这些必须绕开的区域我们称为障碍区域。
表1给出了若干个可能的用户的地址的横纵坐标,可能的用户的含义是:
如果用户的地址不在障碍区域内,那么该用户就是需要使用自来水的用户(即有效用户),否则如果用户的地址在障碍区域内,那么该用户就是无效用户(即不要将该用户连接在网络中)。
表2-表5是分别是4个障碍区域必须要覆盖的点的坐标,而对应障碍区域就是覆盖这些要覆盖的点的最小凸集。
请您判定表1中那些用户为有效用户。
表1若干个可能的用户的地址的横纵坐标:
可能的用户的序号
可能的用户横坐标
可能的用户纵坐标
1.0000
95.0129
58.2792
2.0000
23.1139
42.3496
3.0000
60.6843
51.5512
4.0000
48.5982
33.3951
5.0000
89.1299
43.2907
6.0000
76.2097
22.5950
7.0000
45.6468
57.9807
8.0000
1.8504
76.0365
9.0000
82.1407
52.9823
10.0000
44.4703
64.0526
11.0000
61.5432
20.9069
12.0000
79.1937
37.9818
13.0000
92.1813
78.3329
14.0000
73.8207
68.0846
15.0000
17.6266
46.1095
16.0000
40.5706
56.7829
17.0000
93.5470
79.4211
18.0000
91.6904
5.9183
19.0000
41.0270
60.2869
20.0000
89.3650
5.0269
21.0000
5.7891
41.5375
22.0000
35.2868
30.4999
23.0000
81.3166
87.4367
24.0000
0.9861
1.5009
25.0000
13.8891
76.7950
26.0000
20.2765
97.0845
27.0000
19.8722
99.0083
28.0000
60.3792
78.8862
29.0000
27.2188
43.8659
30.0000
19.8814
49.8311
31.0000
1.5274
21.3963
32.0000
74.6786
64.3492
33.0000
44.5096
32.0036
34.0000
93.1815
96.0099
35.0000
46.5994
72.6632
36.0000
41.8649
41.1953
37.0000
84.6221
74.4566
38.0000
52.5152
26.7947
39.0000
20.2647
43.9924
40.0000
67.2137
93.3380
41.0000
83.8118
68.3332
42.0000
1.9640
21.2560
43.0000
68.1277
83.9238
44.0000
37.9481
62.8785
45.0000
83.1796
13.3773
46.0000
50.2813
20.7133
47.0000
70.9471
60.7199
48.0000
42.8892
62.9888
49.0000
30.4617
37.0477
50.0000
18.9654
57.5148
51.0000
19.3431
45.1425
52.0000
68.2223
4.3895
53.0000
30.2764
2.7185
54.0000
54.1674
31.2685
55.0000
15.0873
1.2863
56.0000
69.7898
38.3967
57.0000
37.8373
68.3116
58.0000
86.0012
9.2842
59.0000
85.3655
3.5338
60.0000
59.3563
61.2395
61.0000
49.6552
60.8540
62.0000
89.9769
1.5760
63.0000
82.1629
1.6355
64.0000
64.4910
19.0075
65.0000
81.7974
58.6918
66.0000
66.0228
5.7581
67.0000
34.1971
36.7568
68.0000
28.9726
63.1451
69.0000
34.1194
71.7634
70.0000
53.4079
69.2669
71.0000
72.7113
8.4079
72.0000
30.9290
45.4355
73.0000
83.8496
44.1828
74.0000
56.8072
35.3250
75.0000
37.0414
15.3606
76.0000
70.2740
67.5645
77.0000
54.6571
69.9213
78.0000
44.4880
72.7509
79.0000
69.4567
47.8384
80.0000
62.1310
55.4842
81.0000
79.4821
12.1047
82.0000
95.6843
45.0754
83.0000
52.2590
71.5883
84.0000
88.0142
89.2842
85.0000
17.2956
27.3102
86.0000
97.9747
25.4769
87.0000
27.1447
86.5603
88.0000
25.2329
23.2350
89.0000
87.5742
80.4872
90.0000
73.7306
90.8398
91.0000
13.6519
23.1894
92.0000
1.1757
23.9313
93.0000
89.3898
4.9754
94.0000
19.9138
7.8384
95.0000
29.8723
64.0815
96.0000
66.1443
19.0887
97.0000
28.4409
84.3869
98.0000
46.9224
17.3900
99.0000
6.4781
17.0793
100.0000
98.8335
99.4295
表2障碍区域1必须要覆盖的点的坐标:
顶点序号
顶点的横坐标
顶点的纵坐标
1
3.2060
12.9166
2
17.4571
19.3377
3
4.7576
20
表3障碍区域2必须要覆盖的点的坐标:
顶点序号
顶点的横坐标
顶点的纵坐标
1
50
30
2
53.7465
48.4490
3
46.9222
57.1195
4
33.3207
39.8050
5
43.1123
56.3187
表4障碍区域3必须要覆盖的点的坐标:
顶点序号
顶点的横坐标
顶点的纵坐标
1
54.6982
70
2
53.7465
90
3
46.9222
80
表5障碍区域4必须要覆盖的点的坐标:
顶点序号
顶点的横坐标
顶点的纵坐标
1
90
75
2
80
95
3
70
80
二.问题分析:
根据题目可知,主要根据所给不同障碍区域的数据对用户点进行检测,判断其是否为有效用户。
并在此基础上将所有用户连接起来,使得路径不经过障碍区
如果用户点位于障碍区域之外,则为有效用户,否则,为无效用户。
通过用户点与障碍区域各个顶点的连线,并按顺时针计算用户点与障碍区域两相邻顶点的面积。
若所得面积中有一个与障碍区域面积相等,则说明当前用户点在障碍区域内,即无效用户点。
若所得面积均与障碍区域面积不相等,则说明当前用户点在障碍区域外,即有效用户。
三.模型基本假设:
3.1假设题目所给的数据真实可靠;
3.2假设任意两个用户之间以直线连接;
四.Matlab程序中变量说明:
Sign
Meaning
A
记录100个用户点的坐标
B
障碍区1的各顶点坐标
C
障碍区2的各顶点坐标
D
障碍区3的各顶点坐标
E
障碍区4的各顶点坐标
FLAG_ZP
表示各用户点是否在障碍区,若在,对应位置为1;若不在,为0
OUTFLAG_ZP
表示有效用户点的序号
AVAILABLE
表示有效用户点的个数
五.模型的建立与求解:
由问题分析可知,本问题的关键有二个:
一是求确定各障碍区的面积以及用户点与各障碍区任意两个定点构成的三角形的面积之和;二是比较上面两个面积,若相等,则该用户点在障碍区内为无效用户,否则,其为有效用户。
5.1运用向量的方法求解障碍区面积
若障碍区是三角形,对应各顶点坐标分别为(x1,y1),(x2,y2),(x3,y3)。
则a=(x2-x1,y2-y1),b=(x3-x1,y3-y1)。
由于三角形面积S=|a|*|b|*sin/2,向量a,b外积的模长|a×b|=|a|*|b|*sin;则有S=|a×b|/2;
若障碍区为五边形,对应点为(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5)。
则划分成三个三角形,各三角形的顶点分别为(x1,y1),(x2,y2),(x3,y3);(x3,y3),(x4,y4),(x5,y5);(x1,y1),(x3,y3),(x5,y5)。
再用求三角形面积的方法求解即可。
5.2求用户点与任意两个同一障碍区的顶点构成三角形的面积之和
同5.1。
5.3判断有效用户
如果S=S1,则该用户在障碍区内,为无效用户。
反之,为有效用户。
筛选完毕的结果如下:
在障碍区的点的序号为:
OUTFLAG_ZP=4,23,36,99。
无效用户的信息为:
(4.0000,48.5982,33.3951);(23.0000,81.3166,87.4367);(36.0000,41.8649,41.1953);(99.0000,6.4781,17.0793)。
有效用户的个数是:
AVAILABLE=96。
100个点的分布情况如图1:
图1100个点的分布情况
100个点是否在障碍区的情况如图2:
图2100个点是否在障碍区的情况
六.Matlab求解程序:
>>A=[1.000095.012958.2792;
2.000023.113942.3496;
3.000060.684351.5512;
4.000048.598233.3951;
5.000089.129943.2907;
6.000076.209722.5950;
7.000045.646857.9807;
8.00001.850476.0365;
9.000082.140752.9823;
10.000044.470364.0526;
11.000061.543220.9069;
12.000079.193737.9818;
13.000092.181378.3329;
14.000073.820768.0846;
15.000017.626646.1095;
16.000040.570656.7829;
17.000093.547079.4211;
18.000091.69045.9183;
19.000041.027060.2869;
20.000089.36505.0269;
21.00005.789141.5375;
22.000035.286830.4999;
23.000081.316687.4367;
24.00000.98611.5009;
25.000013.889176.7950;
26.000020.276597.0845;
27.000019.872299.0083;
28.000060.379278.8862;
29.000027.218843.8659;
30.000019.881449.8311;
31.00001.527421.3963;
32.000074.678664.3492;
33.000044.509632.0036;
34.000093.181596.0099;
35.000046.599472.6632;
36.000041.864941.1953;
37.000084.622174.4566;
38.000052.515226.7947;
39.000020.264743.9924;
40.000067.213793.3380;
41.000083.811868.3332;
42.00001.964021.2560;
43.000068.127783.9238;
44.000037.948162.8785;
45.000083.179613.3773;
46.000050.281320.7133;
47.000070.947160.7199;
48.000042.889262.9888;
49.000030.461737.0477;
50.000018.965457.5148;
51.000019.343145.1425;
52.000068.22234.3895;
53.000030.27642.7185;
54.000054.167431.2685;
55.000015.08731.2863;
56.000069.789838.3967;
57.000037.837368.3116;
58.000086.00129.2842;
59.000085.36553.5338;
60.000059.356361.2395;
61.000049.655260.8540;
62.000089.97691.5760;
63.000082.16291.6355;
64.000064.491019.0075;
65.000081.797458.6918;
66.000066.02285.7581;
67.000034.197136.7568;
68.000028.972663.1451;
69.000034.119471.7634;
70.000053.407969.2669;
71.000072.71138.4079;
72.000030.929045.4355;
73.000083.849644.1828;
74.000056.807235.3250;
75.000037.041415.3606;
76.000070.274067.5645;
77.000054.657169.9213;
78.000044.488072.7509;
79.000069.456747.8384;
80.000062.131055.4842;
81.000079.482112.1047;
82.000095.684345.0754;
83.000052.259071.5883;
84.000088.014289.2842;
85.000017.295627.3102;
86.000097.974725.4769;
87.000027.144786.5603;
88.000025.232923.2350;
89.000087.574280.4872;
90.000073.730690.8398;
91.000013.651923.1894;
92.00001.175723.9313;
93.000089.38984.9754;
94.000019.91387.8384;
95.000029.872364.0815;
96.000066.144319.0887;
97.000028.440984.3869;
98.000046.922417.3900;
99.00006.478117.0793;
100.000098.833599.4295
];
>>holdon;
fori=1:
100
x=A(i,2);
y=A(i,3);
plot(x,y,'.')
end
>>holdon;
title('用户与障碍区的图像20130920zp')
>>B=[13.206012.9166;
217.457119.3377;
34.757620
];
C=[15030;
253.746548.4490;
346.922257.1195;
543.112356.3187;
433.320739.8050
];
D=[154.698270;
253.746590;
346.922280
];
E=[19075;
28095;
37080
]
fori=1:
3
x1=B(i,2);
y1=B(i,3);
x2=B(mod(i,3)+1,2);
y2=B(mod(i,3)+1,3);
X=[x1,x2];
Y=[y1,y2];
plot(X,Y,'r')
end
fori=1:
5
x1=C(i,2);
y1=C(i,3);
x2=C(mod(i,5)+1,2);
y2=C(mod(i,5)+1,3);
X=[x1,x2];
Y=[y1,y2];
plot(X,Y,'r')
end
fori=1:
3
x1=D(i,2);
y1=D(i,3);
x2=D(mod(i,3)+1,2);
y2=D(mod(i,3)+1,3);
X=[x1,x2];
Y=[y1,y2];
plot(X,Y,'r')
end
fori=1:
3
x1=E(i,2);
y1=E(i,3);
x2=E(mod(i,3)+1,2);
y2=E(mod(i,3)+1,3);
X=[x1,x2];
Y=[y1,y2];
plot(X,Y,'r')
end
>>FLAG_ZP=zeros(1,100);
forn=1:
100
a1=[B(2,2)-B(1,2),B(2,3)-B(1,3),0];
a2=[B(3,2)-B(2,2),B(3,3)-B(2,3),0];
a3=[B(1,2)-B(3,2),B(1,3)-B(3,3),0];
S=norm(cross(a1,a2))/2;
x=A(n,2);
y=A(n,3);
z1=[x-B(1,2),y-B(1,3),0];
z2=[x-B(2,2),y-B(2,3),0];
z3=[x-B(3,2),y-B(3,3),0];
s1=norm(cross(z1,a1))/2;
s2=norm(cross(z2,a2))/2;
s3=norm(cross(z3,a3))/2;
S1=s1+s2+s3;
if(S1==S)flag1=0;
elseflag1=1;
end
b1=[C(2,2)-C(1,2),C(2,3)-C(1,3),0];
b2=[C(3,2)-C(2,2),C(3,3)-C(2,3),0];
b3=[C(4,2)-C(3,2),C(4,3)-C(3,3),0];
b4=[C(5,2)-C(4,2),C(5,3)-C(4,3),0];
b5=[C(1,2)-C(5,2),C(1,3)-C(5,3),0];
s1=norm(cross(b1,b2))/2;
s2=norm(cross(b3,b4))/2;
s3=norm(cross(b1+b2,b3+b4))/2;
S=s1+s2+s3;
x=A(n,2);
y=A(n,3);
z1=[x-C(1,2),y-C(1,3),0];
z2=[x-C(2,2),y-C(2,3),0];
z3=[x-C(3,2),y-C(3,3),0];
z4=[x-C(4,2),y-C(4,3),0];
z5=[x-C(5,2),y-C(5,3),0];
s1=norm(cross(z1,b1))/2;
s2=norm(cross(z2,b2))/2;
s3=norm(cross(z3,b3))/2;
s4=norm(cross(z4,b4))/2;
s5=norm(cross(z5,b5))/2;
S1=s1+s2+s3+s4+s5;
if(S1==S)flag2=0;
elseflag2=1;
end
c1=[D(2,2)-D(1,2),D(2,3)-D(1,3),0];
c2=[D(3,2)-D(2,2),D(3,3)-D(2,3),0];
c3=[D(1,2)-D(3,2),D(1,3)-D(3,3),0];
S=norm(cross(c1,c2))/2;
x=A(n,2);
y=A(n,3);
z1=[x-D(1,2),y-D(1,3),0];
z2=[x-D(2,2),y-D(2,3),0];
z3=[x-D(3,2),y-D(3,3),0];
s1=norm(cross(c1,z1))/2;
s2=norm(cross(c2,z2))/2;
s3=norm(cross(c3,z3))/2;
S1=s1+s2+s3;
if(S1==S)flag3=0;
elseflag3=1;
end
d1=[E(2,2)-E(1,2),E(2,3)-E(1,3),0];
d2=[E(3,2)-E(2,2),E(3,3)-E(2,3),0];
d3=[E(1,2)-E(3,2),E(1,3)-E(3,3