matlab編程基礎——基於層次分析法

筆記來自:數學建模:利用Matlab編寫層次分析法的代碼

目錄

1. 矩陣的概念

2. 矩陣的乘法

 3. 矩陣其他乘法

4. 特徵值與特徵向量

 5. matlab基礎代碼講解

Contents

Matlab基本的小常識

輸出和輸入函數(disp 和 input)

sum函數

基礎:matlab中如何提取矩陣中指定位置的元素?

size函數

repmat函數

Matlab中矩陣的運算

Matlab中求特徵值和特徵向量

find函數的基本用法

矩陣與常數的大小判斷運算

判斷語句


1. 矩陣的概念

視頻解釋

矩陣(Matrix)是一個按照長方陣列排列的複數實數集合 [1]  ,最早來自於方程組係數常數所構成的方陣。 

 

2. 矩陣的乘法

矩陣乘法解釋

第一個矩陣第一行的每個數字(2和1),各自乘以第二個矩陣第一列對應位置的數字(1和1),然後將乘積相加( 2 x 1 + 1 x 1),得到結果矩陣左上角的那個值3。

筆算:

matlab代碼:

A = [1 2 3; 4 5 6];
B = [7 8; 9 10; 11 12];
A * B

 輸出結果:

 

比如:

 3. 矩陣其他乘法

matlab代碼:

A = [1 3 2; 1 0 0; 1 2 2];
B = [0 0 2; 7 5 0; 2 1 1];
A .* B

 輸出結果:

4. 特徵值與特徵向量

含動圖的講解筆記

衆人皆醉我獨醒——深入理解“特徵值”和“特徵向量”

對於給定矩陣A,尋找一個常數λ(可以爲複數)和非零向量x,使得向量x被矩陣A作用後所得的向量Ax與原向量x平行,並且滿足Ax=λx。

n階方陣指的是n*n的矩陣(n行n列的矩陣)

特徵值與特徵向量求解

%% Matlab中求特徵值和特徵向量
% 在Matlab中,計算矩陣A的特徵值和特徵向量的函數是eig(A),其中最常用的兩個用法:
A = [1 2 3 ;2 2 1;2 0 3]
% (1)E=eig(A):求矩陣A的全部特徵值,構成向量E。
E=eig(A)
% (2)[V,D]=eig(A):求矩陣A的全部特徵值,構成對角陣D,並求A的特徵向量構成V的列向量。(V的每一列都是D中與之相同列的特徵值的特徵向量)
[V,D]=eig(A)

 

 5. matlab基礎代碼講解

Contents

Matlab基本的小常識

(1)在每一行的語句後面加上分號(一定要是英文的哦;中文的長這個樣子;)表示不顯示運行結果

a = 3;
a = 5

% (2)多行註釋:選中要註釋的若干語句,快捷鍵Ctrl+R
% % a = 3;
% % a = 5

% (3)取消註釋:選中要取消註釋的語句,快捷鍵Ctrl+T
% 我想要取消註釋下面這行
% 還有這一行

% clear可以清除工作區的所有變量
clear

% clc可以清除命令行窗口中的所有文本,讓屏幕變得乾淨
clc

% 所以大家在很多代碼開頭,都會見到:
clear;clc   % 分號也用於區分行。
% 這兩條一起使用,起到“初始化”的作用,防止之前的結果對新腳本文件(後綴名是 .m)產生干擾。

輸出和輸入函數(disp 和 input)

disp函數 matlab中disp()就是屏幕輸出函數,類似於c語言中的printf()函數

isp('我是清風,大家好鴨~~~記得投幣關注我哦')
a = [1,2,3]    %同一行中間用逗號分隔,也可以不用逗號,直接用空格
a = [1 2 3]
a = [1;2;3]  % 分號可以用來分隔每一行的元素
disp(a)
% 注意,disp函數比較特殊,這裏可要 分號,可不要分號哦
disp(a);
% matlab中兩個字符串的合併有兩種方法
% (1)strcat(str1,str2……,strn)
strcat('字符串1','字符串2')
strcat('字符串1','字符串2','字符串3')
% (2)[str 1,str 2,……, str n]或[str1  str2  ……  strn]
['字符串1'  '字符串2']
['字符串1','字符串2']
['字符串1','字符串2','字符串3']

% 一個有用的字符串函數:num2str  將數字轉換爲字符串
c = 100
num2str(c)
%disp(['c的取值爲' num2str(c)])
disp(['c的取值爲', num2str(c)])
disp(strcat('c的取值爲', num2str(c)))

% input函數
% 一般我們會將輸入的數、向量、矩陣、字符串等賦給一個變量,這裏我們賦給A
A = input('請輸入A:');
B = input('請輸入B:')
% 注意觀察工作區,並體會input後面加分號和不加分號的區別

sum函數

(1)如果是向量(無論是行向量還是列向量),都是直接求和

