数学建模常用模型18 :多维标度法

在实际中往往会碰到这样的问题:有n个由多个指标(变量)反映的客体,但反映客体的指标个数是多少不清楚,甚至指标本身是什么也是模糊的,更谈不上直接测量或观察它,仅仅所能知道的是这n个客体之间的某种距离(不一定是通常的欧氏距离)或者某种相似性,我们希望仅由这种距离或者相似性给出的信息出发,在较低维的欧氏空间把这n个客体(作为几何点)的图形描绘出来,从而尽可能揭示这n个客体之间的真实结果关系,这就是多维标度法所要研究的问题。

例表1列出了通过测量得到的英国12个城市之间公路长度的数据。由于公路不是平直的,所以它们还不是城市之间的短距离,只可以看作是这些城市之间的近似距离,我们希望利用这些距离数据画一张平面地图,标出这12个城市的位置,使之尽量接近表中所给出的距离数据,从而反映它们的真实地理位置。

 

 

表1 英国12城市之间的公路距离(单位:英里)

 

1

2

3

4

5

6

7

8

9

10

11

12

1

0

 

 

 

 

 

 

 

 

 

 

 

2

244

0

 

 

 

 

 

 

 

 

 

 

3

218

350

0

 

 

 

 

 

 

 

 

 

4

284

77

369

0

 

 

 

 

 

 

 

 

5

197

164

347

242

0

 

 

 

 

 

 

 

6

312

444

94

463

441

0

 

 

 

 

 

 

7

215

221

150

236

279

245

0

 

 

 

 

 

8

469

583

251

598

598

169

380

0

 

 

 

 

9

166

242

116

257

269

210

55

349

0

 

 

 

10

212

53

298

72

170

392

168

531

190

0

 

 

11

253

325

57

340

359

143

117

264

91

273

0

 

12

270

168

284

164

277

378

143

514

173

111

256

0

MATLAB源代码:

clc, clear 
d0=textread('d.txt');   %把原始数据保存在纯文本文件d.txt中 
d=d0(:); 
d=nonzeros(d); %按照一定的顺序提出矩阵D中的非零元素 
d=d'; %注意,d必须为行向量或实对称矩阵 
cities={'1.阿伯瑞斯吹','2.布莱顿','3.卡里斯尔','4.多佛','5.爱塞特',... 
    '6.格拉斯哥','7.赫尔','8.印威内斯','9.里兹','10.伦敦',... 
    '11.纽加塞耳','12.挪利其'}  %构造细胞数组 
[y,eigvals]=cmdscale(d)   %求经典解 
plot(y(:,1),y(:,2),'o')   %画出点的坐标 
text(y(:,1)+25,y(:,2),cities); %对点进行标注

求解结果如下图:

 

猜你喜欢

转载自blog.csdn.net/qq_41686130/article/details/81901665