1. 程式人生 > >MATLAB教程(1) MATLAB 基礎知識

MATLAB教程(1) MATLAB 基礎知識

初學。去年看過一點點MATLAB,很久不用,遺忘驚人。為了加深自己的印象,紮實基礎,現將官網上的基礎教程做簡單的翻譯。

首先,以下從九個部分簡單介紹基礎入門知識。

第一部分:MATLAB顯示桌面的基本佈局

1.啟動MATLAB後,桌面會顯示預設佈局,主要有以下三個部分:

  • 當前資料夾
  • 命令列視窗
  • 工作空間

2.在MATLAB中一般需要建立變數和呼叫函式。

直接在命令列中輸入變數名以及其值即可(比如:a = 1),多個變數的建立同理,不再贅述。

需要注意的是,如果沒有定義輸出變數,MATLAB會使用一個名為ans的變數來儲存計算結果。

這裡寫圖片描述

3.如果語句以分號結束,表示MATLAB內部會執行這一運算,但是命令列不對計算結果進行輸出。

第二部分:矩陣和陣列

大多數的程式語言一次性只能對一個數進行操作,而MATLAB主要被用來對整個矩陣或者陣列進行操作。不管是什麼型別的資料,所有的額MATLAB變數都是陣列。矩陣是常用於線性代數的二維陣列。

1.陣列的建立

  • 在一個單行中建立一個擁有四個元素的陣列,其各個元素之間用逗號或者空格隔開。
    例如:
    a = [1 2 3 4]
    這種陣列叫做單行矩陣(行向量)。
  • 建立一個多行矩陣,其各個行之間用分號隔開。
    例如:
    b = [1,2;3,4;5,6]
  • 還可以用函式來建立矩陣。
    例如:建立一個5行1列每一個元素都是0的列向量。
    z = zero(5,1)
    這裡寫圖片描述

2.矩陣和陣列的操作

  • 在MATLAB中,允許用一個單一的運算或者函式對矩陣中所有的資料進行處理(操作)。

例如:
這裡寫圖片描述

  • 如果要對矩陣進行轉置,則使用單引號(‘)
    例如:a’
    這裡寫圖片描述

  • 可以通過執行標準矩陣乘法,通過*運算子來計算內積。

這是我自己的結果截圖……很明顯是不對滴~
這裡寫圖片描述

然後下面是官網爸爸給的執行結果。
這裡寫圖片描述

我們都知道,一個矩陣與它的逆矩陣相乘的結果的確應該等於單位矩陣。至於這裡為什麼不對,還希望各位大佬們能不吝賜教,大恩不言謝~

這裡要注意的是,p不是一個整數值矩陣,MATLAB儲存數字是以浮點型儲存的,真實值和它的浮點數在運算時有小小的不同,我們可以使用格式化命令,顯示更多的小數位數。

比如:
format long
p = a*inv(a)

可以使用format short來重置到較短格式的使用。

  • x = a.*a用來表示對矩陣的每一個元素做平方操作。
    若需要對每一個元素做立方運算,則用x = a.^3(如圖)

這裡寫圖片描述

  • 矩陣的擴充
    行方向上:A = [a,a]
    列方向上:A = [a; a]

    這裡寫圖片描述

  • 複數
    複數由實部和虛部組成,它的虛部是-1的平方根。
    即sqrt(-1) = 0.0000 + 1.0000i
    一般用i或者j來代表複數的虛部部分。

第三部分:陣列的索引

MATLAB中的每一個變數都是可以儲存多個值的陣列。如果想要使用陣列中的某一個值,則需要用到索引。

1.單個元素的索引

從一個數組中索引某個元素一般有兩種方法:
第一種比較常見:陣列名加要索引的元素所在的行和列,例如A(2,4) = 8。
第二種不太常用:陣列名加一個下標,該下標按列遍歷。A(14) = 8。【這裡不太好表達,上圖吧~】

這裡寫圖片描述

