tip1:在每一行的语句后面加上分号表示不显示运行结果,加上的话则显示
tip2:多行注释 Ctrl+r,解除多行注释 Ctrl+t
tip3:clc可以清除命令行窗口中的所有文本,即清屏操作
tip4:clear可以清除工作区的所有变量
disp()函数可以近似理解为C语言中的printf()函数
向量表示方法
-
[1 2 3]
-
[1,2,3]
MatLab中字符串的合并方法
-
strcat("字符串1","字符串2");
-
['字符串1' '字符串2'];
num2str:数字转化为字符串
str2num:字符串转化为数字
如:disp(strcat('c的取值为' num2str(100)));是合法的
input()函数可以近似理解为C语言中的scanf()函数
input函数内可以放提示信息,如input("请输入A:");
并且语句后加分号不显示运行结果,不加则显示
求和函数sum()
-
如果是向量,无论行列,直接求和
-
如果是矩阵,则需要根据行和列的方向做区分
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则代表求行向量和
-
若想对整个矩阵求和,则应该写为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-列
-
Matlab中 * / 代表的是矩阵之间的乘除,并不是代表两数之间的乘除,而规模一样的矩阵之间的对应元素的乘除应该用.*和 ./来表示
-
假设某矩阵A每个元素要与常数相乘或除,直接A*n即可,
-
假设某个矩阵A每个元素都要乘方,则A .^2
平均值法求权重
-
对每一列求和
-
所求出来的和行向量使用repmat()函数使其变为与原矩阵规模等大的矩阵
-
然后俩矩阵对应元素相除。
-
然后对相除所得的矩阵按行求和得到一个和列向量,然后列向量除以n即可得权重
几何平均值法求权重
-
矩阵按行求乘积 product = prod(a,2),2代表按行求和
-
然后对这个乘积开n次方 product _a = product .^(1/n);
-
最后对得到的这个向量 每个元素除以整个向量的和即可
特征值法求权重
-
求目标矩阵A的最大特征值及其最大特征值对应的特征向量,[V,D]=eig(A);V即为特征向量拼起来组成的一个矩阵,D为几个特征值组成的对角矩阵
-
然后在D中找出最大的特征值 the_max = max(max(D));
-
然后通过 the_max==D 来得到一个逻辑矩阵,在逻辑矩阵中只有0和1,并且为1的那一个元素所对应的索引就是最大特征值所处在的位置,在通过[r,c]=find(D,1);r为行,c为列
-
然后从特征向量拼起来组成的矩阵V中提取出这个特征向量,采取的操作是 the_tezheng = v(:,c),按列.
-
最后各指标的权重就为 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