【国家级精品课程】-中南大学-数学建模-lingo-matlab-优化建模-(4)

2019-03-09 17:33

宁波 上海 大连 北京 厦门 天津 呼和浩特 常州 长沙 沈阳 南京 青岛 济南 武汉 成都

1 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1

0 0 0 1 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0

0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

G=17.6671

此时在H矩阵中1代表城市的带动关系,0则为无关。

6.模型优缺点评价

6.1优点:

(1) 给出了城市经济规模因素带动效益系数,产业结构因素带动效益系数,地理

因素带动效益系数评价,以及城市带动效益量化值综合评价指标函数,能够对任意一对给定的城市量化出带动效应。 (2) 根据原有A,B组城市模型,利用匈牙利算法求得最优城市对,即总效益最大。 (3) 通过对现实情况分析,根据一般分配模型重新建立对应关系,使得经济带动

总效应达到最大值。

6.2缺点:

(1)基本假设中只考虑城市GDP规模,产业同工系数,地理距离。未将城市的政治职能,交通便利程度考虑进去,不能完全衡量城市之间各个影响的因素。 (2)量化模型采取线性差值法,过于简单。

7、参考文献:

[1] 张杰,周硕等,运筹学模型与实验,北京:中国电力出版社,2007年8月。 [2]《运筹学》教材编写组,运筹学,北京:清华大学出版社,2005年6月。 [3] 陈鹏,成渝城市经济空间发展研究,成都:82-83,2008。

[4] 姜启源,谢金星,叶俊,数学模型(第三版)北京:高等教育出版社,2003年3月。

8.附录

MATLAB关键代码如下:

%问题三代码(匈牙利算法实现代码) function [z,ans]=fenpei(marix);

%输入效率矩阵 marix 为方阵;

%若效率矩阵中有 M,则用一充分大的数代替;%输出z为最优解,ans为 最优分配矩阵; marix=[0.1302 0.1422 0.0976 0.0906 0.1768 0.1584 0.0847 0.08910.1057 0.1101 0.0912 0.0796 0.0887 0.0927 0.0981 0.0827 0.12600.0885 0.1214 0.1499

0.2730 0.3089 0.2322 0.2343 0.3756 0.2274 0.2495 0.2310 0.22650.2342 0.2101 0.2278 0.2255 0.2706 0.2307 0.2289 0.2303 0.23530.2446 0.2803

0.3033 0.3492 0.2618 0.2650 0.4004 0.2568 0.2871 0.2617 0.25420.2608 0.2373 0.2490 0.2535 0.3106 0.2599 0.2586 0.2575 0.26180.2733 0.3072

0.1898 0.2017 0.1792 0.1517 0.2501 0.1589 0.1474 0.1824 0.16920.1596 0.1475 0.1379 0.1468 0.1607 0.1553 0.1430 0.1578 0.18460.1705 0.1983

0.2001 0.2207 0.1856 0.1606 0.2518 0.1644 0.1595 0.1879 0.17200.1673 0.1534 0.1471 0.1536 0.1685 0.1650 0.1501 0.1631 0.21850.1764 0.2051

0.1737 0.1898 0.1532 0.1359 0.2162 0.1388 0.1337 0.1523 0.14290.1433 0.1272 0.1240 0.1299 0.1436 0.1389 0.1265 0.1391 0.16790.1511 0.1759

0.4043 0.4255 0.3820 0.3627 0.4768 0.3681 0.3609 0.3780 0.37660.3717 0.3559 0.3458 0.3553 0.3686 0.3697 0.3507 0.3652 0.39390.3823 0.4155

0.1770 0.1856 0.1383 0.1355 0.2021 0.1542 0.1276 0.1306 0.14080.1437 0.1345 0.1222 0.1316 0.1428 0.1507 0.1278 0.1461 0.13230.1548 0.1761

0.4451 0.4906 0.3665 0.3704 0.5473 0.4405 0.3612 0.3593 0.38520.3787 0.4024 0.3433 0.3491 0.3656 0.3846 0.3418 0.3690 0.35950.4014 0.4557

0.1333 0.1576 0.1013 0.0926 0.2085 0.0922 0.0965 0.0934 0.09100.0980 0.0731 0.0776 0.0851 0.1101 0.0926 0.0849 0.0941 0.1036

0.1079 0.1384

0.2408 0.2559 0.2071 0.1996 0.2134 0.2488 0.1891 0.1979 0.2240 0.2538

0.1575 0.1752 0.1090 0.1085 0.1204 0.1053 0.0881 0.1011 0.1320 0.1637

0.1367 0.1536 0.1304 0.1000 0.1103 0.1001 0.0865 0.0954 0.1175 0.1433

0.1684 0.1931 0.1864 0.1474 0.1399 0.1234 0.1244 0.1360 0.1483 0.1780

0.1791 0.1930 0.1384 0.1360 0.1481 0.1373 0.1250 0.1308 0.1558 0.1801

0.1856 0.2075 0.1865 0.1453 0.1538 0.1466 0.1322 0.1417 0.1676 0.1985

0.1917 0.2070 0.1584 0.1509 0.1618 0.1742 0.1368 0.1459 0.1697 0.1949

0.1713 0.1880 0.1414 0.1272 0.1371 0.2078 0.1134 0.1234 0.1509 0.1770

0.1955 0.2123 0.5328 0.1606 0.1606 0.1568 0.1413 0.1519 0.1725 0.2052

0.1986 0.2099 0.1516 0.1749 0.1666 0.1356 0.1572 0.1674 0.1763 0.2045 ];

