標籤:

MATLAB筆記(1)基礎

MATLAB筆記(1)基礎

來自專欄 MATLAB的學習筆記66 人贊了文章

本文為學習Mooc課程「科學計算與Matlab語言」專題一的筆記。

#留作自己復慣用,也方便其他同學查找相關的內容。

#另外,想學習的同學可以免費報名參加Mooc官網所提供的相關課程。


一、基礎知識:

求解 x2-3x+1=0 的根;

採用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,這兩個相當於 [X][X]+1 ,即向下取整與向上取整。

而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 |