数学建模层次分析法与matlab初识

MatLab基础小常识

tip1:在每一行的语句后面加上分号表示不显示运行结果,加上的话则显示

tip2:多行注释 Ctrl+r,解除多行注释 Ctrl+t

tip3:clc可以清除命令行窗口中的所有文本,即清屏操作

tip4:clear可以清除工作区的所有变量

输入输出函数(input和disp)

disp()函数可以近似理解为C语言中的printf()函数

向量表示方法

  1. [1 2 3]

  2. [1,2,3]

MatLab中字符串的合并方法

  1. strcat("字符串1","字符串2");

  2. [\'字符串1\' \'字符串2\'];

num2str:数字转化为字符串

str2num:字符串转化为数字

如:disp(strcat(\'c的取值为\' num2str(100)));是合法的

input()函数可以近似理解为C语言中的scanf()函数

input函数内可以放提示信息,如input("请输入A:");

并且语句后加分号不显示运行结果,不加则显示

求和函数sum()

  1. 如果是向量,无论行列,直接求和

  2. 如果是矩阵,则需要根据行和列的方向做区分

    E=[1,2,3

    4,5,6],则sum(E)可得到5 7 9;

    sum(E,1)得到的也是5 7 9

    但sum(E,2)得到的却是6 15

    sum函数第二个参数为1代表求列向量和,为2则代表求行向量和

  3. 若想对整个矩阵求和,则应该写为sum(sum(E));或者sum(E(:));

获取矩阵中特定位置的元素

假如有一矩阵为

A=[1,2,3

4,5,6

7,8,9],则A(2,1)=4;

A(2,:)=4,5,6; 冒号代表所有

取多行:A([1,2],:)--会输出1 2 3

4 5 6

取连续行,假如对某个足够大矩阵要取2--5行

则应该写为A(2:5,:); 2:5其实是2:1:5 表示的是一个等差数列,公差为1递增

而且若一个矩阵非常大,大到我们‘懒得’统计它的行数,这是我们想要取到第二行到最后一行的内容,可以这样写A(2:end,:);

取全部元素:A(:);且按列优先的方式呈现出来.

size()函数,如A=[1,2,3,4,5;

1,2,3,4,5;

6,7,8,9,10]

size(A)=3,5;

一般会用一个向量来接收size()的返回值,[r,c]=size(A);

则r=3,c=5;

size(A,1)返回的是行数,以A为例就是3,

size(A,2)返回的是列数,以A为例就是5;

repmat(矩阵A,m,n)意为将A矩阵重复m*n块,m-行,n-列

  1. Matlab中 * / 代表的是矩阵之间的乘除,并不是代表两数之间的乘除,而规模一样的矩阵之间的对应元素的乘除应该用.*和 ./来表示

  2. 假设某矩阵A每个元素要与常数相乘或除,直接A*n即可,

  3. 假设某个矩阵A每个元素都要乘方,则A .^2

平均值法求权重

  1. 对每一列求和

  2. 所求出来的和行向量使用repmat()函数使其变为与原矩阵规模等大的矩阵

  3. 然后俩矩阵对应元素相除。

  4. 然后对相除所得的矩阵按行求和得到一个和列向量,然后列向量除以n即可得权重

几何平均值法求权重

  1. 矩阵按行求乘积 product = prod(a,2),2代表按行求和

  2. 然后对这个乘积开n次方 product _a = product .^(1/n);

  3. 最后对得到的这个向量 每个元素除以整个向量的和即可

特征值法求权重

  1. 求目标矩阵A的最大特征值及其最大特征值对应的特征向量,[V,D]=eig(A);V即为特征向量拼起来组成的一个矩阵,D为几个特征值组成的对角矩阵

  2. 然后在D中找出最大的特征值 the_max = max(max(D));

  3. 然后通过 the_max==D 来得到一个逻辑矩阵,在逻辑矩阵中只有0和1,并且为1的那一个元素所对应的索引就是最大特征值所处在的位置,在通过[r,c]=find(D,1);r为行,c为列

  4. 然后从特征向量拼起来组成的矩阵V中提取出这个特征向量,采取的操作是 the_tezheng = v(:,c),按列.

  5. 最后各指标的权重就为 the_quanzhong = the_tezheng ./sum(the_tezheng);这里的the_quanzhong 即为权重,并以列向量呈现。

extra:一致性检验,CI=(the_max-n)/(n-1),RI查表可得

CR=CI/RI(n);

if CR<0.1

disp("通过了一致性检验")!

else

disp("没有通过一致性检验")!

end