再多說一句,其實A(14)中的14表示按列數第14個元素!
利用下標索引元素這種方式叫做線性索引
注意:如果索引超出矩陣維度,MATLAB會報錯。

2.多個元素的索引
引用陣列的多個元素,使用冒號操作符m : n(m,n分別表示索引開始和結束的範圍)

例1索引第二列第1個元素到第3個元素。
例2索引第三行全部元素

這裡寫圖片描述

不難發現,索引行則將行數放在逗號前;索引列要將列數放在逗號後。

另外,冒號運算子也可以幫助建立一組等距的向量值,例如:
B = 0:10:100
—->B = 0 10 20 30 40 50 60 70 80 90 100
輸出一個從0到100步長為10的陣列。

第四部分:工作空間變數

工作區包含你建立的變數或者從資料檔案或其他程式匯入到MATLAB中的變數。例如,我現在建立兩個變數 :
A = magic(4)
B = rand(3,5,2)

  • 我們可以通過whos來看工作空間的內容。

這裡寫圖片描述

  • 工作區的變數在退出MATLAB後就不存在了。
    所以一般使用save myfile.mat命令來儲存工作區變數以便以後使用。
    儲存操作將當前工作資料夾中的工作區儲存在一個壓縮檔案中,該檔案的副檔名為.MAT,稱為MAT檔案。
  • 如果想要清空工作空間裡的所有變數,則需使用clear命令
  • 使用load myfile.mat命令將MAT檔案中的資料恢復到工作區

第五部分:文字和字元

  • 在處理文字時,將其中的字元序列用單引號括起來,可以將文字分配給變數。
    例如:myText = ‘Hello, world’;
  • 如果文字本身包括一個單引號,則在定義時使用兩個單引號。
    例如:otherText = ‘You”re right’

這裡寫圖片描述

同所有的MATLAB變數一樣,上述建立的兩個變數也都是陣列,他們的資料型別是字元型。注意:字元陣列也可以像數字陣列那樣用方括號括起來表示。

  • 要將數字轉換成字元,就要用到函式。例如num2str()或者int2str()。

    這裡寫圖片描述

第六部分:函式呼叫

MATLAB提供了大量函式來執行計算任務,函式相當於其他程式語言中的子程式或方法。
例如求最大值的函式,max()。

  • 將輸入引數用括號括起來,如果有多個引數,則將引數用逗號隔開。
    一般通過將函式值賦給某個變數這種方式來返回(輸出)函式值,如果有多個輸出引數,則需將它們用方括號括起來。
    例如:
    A = [1 3 5];
    [maxA,location] = max(A)

這裡寫圖片描述

  • 可以用單引號括住任何字元進行輸入。
    例如:
    disp(‘hello world’)
    ===>輸出 hello world

disp()用來顯示變數的內容,括號裡可以是字元,結構體,矩陣等等,類似於c語言的printf()。

  • clc函式被用來清空命令列。

第七部分:二、三維圖

  • 折線圖

    (1) 畫圖

    x = 0:pi/1000:2*pi;
    y = sin(x);
    plot(x,y)

這裡x就用到了前面說到的索引。x表示0到2*pi之間步長為pi/100的值。
二維圖如下:

這裡寫圖片描述

這裡多說一下步長,步長決定了橫軸取值的密集程度。下圖是將步長改為pi/10之後的影象。

這裡寫圖片描述

對比圖中標記處不難發現,步長增大,影象的精確度變低,所以這裡儘量保證步長足夠小,使得x可以取到足夠多的值

(2) 座標
我們可以對橫軸和縱軸分別命名,並對上述正弦影象加上標題。

這裡寫圖片描述

(3)plot(x, y, ‘r–’)
通過在影象函式中新增第三個輸入引數,可以用紅色虛線繪製與原來相同的變數。

這裡寫圖片描述

其中第三個引數規定了線條的顏色、樣式和標記的字元。(例如上例中的‘r–’表示紅色虛線。)標記是指對每一個數據點用引數所給的標記形式進行表示。(例如’g:o’表示用‘o’連成一條綠色的線輸出=.=我這個解釋沒誰了,講不清楚還是上圖吧…..)