E = [1,2,3]
sum(E)
E = [1;2;3]
sum(E)
% (2)如果是矩陣,則需要根據行和列的方向作區分
clc
E = [1,2;3,4;5,6]  % E = [1 2; 3 4; 5 6]   矩陣同行元素用逗號或者空格隔開,不同行之間用分號隔開
% a=sum(x); %按列求和(得到一個行向量)
a = sum(E)
a = sum(E,1)   % 維度dim = 1 表示按照列  dim=2表示按照行  默認dim=1
% a=sum(x,2); %按行求和(得到一個列向量)
a = sum(E,2)
% a=sum(x(:));%對整個矩陣求和
a = sum(sum(E))
E(:)
a = sum(E(:))

基礎:matlab中如何提取矩陣中指定位置的元素?

(1)取指定行和列的一個元素(輸出的是一個值)

clc;A=[1 1 4 1/3 3;1 1 4 1/3 3;1/4 1/4 1 1/3 1/2;3 3 3 1 3;1/3 1/3 2 1/3 1];
A;
A(2,1)
A(3,2)
% (2)取指定的某一行的全部元素(輸出的是一個行向量)
clc;A
A(2,:)  % :表示取所有元素
A(5,:)
% (3)取指定的某一列的全部元素(輸出的是一個列向量)
clc;A
A(:,1)
A(:,3)
% (4)取指定的某些行的全部元素(輸出的是一個矩陣)
clc;A
A([2,5],:)      % 只取第二行和第五行(一共2行)
A(2:5,:)        % 取第二行到第五行(一共4行)
A(2:2:5,:)     % 取第二行和第四行 (從2開始,每次遞增2個單位,到5結束)
1:3:10
1:3:9
10:-1:1
A(2:end,:)      % 取第二行到最後一行
A(2:end-1,:)    % 取第二行到倒數第二行
% (5)取全部元素(按列拼接的,最終輸出的是一個列向量)
clc;A
A(:)

size函數

clc;
A = [1,2,3;4,5,6]
B = [1,2,3,4,5,6]
size(A)
size(B)
% size(A)函數是用來求矩陣A的大小的,它返回一個行向量,第一個元素是矩陣的行數,第二個元素是矩陣的列數
[r,c] = size(A)
% 將矩陣A的行數返回到第一個變量r,將矩陣的列數返回到第二個變量c
r = size(A,1)  %返回行數
c = size(A,2) %返回列數

repmat函數

B = repmat(A,m,n):將矩陣A複製m×n塊,即把A作爲B的元素,B由m×n個A平鋪而成。

A = [1,2,3;4,5,6]
B = repmat(A,2,1)
B = repmat(A,3,2)

Matlab中矩陣的運算

MATLAB在矩陣的運算中,“*”號和“/”號代表矩陣之間的乘法與除法(A/B = A*inv(B))

A = [1,2;3,4]
B = [1,0;1,1]
A * B
inv(B)  % 求B的逆矩陣
B * inv(B)
A * inv(B)
A / B

% 兩個形狀相同的矩陣對應元素之間的乘除法需要使用“.*”和“./”
A = [1,2;3,4]
B = [1,0;1,1]
A .* B
%A * B
A ./ B

% 每個元素同時和常數相乘或相除操作都可以使用
A = [1,2;3,4]
A * 2
A .* 2
A / 2
A ./ 2

% 每個元素同時乘方時只能用 .^
A = [1,2;3,4]
A .^ 2
A ^ 2
A * A

Matlab中求特徵值和特徵向量

在Matlab中,計算矩陣A的特徵值和特徵向量的函數是eig(A),其中最常用的兩個用法:

A = [1 2 3 ;2 2 1;2 0 3]
% (1)E=eig(A):求矩陣A的全部特徵值,構成向量E。
E=eig(A)
% (2)[V,D]=eig(A):求矩陣A的全部特徵值,構成對角陣D,並求A的特徵向量構成V的列向量。(V的每一列都是D中與之相同列的特徵值的特徵向量)
[V,D]=eig(A)

find函數的基本用法

下面例子來自博客:https://www.cnblogs.com/anzhiwu815/p/5907033.html 博客內有更加深入的探究 find函數,它可以用來返回向量或者矩陣中不爲0的元素的位置索引。

clc;
X = [1 0 4 -3 0 0 0 8 6]
ind = find(X)
% 其有多種用法,比如返回前2個不爲0的元素的位置:
ind = find(X,2)

%上面針對的是向量(一維),若X是一個矩陣(二維,有行和列),索引該如何返回呢?
clc;X = [1 -3 0;0 0 8;4 0 6]
ind = find(X)
% 這是因爲在Matlab在存儲矩陣時,是一列一列存儲的,我們可以做一下驗證:
X(4)
% 假如你需要按照行列的信息輸出該怎麼辦呢?
[r,c] = find(X)%尋找不爲0的元素在幾行幾列,r代表行,c代表列
[r,c] = find(X,1) %只找第一個非0元素

矩陣與常數的大小判斷運算

共有三種運算符:大於> ;小於< ;等於 == (一個等號表示賦值;兩個等號表示判斷)

clc
X = [1 -3 0;0 0 8;4 0 6]
X > 0
X == 4

判斷語句

Matlab的判斷語句,if所在的行不需要冒號,語句的最後一定要以end結尾 ;中間的語句要注意縮進。

a = input('請輸入考試分數:')
if a >= 85
    disp('成績優秀')
elseif a >= 60
    disp('成績合格')
else
    disp('成績掛科')
end

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章