数学建模topsis法matlab代码
时间: 2023-10-28 07:04:53 浏览: 60
TOPSIS法是一种多属性决策分析方法,可以用来评价多个决策方案的相对优劣。Matlab中可以使用以下代码实现:
假设有4个决策方案,每个方案有3个评价指标,存储在一个4行3列的矩阵X中。
```matlab
X = [3 2 6;
5 4 8;
7 5 9;
4 6 7];
```
首先需要将所有指标标准化,使得它们的取值范围相同。可以使用以下代码实现:
```matlab
[n,m] = size(X); % n为方案数,m为指标数
X1 = X./sqrt(sum(X.^2)); % 指标标准化
```
接下来,需要确定每个指标的权重。可以使用主观赋权法或客观赋权法来确定权重。这里假设已经确定了指标权重,存储在一个1行3列的矩阵W中。
```matlab
W = [0.3 0.4 0.3]; % 指标权重
```
然后计算加权规范化矩阵,即将指标标准化后乘以指标权重,得到每个方案的加权规范化得分。
```matlab
X2 = X1.*W; % 加权规范化矩阵
```
接下来需要确定正负理想解。正理想解是指在每个指标上取值最大的方案,负理想解是指在每个指标上取值最小的方案。可以使用以下代码实现:
```matlab
Z = [max(X2); min(X2)]; % 正负理想解
```
然后计算每个方案到正负理想解的距离,可以使用欧氏距离或曼哈顿距离。这里使用欧氏距离。
```matlab
D = sqrt(sum((X2-Z(:,1)').^2,2)) ./ (sqrt(sum((X2-Z(:,1)').^2,2)) + sqrt(sum((X2-Z(:,2)').^2,2))); % 距离值
```
最后按照距离值的大小排序,得到每个方案的相对优劣程度。
```matlab
[~,rank] = sort(D,'descend'); % 相对优劣程度排序
```
rank中的第一个元素即为最优方案的编号。
完整的代码如下:
```matlab
X = [3 2 6;
5 4 8;
7 5 9;
4 6 7];
[n,m] = size(X);
X1 = X./sqrt(sum(X.^2)); % 指标标准化
W = [0.3 0.4 0.3]; % 指标权重
X2 = X1.*W; % 加权规范化矩阵
Z = [max(X2); min(X2)]; % 正负理想解
D = sqrt(sum((X2-Z(:,1)').^2,2)) ./ (sqrt(sum((X2-Z(:,1)').^2,2)) + sqrt(sum((X2-Z(:,2)').^2,2))); % 距离值
[~,rank] = sort(D,'descend'); % 相对优劣程度排序
```