?? cht02.m
字號:
%-------------------------------------------------------------------%
%-- 本文存放的是書中第二章中的例子,讀者可以將一些簡單例子的代碼 --%
%-- 拷貝到MATLAB命令窗口進行運行,也可以把一些復雜的例子做成一個單獨 --%
%-- 的*.m文件然后運行、調試(要將每行前的“>>”刪除)。 --%
%-------------------------------------------------------------------%
%#################################################################%
% 2.2 基本運算操作
% 2.2.1 簡單數學操作
% 例1.MATLAB變量賦值
>> x=4+3+1;
>> x
% 例2.MATLAB靈活的變量操作
>> apple=5
>> orange=3
>> total_cost=apple*1.5+orange*1.3
>> average_cost=total_cost/(apple+orange)
>> r=2;
>> area=pi*r^2;
>> area =
>> r=2, area=pi*r^2
>> r=2; area=pi*r^2;
% 例3.換行符的使用
>> r=2;
>> area = pi ...
*r^2;
% 例4.給MATLAB程序加上注釋
>> r=2; % 鍵入半徑值
>> area=pi*r^2; %計算圓的面積公式。
% 2.2.2 變量存儲及讀取
% 例1. 以MAT格式保存變量
>> x=1:5; y=11:15; % 先產生兩個行向量x和y。
>> save data1 x y % 將x,y兩個變量的數值存入在data1這個MAT格式的數據文
%件中,即data1(其實是data1.mat)。data1.mat的內容為變量x,y,而非(1:5, 11:15)
%這樣一行數據。
% 例2. 以ASCII碼格式保存變量
>> save data2.dat x y -ascii % 如果要將data1改以ASCII格式儲存,則須加上
% -ascii這一選項。data2.dat的內容為(1:5,11:15)這樣一行數據。
% 例3. 在MATLAB命令窗口中顯示已存儲的ASCII碼格式的數據文件中的數據
>> type data2.dat % type指令可以將data2.dat中的內容列出來。
% 例4. 將MAT格式的存儲文件導入MATLAB工作環境
>> load data1 %讀取data1.mat文檔 。
>> x, y %輸出data1.mat文檔中的變量來讀取其中的內容(1:5, 11:15)
>> load data2.dat % 讀取data2.dat文檔。
>> x2=data2(1,:); y2=data2(2,:); %將data2中的第一行和第二行數據分別以x2
%及y2為變量名讀入,以后在運算中即可通過x2和y2來使用我們以前存儲的兩行
%數據了。
% 例5. ASCII碼格式的數據文件存儲/讀取全過程
>> x=21:25; y=31:35;
>> save data3.dat x y -ascii
>> load data3.dat;
>> x3=data3(1,:); y3=data3(2,:); %將data3中的第一行和第二行數據分別以x3
%及y3為變量名讀入到MATLAB工作環境。以后在運算中即可使用這兩行數據了。
% 例6. 按列讀取ASCII碼格式數據文件中的數據
>> A=[1 2 3; 4 5 6];
>> save data4.dat A -ascii %將矩陣A的數值存入到data4這個ASCII碼格式的
%文件中。
>> load data4.dat % 導入數據文件。
>> x4=data4(:,1); % 將data4中的第一列數據賦給變量x4。
>> y4=data4(:,2); % 將data4中的第二列數據賦給變量y4。
>> z4=data4(:,3); % 將data4中的第三列數據賦給變量z4。
% 2.3.1 矩陣基本運算
% 例1.矩陣的轉置運算
>> A=[2 5 1; 7 3 8; 4 5 21; 16 13 0];%行之間用分號“;”分隔,行內元素用空
%格分隔。
>> A' % 計算A的轉置矩陣
% 例2.向量的內積運算
>> A=[4 -1 3]; B=[-2 5 2]; % 輸入兩個行向量
>> C=A.*B % 兩個向量相乘
>> dot_prod = sum(C) % 計算A、B兩個行向量的內積
% 例3.向量的內積運算(用dot函數)
>> A=[4 -1 3]; B=[-2 5 2]; % 輸入兩個行向量
>> c=dot(A,B) % 用dot函數也可做內積運算
% 例4.列向量的內積運算
>> A=[4; -1; 3]; % 輸入一個列向量
>> B=[-2 5 2]; % 輸入一個行向量
>> dot_prod = sum(A'.*B); %如果A是列向量則需要先做轉置,再做內積
% 例5.向量外積運算
>> F=[2 5 -1]; G=[0 1 -3]; %輸入兩個行向量
>> out_prod=F'*G % 兩向量做外積運算,中間的運算符號已不再是向量運算符。
% 例6.矩陣的相乘運算
>> A=[2,5,1; 0,3,-1]; % 輸入一個兩行三列的矩陣
>> B=[1,0,2; -1,4,-2; 5,2,1]; % 輸入一個三行三列的矩陣
>> C=A*B %兩矩陣相乘,兩個矩陣的大小需相容,即A的列數要與B的行數相同
% 例7.矩陣的冪運算
>> A=[2 1; 4 3]; % 輸入一個兩行兩列的方陣
>> A^2 % 矩陣次方
% 2.3.2.1 矩陣基本變換函數
% 例1.將矩陣逆時針轉90度
>> A=[2 1 0; -2 5 -1; 3 4 6]; % 輸入待旋轉矩陣
>> B=rot90(A) % 將矩陣A逆時針轉90度
% 例2.將矩陣按水平、垂直對稱軸翻轉
>> A=[1 2; 4 8; -2 0]; % 輸入待翻轉矩陣
>> B=fliplr(A); % 將矩陣A按垂直對稱軸翻轉
>> C=flipud(A); % 將矩陣A按水平對稱軸翻轉
>> B, C
% 例3.將矩陣元素重新組合
>> A=[2 5 6 -1; 3 -2 10 0]; % 輸入待重新組合的矩陣
>> B=reshape(A,4,2); % 將矩陣A改成4x2的矩陣
>> C=reshape(A,1,8); % 將矩陣A改成1x8的矩陣(行向量)
>> B, C
% 例4.生成只有主對角線上元素不為零的對角矩陣
>> V=[1 2 3]; % 輸入為一向量
>> A=diag(V) % 當輸入為一向量時,輸出為一對角矩陣
% 例5. 提取矩陣主對角線上的元素
>> V=[1 2 3;1 2 3;1 2 3]; % 輸入為一矩陣
>> A=diag(V) %輸入為一矩陣時,輸出為一由輸入矩陣主對角線上元素構成的向量
% 例6. 上三角矩陣的提取
>> A=[1:2:7; 3:3:12; 4:-1:1; 1:4] % 輸入矩陣
>> B=triu(A) % 輸出為原輸入矩陣的上三角矩陣
>> C=triu(A,-1)
>> D=triu(A,3)
% 例7. 下三角矩陣的提取
>> A=[1:2:7; 3:3:12; 4:-1:1; 1:4] % 輸入矩陣
>> B=tril(A) % 輸出為原輸入矩陣的下三角矩陣
>> C=tril(A,-1)
>> D=tril(A,3)
% 2.3.2.2 求矩陣的逆、秩與行列式值
% 例1. 矩陣求秩運算
>> A=[2 1; 4 3]; % 輸入一個2X2的方陣
>> rank(A)
% 例2. 矩陣求逆運算
>> A=[2 1; 4 3]; % 輸入一個2X2的方陣
>> inv(A) % 求A的逆矩陣
% 例3. 矩陣秩的計算(非滿秩情況)
>> B=[2 1; 3 2; 4 5]; % B為奇異矩陣
>> rank(B)
% 例4. 矩陣求逆運算(非方陣情況)
>> B=[2 1; 3 2; 4 5]; % 輸入一個3X2的矩陣
>> inv(B)
% 例5.計算矩陣的行列式值
>> A=[1 3 0; -1 5 2; 1 2 1]; % 輸入一個3X3的方陣
>> det(A) % 矩陣之行列式值
% 2.3.2.3 求矩陣的特征值與特征向量
% 例1.求矩陣的特征值與特征向量
>> A = [0.5 0.25; 0.25 0.5]; % 輸入一個兩行兩列的方陣
>> [Q d]=eig(A)
% 例2.驗證計算結果是否正確
>> Q*Q' % 驗證公式:Q*Q'=I
>> A*Q(:,1) % 驗證 ,注意X=Q(:,1)為第一個特征向量,也可以用第二
>> 0.25* Q(:,1)
% 2.3.2.4 矩陣分解函數
% 例1. 矩陣的LU分解
>> A =[1 2 -1; -2 -5 3; -1 -3 0];B=[1 3 2; -2 -6 1; 2 5 7];%輸入兩個方陣
>> [L1,U1] = lu(A); [L2,U2] = lu(B); % 分別對A、B做LU分解
>> L1
>> U1
>> L2
>> U2
% 例2.矩陣的QR分解(輸入為方陣)
>> B=[1 3 2; -2 -6 1; 2 5 7]; % 輸入為方陣
>> [Q R]=qr(B)
% 例3.矩陣的QR分解(輸入不是方陣)
>> B=[1 3 2; -2 -6 1]; % 輸入不是方陣
>> [Q R]=qr(B)
% 例4.矩陣的奇異值(SVD)分解(輸入為方陣)
>> B=[1 3 2; -2 -6 1; 2 5 7]; % 輸入為方陣
>> [U,S,V]=svd(B)
% 例5.矩陣的奇異值(SVD)分解(輸入不是方陣)
>> B=[1 3 2; -2 -6 1]; % 輸入不是方陣
>> [U,S,V]=svd(B)
% 2.4.1 基于命令窗口的交互式輸入輸出
% 例1.通過命令窗口交互式輸入圓的半徑
>> r = input('Type radius:') % 在兩個單引號“'”之間鍵入提示文字,這些文
%字將輸出在命令窗口中,作為提示信息
>> area=pi*r^2; % 鍵入圓的面積算式,“pi”是MATLAB的控制字,用來代替圓周
%率
% 例2.通過命令窗口交互式輸入字符串
>> name = input('Your name please: ','s') % 要鍵入文字(字符串)則需再加
%上格式控制字's',s是代表字符串串(string)。
% 例3.用disp函數實現窗口輸出
>> temp=20; % 輸入一個變量值
>> disp(temp); disp('degrees C'); disp('度 C') % 顯示變量、字符串、中文。
% 2.4.2 基于文件的數據輸入輸出
% 例1.基于文件的數據輸入
>> fid=fopen('cor.tbl','r') % 打開數據輸入文件
>> A1_next=fscanf(fid,'%s',1) % 從數據文件中讀取一個字符串
>> A1_next=fscanf(fid,'%s',1) % 從數據文件中讀取一個字符串
>> A1_next=fscanf(fid,'%s',1) % 從數據文件中讀取一個字符串
>> A1_next=fscanf(fid,'%s',1) % 從數據文件中讀取一個字符串
>> A1_next=fscanf(fid,'%s',1) % 從數據文件中讀取一個字符串
>> A1_next=fscanf(fid,'%s',1) % 從數據文件中讀取一個字符串
>> fclose(fid) % 關閉數據輸入文件
% 例2.用fprintf按規定格式在命令窗口中輸出
>> r=2;area=pi*r^2; % 按圓的面積公式計算圓的面積
>> fprintf('The area is %8.5f\n', area) % 按規定格式在命令窗口中輸出,
% 注意輸出格式前須有“%”符號,跳行符號需有“\”符號
% 例3.用fprintf按不同格式在命令窗口中輸出
>> fprintf('f_form: %12.5f\n',12345.2) % 輸出值為12位數,含5位小數
>> fprintf('f_form: %12.3f\n',1.23452) % 輸出值為12位數,含3位小數
>> fprintf('e_form: %12.5e\n',12345.2) % 輸出值為指數格式的12位數,
%含5位小數
>> fprintf('f_form: %12.0f\n',12345.2) % 輸出值為整數格式的12位數
% 例4.用fprintf實現在文件中輸出
>> fid=fopen('cor.vec','w'); % 打開(建立)用來存放輸出數據的文件
>> ad_end_interval=100; % 輸入變量值
>> fprintf(fid,'INTERVAL %d;\n', ad_end_interval); % 往數據文件中按一定格
%式輸出數據(字符串)并換行
fprintf(fid,'inputs ad_end;\n');
fprintf(fid,'pattern \n'); % 往數據文件中按一定格式輸出數據(字符串)并換行
fprintf(fid,'>0 1;\n'); % 往數據文件中按一定格式輸出數據(字符串)并換行
fprintf(fid,'OUTPUTS absout1[31..0];\n');%第一組相關輸出
fprintf(fid,'OUTPUTS absout2[31..0];\n');%第二組相關輸出
fprintf(fid,'OUTPUTS absout3[31..0];\n');%第三組相關輸出
fclose(fid); % 關閉輸出數據文件
% 2.5.1 MATLAB中函數編寫規范
% 例1.一個完整的MATLAB程序
disp('%-----濾波算法的 Matlab 仿真結果----%'); % 在命令窗口中
%顯示程序基本功能
indata_plot; % 調用函數indata_plot繪制輸入數據時域和頻域圖形
fid=fopen('filter.vec','r');% 用MATLAB內部函數fopen打開一個輸入數據文件
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -