1. 程式人生 > >matlab學習筆記(基礎)

matlab學習筆記(基礎)

開頭第一段

怎麼講,學matlab的當前目標是看懂別人的matlab程式碼,所以先跳過前面一堆命令列,看看matlab程式碼是個什麼。
這一塊內容也是我自己一邊看書一邊寫,所以內容會不斷增加的。寫的不好不要罵我,但可以隨便講我,哈哈。估計也沒太多人看,畢竟很基礎的東西。

MATLAB程式

說明

首先,一個用文字形式儲存的matlab程式碼有兩種形式:matlab指令碼和matlab函式,他們的副檔名都是.m。
指令碼和函式相對於命令列的優點我就不說了……因為詳細說我感覺很腦殘……

建立

其次,建立方法是–>File|New|script(指令碼)/Function(函式)。
建立好程式,那就要步入正題了,一個matlab程式應該怎麼寫,裡面一堆函式怎麼用,開始吧。

編寫

1、註釋

%註釋文字

註釋個是很簡單格式。主要需要注意的就是註釋的編碼風格,要適當的編寫註釋以方便以後的閱讀。

2、控制輸入輸出

matlab提供了很多輸入輸出命令。

命令 說明
disp(A) 顯示陣列A的內容
disp(‘text’) 顯示”內的文字串
format 控制螢幕輸出的顯示格式
fprintf 執行格式化的寫入到螢幕或檔案
x=input(‘text’) 顯示”內文字,等待使用者輸入,並將輸入值賦值給x
x=input(‘text’,’s’) 顯示”內文字,等待使用者輸入,並將輸入值作為字串賦值給x
k=menu(‘title’,’option1’,’option2’,…) 顯示選單,名稱為title,選項是option1,option2,…

3、邏輯與關係

一段程式基本結構,分支、迴圈,那要構造這些結構,首先要了解邏輯變數和關係運算符。

1關係運算符

什麼鬼

關係運算符 含義
< 小於
> 大於
== 等於
~= 不等於
PAY ATTENTION:這裡和其他語言不太一樣

2邏輯類和邏輯類建構函式

類名稱:logical
建構函式:logical(A),其中A是一個數值陣列
PS:A中任何非0數將會賦值為邏輯1

3邏輯運算子和函式

邏輯運算子

運算子 含義 說明
~ 這個不說了
& 與運算,兩個陣列與,得到新的邏輯陣列
| 或運算
&& 短路邏輯與 邏輯與,A&&B,則AB都真時為真,否則為假
|| 短路邏輯或 邏輯或,A||B,AB都假則為假,否則為真

邏輯函式

邏輯函式 含義
all(x) 返回標量
向量x中所有元素都非零,則標量為1,否則為0
all(A) 返回一個行向量
把A的每一列視為x,即同上
any(x) 返回標量
向量x中有任意非零元素,返回1,否則返回0
any(A) 返回一個行向量
把A的每一列視為x,即同上
find(A) 返回一個行向量
包含A中非零向量的索引
[u,v,w]=find(A) 返回u,v,w
u包含A中非零元素的行索引,v包含A中非零元素的列索引,w包含A中非零元素的值
finite(A) 返回維數與A相同的陣列
在A中元素為有限值的地方為1,否則為0
ischar(A) 返回標量
A是字元陣列,返回1,否則返回0
isempty(A) 返回標量
A是空矩陣,返回1,否則返回0
isinf(A) 返回維數與A相同的陣列
A中元素為inf的地方,返回1,否則返回0
isnan(A) 返回維數與A相同的陣列
A中元素為nan的地方,返回1,否則返回0(nan:not a number)
isnumeric(A) 返回標量
A是數值陣列,返回1,否則返回0
isreal(A) 返回標量
A中沒有任何元素具有虛部,返回1,否則返回0
logical(A) 返回維數與A相同的陣列
將A中元素轉化為邏輯值
xor(A,B) 返回維數與A和B相同的陣列
A或B中該位置非零且不同時為零,則該位置為1,否則為零

4、分支語句/條件語句

if-else

if 邏輯表示式
    語句
else
    語句
end

if-else連續呼叫

——elseif

if 邏輯1
    語句
elseif 邏輯2
    語句
