主观权重matlab代码
时间: 2023-11-25 16:54:38 浏览: 43
主观权重(Subjective Weights)是指在多准则决策中,不同准则对决策结果的影响程度是不同的,因此需要为每个准则赋予不同的权重。主观权重法是一种常用的权重确定方法,它基于决策者对准则的主观判断,通过问卷调查、专家咨询等方式获取权重信息。
下面是一份用 MATLAB 实现主观权重法的示例代码,供参考:
```matlab
clc
clear
% 设置决策矩阵
D = [6 2 8; 5 4 7; 7 5 5; 4 6 6];
% 设置准则权重
w = [0.5 0.3 0.2];
% 计算加权决策矩阵
WD = D .* w;
% 计算综合得分
score = sum(WD, 2);
% 输出决策结果
disp("决策矩阵:")
disp(D)
disp("准则权重:")
disp(w)
disp("加权决策矩阵:")
disp(WD)
disp("综合得分:")
disp(score)
```
以上代码中,决策矩阵 `D` 是一个 4x3 的矩阵,表示有 4 个决策对象和 3 个准则;准则权重 `w` 是一个 1x3 的向量,表示每个准则的权重;加权决策矩阵 `WD` 是决策矩阵 `D` 每个元素和对应准则权重相乘的结果;综合得分 `score` 是加权决策矩阵 `WD` 每行元素之和,表示每个决策对象的综合得分。
在实际应用中,可以根据具体情况进行修改和扩展。
相关问题
AHP确定主观权重matlab代码
以下是使用Matlab实现AHP确定主观权重的代码示例:
假设我们要确定三个准则(C1,C2和C3)的权重,代码如下:
```matlab
% 创建AHP矩阵
A = [1 3 5; 1/3 1 3; 1/5 1/3 1];
% 计算每个准则的权重
[V, D] = eig(A);
[eigval, idx] = max(diag(D));
w = V(:,idx);
w = w/sum(w);
```
在此代码中,我们首先创建了AHP矩阵A(此处的矩阵为3x3)。然后,我们计算了矩阵A的特征向量和特征值,以确定每个准则的权重。
最终,我们使用w向量来存储每个准则的权重,并将其归一化,以确保它们的总和为1。
请注意,此代码示例仅适用于确定三个准则的权重。如果你有更多的准则,你需要相应地更改矩阵A的大小。
数学建模topsis法matlab代码
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'); % 相对优劣程度排序
```