這裡寫圖片描述

這樣的標記除了’o’,還有‘+’,‘*’等等。

這時候你會發現,我們開始為第一個圖定義的標題和標籤不再顯示在當前圖形視窗中了。這是因為在預設情況下,重新呼叫一個繪圖函式,MATLAB就會清除資料,重置軸和其他元素來準備新的繪圖。
若要將圖新增到現有圖形,使用hold命令即可。

這裡寫圖片描述

在使用hold off或close the window命令之前,所有的圖都會出現在當前的圖形視窗中。

  • 3D影象

    3D影象通常用有兩個引數的函式來定義一個曲面,z = f(x,y) 。
    對於z,首先使用meshgrid命令在函式定義域內建立若干(x,y)。

這裡寫圖片描述

這裡需要注意的是,在matlab中,.2代表0.2
(-2:.2:2)表示在-2到2的區間上以0.2的長度為間隔的向量;

當變數x是由向量、陣列或隔開的點組成(如x=0:0.1:1)時,則後面有x變數的方程要加點 (.),例如:y=x.*exp(-x.*2)
但是如果x是連續的變數,如syms x,則方程寫成y=x*exp(-x*2)。

  • Subplots
    你可以用subplot函式在同一視窗的不同區域顯示多個影象。
    subplots函式的前兩個輸入引數顯示當前視窗每行每列的影象數量,第三個輸入引數指定活動區域。例如,在圖形視窗建立四個區域來分別輸出影象。

這裡寫圖片描述

mesh()生成由X,Y和Z指定的網線面,由C指定的顏色的三維網格圖。

第八部分:程式和指令碼

  • 示例指令碼(從均勻分佈中生成隨機資料並計算平均值。繪製資料和平均值。)
    用edit命令來建立指令碼:
    edit plotrand
    這樣就打開了一個叫plotrand.m的空檔案,輸入產生隨機數向量的程式碼:
n = 50;
r = rand(n,1);
plot(r)

然後,新增程式碼在圖中繪製水平線:

m = mean(r);
hold on
plot([0,n],[m,m])
hold off
title('Mean of Random Uniform Data')

在寫程式碼過程中,可用(%)在程式碼之間添加註釋。
最後儲存指令碼,在命令列視窗輸入plotrand執行指令碼。

這裡寫圖片描述

  • 迴圈和條件語句
    在指令碼中,可以迴圈使用部分程式碼,並且通過使用(for,while,if,switch等關鍵字)來執行這部分程式碼。
    例如,建立一個叫calcmean.m的指令碼,利用for迴圈計算五個隨機樣本的平均數和總平均數。
nsamples = 5;
npoints = 50;

for k = 1:nsamples
    currentData = rand(npoints,1);
    sampleMean(k) = mean(currentData);
end
overallMean = mean(sampleMean)

現在,修改for迴圈,以便每次迭代時都可以檢視結果。在執行指令碼時,會先顯示中間結果,再計算總體均值。

for k = 1:nsamples
   iterationString = ['Iteration #',int2str(k)];
   disp(iterationString)
   currentData = rand(npoints,1);
   sampleMean(k) = mean(currentData)
end
overallMean = mean(sampleMean)

calcmean

在編輯器中,在calcmean.m的最後新增條件語句,使它根據不同的總體均值返回不同的資訊。

if overallMean < .49
   disp('Mean is less than expected')
elseif overallMean > .51
   disp('Mean is greater than expected')
else
   disp('Mean is within the expected range')
end
  • 指令碼位置
    MATLAB中,要執行指令碼,檔案必須位於當前資料夾或搜尋路徑中的資料夾中。
    預設情況下,MATLAB安裝程式建立的MATLAB資料夾位於搜尋路徑上。如果要在另一個資料夾中儲存和執行程式,需要將其新增到搜尋路徑中:在當前資料夾瀏覽器中選擇資料夾,右鍵單擊,然後選擇“新增到路徑”。