a=marix; b=a;

%确定矩阵维数 s=length(a);

%确定矩阵行最小值,进行行减 ml=min(a'); for i=1:s

a(i,:)=a(i,:)-ml(i); end

%确定矩阵列最小值,进行列减 mr=min(a); for j=1:s

0.2988 0.2527 0.2054 0.2177 0.1997 0.2039 0.1089 0.1142 0.1806 0.1084 0.1092 0.1032 0.2344 0.1360 0.1653 0.1314 0.2202 0.1568 0.1397 0.1624 0.2405 0.1533 0.1534 0.1514 0.2316 0.1734 0.1572 0.1583 0.2083 0.1657 0.1357 0.1365 0.2506 0.1639 0.1719 0.1556 0.2298 0.1550 0.1692 0.1510 0.1967 0.2036 0.1906 0.2166 0.0993 0.0989 0.0917 0.1324 0.0983 0.1216 0.0917 0.1067 0.1661 0.1585 0.1316 0.1404 0.1313 0.1308 0.1271 0.1435 0.1430 0.1835 0.1340 0.1536 0.1472 0.1558 0.1421 0.1597 0.1232 0.1360 0.1189 0.1412 0.1615 0.2863 0.1471 0.1634 0.1493 0.1455 0.1472 0.1778 0.22150.20420.11880.09740.12190.12090.14360.15300.14260.13280.17460.17680.17280.15460.19390.13350.18560.17770.15050.1415

a(:,j)=a(:,j)-mr(j); end

% start working num=0;

while(num~=s) %终止条件是“(0)”的个数与矩阵的维数相同

%index用以标记矩阵中的零元素,若a(i,j)=0,则index(i,j)=1,否则index(i,j)=0 index=ones(s); index=a&index; index=~index;

%flag用以标记划线位,flag=0 表示未被划线, %flag=1 表示有划线过,flag=2 表示为两直线交点 %ans用以记录 a 中“(0)”的位置 %循环后重新初始化flag,ans flag = zeros(s); ans = zeros(s);

%一次循环划线全过程,终止条件是所有的零元素均被直线覆盖, %即在flag>0位,index=0 while(sum(sum(index))) %按行找出“(0)”所在位置,并对“(0)”所在列划线, %即设置flag,同时修改index,将结果填入ans for i=1:s t=0; l=0; for j=1:s

if(flag(i,j)==0&&index(i,j)==1) l=l+1; t=j; end end if(l==1)

flag(:,t)=flag(:,t)+1; index(:,t)=0; ans(i,t)=1; end end

%按列找出“(0)”所在位置,并对“(0)”所在行划线, %即设置flag,同时修改index,将结果填入ans for j=1:s t=0; r=0; for i=1:s

if(flag(i,j)==0&&index(i,j)==1) r=r+1; t=i;

end end if(r==1)

flag(t,:)=flag(t,:)+1; index(t,:)=0; ans(t,j)=1; end end

end %对 while(sum(sum(index))) %处理过程

%计数器:计算ans中1的个数,用num表示 num=sum(sum(ans));

% 判断是否可以终止,若可以则跳出循环 if(s==num) break; end

%否则,进行下一步处理

%确定未被划线的最小元素,用m表示 m=max(max(a)); for i=1:s for j=1:s

if(flag(i,j)==0) if(a(i,j)

%未被划线,即flag=0处减去m;线交点,即flag=2处加上m for i=1:s for j=1:s

if(flag(i,j)==0) a(i,j)=a(i,j)-m; end

if(flag(i,j)==2)

a(i,j)=a(i,j)+m; end end end

end %对while(num~=s) %计算最优(min)值 zm=ans.*b; z=0;

z=sum(sum(zm));

ans

%问题四代码

function d=hehe(a,b,c)

a为正文表3,b为正文表4,c为正文表6 for i=1:20 for j=1:20

if(a(i,j)>=b(i,j)) if(a(i,j)>=c(i,j)) d(i,j)=1; else

d(i,j)=2; end else

if(b(i,j)>=c(i,j)) d(i,j)=3; else

d(i,j)=2; end end end end

%问题五代码 f为表6对应矩阵 A为表2对应矩阵

%i可以取0到19,可以求出1到20列的数据,和每列的最优值 i=1

f=f(i*20+1:(i+1)*20); A=A(i+1,1:20); b=ones(1,1); ib=zeros(20,1); ub=ones(20,1);

[x,feval]=linprog(-f,A,b,[],[],ib,ub)


【国家级精品课程】-中南大学-数学建模-lingo-matlab-优化建模-(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:市级课题结题材料汇编

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: