MATLAB筆記(1)基礎
來自專欄 MATLAB的學習筆記66 人贊了文章
本文為學習Mooc課程「科學計算與Matlab語言」專題一的筆記。
#留作自己復慣用,也方便其他同學查找相關的內容。
#另外,想學習的同學可以免費報名參加Mooc官網所提供的相關課程。
一、基礎知識:
求解 的根;
採用roots求根;
新生注意,「;」表示暫時不輸出結果;
>> p=[1-31];>> x=roots(p)x =2.61800.3820
採用定義符號求解(1)中的例題:
利用sysm來定義變數x,利用solve來求解解析表達,利用eval來得到小數的值;
>> syms x;x = solve(x^2 - 3*x + 1) x = 3/2 - 5^(1/2)/2 5^(1/2)/2 + 3/2>> x=eval(x)x = 0.3820 2.6180
函數繪圖,採用(1)中的函數進行繪製:
size表示輸出矩陣的行與列;
zeros(size(x))表示生成一個同行列的零矩陣;
「.*」表示矩陣的對應元素相乘,要求兩個矩陣必須是同行列的;
「*」則對應的是矩陣乘法,矩陣AB的乘法要求A的列數等於B的行數;
plot函數進行繪製,必須一個x對應一個y,兩條曲線則要輸入plot(x,y1,x,y2);
>> x=[-5:0.1:5];>> y1=x.*x-3*x+1;>> y2=zeros(size(x));>> plot(x,y1,x,y2);
利用fzero函數來求解函數零點:
這裡要注意的是,必須有@(x)這個函數句柄,其作用在於定義變數x;
>> f=@(x)x^2-3*x+1;>> x=fzero(f,0.5)x = 0.3820>> y=fzero(f,2.5)y = 2.6180
另外的一些基礎知識:
matlab函數的自變數往往是矩陣,而因變數也為對應的矩陣,例如:
>> A = [0.5*pi,pi;1.5*pi,2*pi];>> B=sin(A)B = 1.0000 0.0000 -1.0000 -0.0000
對於三角函數而言,sin表示弧度制,而sind表示角度制:
>> sin(0.5*pi)ans = 1>> sind(90)ans = 1
abs函數用於取複數的模或者實數的絕對值:
>> a=3+4i;>> abs(a)ans = 5
四種取整函數:
>> a=5.5;>> floor(a)ans = 5>> ceil(a)ans = 6>> round(a)ans = 6>> fix(a)ans = 5
先說floor和ceil,這兩個相當於 與 ,即向下取整與向上取整。
而round函數更簡單,直接四捨五入。
fix函數是取和原點近的整數,因此可以理解為直接消去小數,例如:
>> a=[3.6,-3.6];>> fix(a)ans = 3 -3
找到345的個位,十位,百位(rem為取餘數):
>> m=345;m1=rem(m,10)m2=rem(fix(m/10),10)m3=fix(m/100)m1 = 5m2 = 4m3 = 3
找到100以內的素數:
>> x=1:100;k=isprime(x);k1=find(k);p=x(k1)p = 1 至 23 列 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 24 至 25 列 89 97
isprime函數是可以判斷一個數是否為素數的函數,是素數輸出1,否則輸出0。
x為一個100維的向量,k對應的也為一個100維的向量。
find函數可以用來查看非零元素的序號。
其實這個問題輸出k1和輸出p的結果是完全相同的,因為非零元素的序號就是元素本身。
最後一行指的是在x中提取,提取k1對應位置的元素。
二、關於矩陣的基本知識:
1.關於建立矩陣:
(1)直接輸入,用兩端中括弧括起來,逗號分隔每一行的元素,分號表示換行;
>> a=[1,2,3;4,5,6]a = 1 2 3 4 5 6
(2)利用分塊矩陣:
>> a=[1,2,3;4,5,6]a = 1 2 3 4 5 6>> b=[7,8,9]b = 7 8 9>> c=[a;b]c = 1 2 3 4 5 6 7 8 9
(3)利用矩陣運算:
>> a=[1,1,1];>> b=[1,3,5];>> c=a+i*bc = 1.0000 + 1.0000i 1.0000 + 3.0000i 1.0000 + 5.0000i>> d=a+b*id = 1.0000 + 1.0000i 1.0000 + 3.0000i 1.0000 + 5.0000i
2.關於建立行向量:
(1)利用初始值,步長與最終值(省略步長默認為1):
note:用冒號進行連接,進行向量的創建
>> t=1:3:10t = 1 4 7 10>> u=1:11u = 1 2 3 4 5 6 7 8 9 10 11
(2)利用linspace函數進行創建,輸入初始值,最終值,元素總數:
note:用冒號創建是根據步長的,用linspace是根據向量size的;
另外,如果不輸入總個數,Matlab默認共100個值。
>> k=linspace(0,100,3)k = 0 50 100>> v=linspace(1,100)v = 1 至 23 列 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 至 46 列 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 至 69 列 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 至 92 列 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 至 100 列 93 94 95 96 97 98 99 100
3.引用矩陣的元素:
(1)通過位置進行引用,A(i,j)表示調用這個位置的元素,利用等號可以給元素進行修改或者添加,添加的意思是指,如果矩陣是2×2的,在提取元素i或j的過程中存在超過2×2的範圍,依然可以賦值,這個時候默認空缺元素為零,如下:
>> a=[1,2,3;4,5,6];>> a(1,2)=1a = 1 1 3 4 5 6>> a(3,5)=1a = 1 1 3 0 0 4 5 6 0 0 0 0 0 0 1
(2)通過序號進行引用:
note:序號是從左向右,每一列從左到右排列的,例如:
>> a=[1,4,7;2,5,8;3,6,9];a(8)ans = 8
(3)sub2ind(S,I,J)函數,I為行下表,J為列下表,S為矩陣的尺寸size,表示提取一個位置處元素的序號:
>> size(a)ans = 3 3>> sub2ind(size(a),[1,1],[1,2])ans = 1 4
其實這裡和a矩陣是什麼元素是無關的,這知識一個位置與序號的轉換,當然,位置的行標和列標不光可以是向量,還可以是矩陣:
>> sub2ind(size(a),[1,2,3;1,2,3],[1,1,1;2,2,2])ans = 1 2 3 4 5 6
得到的結果是一至六,它的位置恰好是按照從左向右每一列從上到下選取的,更要說明的是,I與J可以是同型矩陣。
(4)ind2sub就是sub2ind的逆過程,從序號得到行列指標,如圖:
>> [i,j]=ind2sub(size(a),[1,2,3,4,5,6,7,8,9])i = 1 2 3 1 2 3 1 2 3j = 1 1 1 2 2 2 3 3 3
(5)引用子矩陣:
A(i,j)表示引用一個元素;
A(i:i+m,j:j+n)表示引用一個子矩陣;
note:如果這裡的i與i+m之間為i:k:i+m則k表示步長;
如果在行或者列處直接用「:」代替,表示全部引用;
>> aa = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16>> a(1:2:5,:)ans = 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
當然,完全可以引用特定行,用兩個向量分別表示行和列即可:
>> a([1,3,5],[1,2,3])ans = 1 2 3 1 2 3 1 2 3
end可以表示最後一行:
>> a(end,:)ans = 9 10 11 12 13 14 15 16>> a(:,end)ans = 8 16 8 16 8 16>> a(3:end,:)ans = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
(6)刪除矩陣中的元素:
空矩陣可以表示刪除,形如[ ]。
>> a(:,[1,2])=[]a = 3 4 5 6 7 8 11 12 13 14 15 16 3 4 5 6 7 8 11 12 13 14 15 16 3 4 5 6 7 8 11 12 13 14 15 16
(7)利用reshape重鑄矩陣的結構,但是元素順序不變:
>> c=[1,2,3,4]c = 1 2 3 4>> d=reshape(c,2,2)d = 1 3 2 4
另外的一個表達c(:)表示把他按照順序排成一個列向量。
三、Matlab的基本運算:
1.算數運算:
(1)加「+」,減「-」,乘「*」,右除「/」,左除「」,乘方「^」。
note:Matlab運算是基於矩陣意義的。
重點說一下「/」與「」的含義:
A/B=A*inv(B),即B右除A等於B乘A矩陣的逆矩陣;
AB=inv(A)*B,即A左除B等於A的逆矩陣乘B矩陣;
(2)「.」運算:
點運算要求兩個矩陣必須同型,然後對應元素做相應運算。
"./";".";".*"都同理。
>> x=[0.1:0.3:1];>> y=sin(x).*cos(x)y = 0.0993 0.3587 0.4927 0.4546
2.關係運算:
(1)兩個標量的比較,是直接比較大小的,成立時結果取1,否則為0;
判斷等於的時候的方式是輸入「==」,而不是「=」。
>> x=1x = 1>> x>2ans = 0>> x==1ans = 1
(2)同型矩陣之間逐個元素進行比較;標量與矩陣比較等價於標量與矩陣的每一個元素進行比較,如下:
>> a=[1,1,1;1,1,1;1,1,1];>> b=[2,2,2;2,2,2;2,2,2];>> a>bans = 0 0 0 0 0 0 0 0 0>> a<3ans = 1 1 1 1 1 1 1 1 1
推薦閱讀:
※如何高效的提問
※利用MATLAB批量對文件重命名
※RTLAB非同步通信案例
※matlab中的intcon是什麼意思?
※MATLAB應用舉例
TAG:MATLAB |