第九部分:幫助和文件

  • 使用doc命令在單獨的視窗中開啟函式文件。

    doc mean

  • 鍵入左圓括號後暫停,MATLAB在命令視窗中就會顯示函式提示(函式文件的語法部分)。

    mean(

  • 使用幫助命令後,在命令視窗中檢視函式的簡單用法概括。

    help mean

以上就是MATLAB的基礎入門知識,歡迎指正呦~

相關推薦

MATLAB教程1 MATLAB 基礎知識

初學。去年看過一點點MATLAB,很久不用,遺忘驚人。為了加深自己的印象,紮實基礎,現將官網上的基礎教程做簡單的翻譯。 首先,以下從九個部分簡單介紹基礎入門知識。 第一部分:MATLAB顯示桌面的基本佈局 1.啟動MATLAB後,桌面會顯示預設

MATLAB基礎教程2 語言基礎知識

本教程主要講到MATLAB語法、運算子、資料型別、陣列索引及處理等等語言基礎知識。大概可分四大部分: 第一部分:輸入命令 ans 當未明確定義輸出變數的名字時,MATLAB會自動建立一個變數ans來接收計算的結果。 clc MATLAB中的清屏命令

UI自動化1---HTML基礎知識

shortcut 直接 hold 拼搏 寂寞 方式 lis thread 尖括號 一、HTML基礎 1、HTML(超文本標記語言) html代碼實際上就是一套能夠被瀏覽器所識別的規則代碼,由一個個標簽組成。html代碼就是一大長串字符串,而這種字符串的格式正好能夠被瀏覽器所

演算法優化1基礎知識-凸集,單峰函式,擬凸函式與凸函式,函式凹凸性定義

本文筆記介紹我最近學習的演算法優化的基礎知識,有: 最優化問題的一般形式 約束問題的分類及形式 優化問題的分類 單峰函式(Unimodal function)的定義 擬凸函式(Quasiconvex function)的定義

AVFoundation1基礎知識

最近在玩一個類似小咖秀的專案,所以對AVFoundation有了一些的研究。這是AVFoundation的第一篇,準備先介紹一些AVFoundation中的基礎知識。 音訊取樣 大自然中的聲音,他的形態是一種波。我們通過取樣,將這種波量化成資料,記錄下來,如下圖所示: 如上

CAN匯流排學習筆記1- CAN基礎知識

依照瑞薩公司的《CAN入門書》的組織思路來學習CAN通訊的相關知識,並結合網上相關資料以及學習過程中的領悟整理成筆記。好記性不如爛筆頭,加油! 1 CAN的一些基本概念 1.1 什麼是CAN匯流排 CAN 是 Controller Area N

【H.264/AVC視訊編解碼技術詳解】七、 熵編碼演算法1基礎知識

《H.264/AVC視訊編解碼技術詳解》視訊教程已經在“CSDN學院”上線,視訊中詳述了H.264的背景、標準協議和實現,並通過一個實戰工程的形式對H.264的標準進行解析和實現,歡迎觀看! “紙上得來終覺淺,絕知此事要躬行”,只有自己按照標準文件以程式碼

ASP.NET Core on K8S深入學習1K8S基礎知識與叢集搭建

在上一個小系列文章《ASP.NET Core on K8S學習初探》中,通過在Windows上通過Docker for Windows搭建了一個單節點的K8S環境,並初步嘗試將ASP.NET Core WebAPI專案部署到了K8S,把玩了一下快速部署和例項伸縮。這個系列開始,會繼續學習K8S以及在Linux

Android音訊開發1基礎知識

Android音訊開發(1):基礎知識 導讀 人的說話頻率基本上為300Hz~3400Hz,但是人耳朵聽覺頻率基本上為20Hz~20000Hz。 對於人類的語音訊號而言,實際處理一般經過以下步驟: 人嘴說話——>聲電轉換——>抽樣(模數轉換)——>量化(將數字訊號用適當的數值表示)——&g

Flutter調研1-Flutter基礎知識

工作需要,因客戶端有部分頁面要使用flutter編寫,需要QA瞭解一下flutter相關知識,因此,做了flutter調研,包含安裝,基礎知識與demo編寫,第二部分是安裝與環境配置。 —— Flutter 是 Google推出並開源的移動應用開發框架,主打跨平臺、高保真、高效能 想要更全面的瞭解F

MATLAB 】逆離散餘弦變換idct基礎知識介紹

基礎知識介紹 逆離散餘弦變換從離散餘弦變換 (DCT) 係數中重建序列。idct 函式是 dct 函式的逆。 The DCT has four standard variants. For a tr

web前端學習JavaScript學習筆記部分1-- JavaScript基礎教程

1、JavaScript基礎教程 1.1、Javascript基礎-介紹、實現、輸出 1.1.1、JavaScript是網際網路上最流行的指令碼語言,這門語言可用於web和HTML,更可廣泛用於服務端、pc端、移動端。 1.1.2、JavaScript指令碼語言   JavaScript是一種輕量級的

Spring MVC學習記錄——網站基礎知識1

Spring MVC學習之——網路架構及演變過程 1.軟體的三大型別:單機型別、CS型別、BS型別。 單機型別:曾經的主要軟體型別,不聯網,實現電腦的基本功能,如打字、畫圖。 CS型別:單機之後為了統一管理軟體的資料,產生了客戶端和伺服器端,客戶端管理業務,伺服器端管理資料

MATLAB 】兩個序列的卷積和運算的MATLAB實現1

設矩形脈衝  是脈衝響應  的LTI系統的輸入,求輸出 y(n). 下面的指令碼中用到了一個自定義的函式,也就是兩個訊號相加的函式: function [y,n] = sigadd(x1,n1,

爬蟲教程1基礎入門

爬蟲介紹 網路爬蟲,英譯為 web crawler ,是一種自動化程式,現在我們很幸運,生處網際網路時代,有大量的資訊在網路上都可以查得到,但是有時我們需要網路上的資料,活著文章,圖片等等,但是,一個個地複製,貼上是不是太傻了,循著 “DRY” 的設計原則,我們希望用一

J2EE基礎教程1:簡介和windows下環境配置

(1)相關概念 我們以前在linux作業系統初級教程中,介紹過LAMP架構伺服器技術。現在,我們來介紹J2EE。 通過J2EE開發的應用程式屬於分散式多層應用程式,包括 (1)客戶層:客戶應用,web瀏覽器的動態網頁(含applet) (2)web層:

MATLAB程式設計1,迴圈和選擇

1.MATLAB中的迴圈,一共有兩種,for,while;似乎每種語言中都會有這兩種迴圈,用法大體相似,簡單說其用法for迴圈 例:for i=1:1:10              statement;        end 就是需要注意的是,一個for後面一定要跟上一個end; while迴圈 例:whi

matlab提升1:用matlab求影象的均值和方差

一、求均值 % 求一副灰度影象的均值 close all; clear; clc; i=imread('d:/lena.jpg'); %載入真彩色影象 i=rgb2gray(i); %轉換為灰度圖 i=double(i); %將uint8型轉換為doub

GuozhongCrawler系列教程 1 三大PageDownloader

特點 string null 瀏覽器兼容 ror down odi 系列 lan GuozhongCrawler QQ群 202568714 教程源代碼下載地址:http://pan.baidu.com/s/1pJBmerL GuozhongCrawl

圖論講解1——圖基礎

同學 根據 tdi sin images 鄰接表 c++ algo ack 前面一直在嗶嗶數論,是不是感覺很煩的慌了?? ╮(╯▽╰)╭唉,你不煩得慌我都煩得慌了! 既然這樣,那我們就改個話題,今天我們就講講圖論。 有的同學就要問圖又是個什麽鬼? 難道是這個嗎?