else
    語句
end

switch語句

switch 表示式
    case 值1
        語句
    case 值2
        語句
        ...
    otherwise
        語句
end

5、迴圈

for迴圈

for 迴圈變數 = m:s:n  %m初值,s步長,n終止值
語句
end

PS:
matlab中迴圈標記變數儘量不要使用i,因為i在matlab中被作為虛數單位。

隱含迴圈

Example:

x = [0:5:100];
y = cos(x);

等價於

for k = 1:21
    x = (k-1)*5;
    y(k) = cos(x);
end

while迴圈

while 邏輯表示式
    語句
end

除錯

——debug選單
save&run
debug

名稱 功能
save and run (在哪兒呢……我沒找到……等把書看完了我試試,嗯,找到了)儲存並執行
step 步進
step in 進入被調函式步進
step out 執行剩餘函式部分,跳出到外部函式

畫圖

畫圖這應該也算一個重點了,因為影象是我們理解函式的重要途徑和手段。

符號函式的繪製

說實話什麼是符號函式我還不是很清楚。不過根據萬能的百度,符號函式一般來說是指:

數學上的Sgn 函式返回一個整型變數,指出引數的正負號。語法Sgn(number), number 引數是任何有效的數值表示式。返回值如果 number 大於0,則Sgn 返回1;等於0,返回0;小於0,則返回-1。number 引數的符號決定了Sgn 函式的返回值。

不過我從這本matlab的書上看到它上面的一些舉例程式碼來看,所處理的函式包括:餘弦函式、螺旋曲線方程還有極為複雜的一個指數二元二次的函式,不過都有個特點,就是有正有負。所以,我理解為只要能根據自變數得出正負號資訊的函式,就是符號函式。
可能不準確,以後發現不對了再來修改吧。但願有大神能看到給我點撥一下。

平面圖

  • ezplot(f)
    繪製f在[-2pi,2pi]內的函式
  • ezplot(f,[min,max])
    繪製f在制定區間內的函式
    • 隱函式,區間x=[min,max],y=[min,max]
    • 顯函式,區間【min,max】
    • (啥是顯函式,啥是隱函式?)
  • ezplot(f,[xmin,xmax,ymin,ymax])
    • 繪製f在制定區間內的函式

曲面網格/表面圖

  • 網格圖
    • ezmesh(f)
      • 繪製函式f(x,y)在[-2pi,2pi]內的的影象
    • ezmeshc(f,domain)
      • 繪製函式f(x,y)在domain區間內的影象
        domain為4*1或2*1的陣列,如[min,max],x=[min,max],y=[min,max]或[xmin,xmax,ymin,ymax]
    • ezmeshc(x,y,z)
      • 繪製引數方程x = x(s,t), y = y(s,t), z =z(s,t)在預設區域-2pi\<’s,t<2pi區間的影象
    • ezmeshc(x,y,z,[smin,smax,tmin,tmax])
      • 繪製引數方程x = x(s,t), y = y(s,t), z =z(s,t)在規定區域的影象
    • ezmeshc(…, n)
      • 指定繪圖的網格數n,預設為60
    • ezmeshc(…, ‘circ’)
      • 在指定區域的中心的圓盤上繪製圖形
  • 表面圖
    -aaa

先突兀的更新一下檢視mat資料的方法:

檢視mat資料

網上說直接load,然而load了之後並不能檢視資料啊……只是顯示了裡面包含的資料型別和規模,那怎麼具體表示裡面的資料呢?我還是很想看看的……經過一系列百度得到以下結果:

For example


>> x=importdata('Inverse11.mat')

x = 

          data: [13x2 double]
      textdata: {'x'  'Curve1'}
    colheaders: {'x'  'Curve1'}

>> x.data

ans =

   -5.1022   -0.6084
   -3.9924   -0.7133
   -3.1249   -0.9650
   -2.1057   -1.4895
    1.0342    3.0420
    1.0342    3.0420
    1.0342    3.0420
    1.0342    3.0420
    1.0342    3.0420
    1.9070    1.4895
    2.9682    1.0490
    3.9941    0.7762
    5.1033    0.6503

>> x.textdata

ans = 

    'x'    'Curve1`