數值類型 numeric
默認為double類型 也可以使用類型轉換將其轉換為其他類型
n=3; class(n) %得到double類型 n=int8(30); class(n) %得到int8 類型

字符類型(char)
%% s1='h' %char類型 顯示占2個字節 a=uint8(s1) %強制將s1的char類型轉換為numric類型 顯示占1個字節 顯示104 ascii碼表 whos %% s2='H' %同上 b=uint16(s2) % 同上但是占用2個字節 16位無符號整數 顯示72 大寫字母和小寫字母 相差32 (10進制) whos
字符串類型 string
s1='Example'; s2='String'; whos s3=[s1 s2] % 顯示 ExampleString 兩個字符串串聯在一起 s4=[s1;s2]; %加; 組成行列式 失敗 兩個字符串 的維度不同 前者7列 后者6列

s5=[s1;s1] %兩個字符串長度要一致 顯示 s5 = Example Example
拓展:
A1=['str1' 'str2']; A2=['str3' 'str4']; A3=['str5' 'str6']; C=vertcat(A1,A2,A3) 輸出 C = str1str2 str3str4 str5str6
等價于C=[A1;A2;A3]
邏輯操作與賦值
str='aardvark'; 'a'==str %得到11000100 遍歷str中的每個元素和a進行比較 如果%相同則返回1 不同返回0 str(str=='a')='Z' %先執行括號內語句 得到11000100 邏輯運算結果, %再將結果作為索引位置的開關 當該索引位置的值為1時替換為Z 如果為0 %則不替換 所以此時輸出 ZZrdvZrk
字符串比較
strcmp 函數
s1='exmaple'; s2='string'; strcmp(s1,s2) %比較s1和s2 得到0 strcmp(s1,s1) %比較s1和s1 得到1
比較函數還有eq ne regexp regexpi sort strcmpi strfind strncmp strncmpi
練習:
s1='i like the letter E' s2=s1(length(s1):-1:1) %翻轉字符串 s3=s1(size(s1,2):-1:1) %翻轉字符串 s4=reverse(s1) %翻轉字符串 輸出 s4 = 'E rettel eht ekil i'
t="Hello, world"; whos t % 為何是160 q="Something ""quoted"" and something else." % 顯示雙引號 需要再用引號修飾 f=71; c=(f-32)/1.8; temptext="temperature is"+c+" °C" % 用+ 連接兩個字符串 Name Size Bytes Class Attributes t 1x1 160 string q = "Something "quoted" and something else." temptext = "temperature is21.6667 °C"
%字符串數組
A=["a","bb","ccc";"dddd","eeeee","ffffff"] strlength(A) A = 2x3 string 數組 "a" "bb" "ccc" "dddd" "eeeee" "ffffff" ans = 1 2 3 4 5 6
結構體類型 structure
一種存儲異構數據的方法 結構包含成為字段的數組
1.創建結構體
student.name='john doe'; student.id='jdo2@sfu.ca'; student.number=301073268; student.grade=[100,75,73;... 95,91,85.5;... 100,98,72]; student 輸出為 student = 包含以下字段的 struct: name: 'john doe' id: 'jdo2@sfu.ca' number: 301073268 grade: [3x3 double]
向結構中添加信息 例如加入另一名同學的記錄
student(2).name='ann lane'; %默認結構體中第一個記錄的索引為1 所以此處再添加索引為2 student(2).id='aln4@sfu.ca'; student(2).number=301073269; student(2).grade=[95 100 90;... 95,82 97;... 100,85 100]; student %顯示當前結構體中所有的記錄 student(1).grade(2,3)=30; %修改行列式中某個位置的值 student %結果如下 第2行第3列的元素已經修改成功

顯示結構體中的某個值
student(1).grade(7) %以列為索引方向 student(2).name

rmfield 舉例
fieldnames(student) ans = 4x1 cell 數組 {'name' } {'id' } {'number'} {'grade' } >> student student = 包含以下字段的 1x2 struct 數組: name id number grade >> rmfield(student,'id') %只是存儲在臨時變量ans中 而不改變原結構體中的數據 ans = 包含以下字段的 1x2 struct 數組: name number grade
嵌套結構

結構體中包含結構體
A=struct('data',[3 4 7;8 9 1],'nest',struct('testnum','test1','xdata',[4 2 8],'ydata',[7 1 6]));
A = %同A(1) 包含以下字段的 struct: data: [2x3 double] nest: [1x1 struct] >> A.nest %同A(1).nest ans = 包含以下字段的 struct: testnum: 'test1' xdata: [4 2 8] ydata: [7 1 6]
元胞數組 cell
用于存儲異構數據 ;類似矩陣 但每個條目包含不同類型的數據;通過將索引括在括號內() 中可以引用元胞集,使用花括號 { }進行索引來訪問元胞的內容 ;個人理解 可以包含任何類型的元素 類似二維數組

A(1,1)={'This is the firest cell'}; A(1,2)={[5+j*6 4+j*5]}; A(2,1)={[1 2 3;4 5 6;7 8 9]}; A(2,2)={["Tim","Chris"]}; >> A A = 2x2 cell 數組 {'This is the firest cell'} {[5.0000 + 6.0000i 4.0000 + 5.0000i]} {3x3 double } {["Tim" "Chris" ]}
1.創建對象和訪問
{ } 用于創建 或者在前 或者在后
A(1,1)={[1 4 3;0 5 8;7 2 9]}; %A{1,1}=[1 4 3;0 5 8;7 2 9] 也可
A(1,2)={'Anne smith'}; %A{1,2}='Anne smith';
A(2,1)={3+7i}; %A{2,1}=3+7i
A(2,2)={-pi:pi:pi}; %A{2,2}=-pi:pi:pi
%以下為輸出 A{1,1}(2) ans = 0 A{1,1}(2,2) ans = 5
創建空的=0*0元胞數組
B={ } 此時B為空的元胞數組
原理:單元格數組中的每個條目都持有一個指向數據結構的指針,同一單元陣列的不同單元可以指向不同類型的數據結構

訪問單元陣列
>>A(1,1) % 查看指針 本身指向的內容類型 注意用( ) ans = 1x1 cell 數組 {3x3 double} >> A{1,1}(3) %查看指針指向內存單元的實際內容 用{ } ans = 7 >> A{1,1}(3,2) ans = 2
A = 2x2 cell 數組 {'This is the firest cell'} {[5.0000 + 6.0000i 4.0000 + 5.0000i]} {3x3 double } {["Tim" "Chris" ]} >> A(1,1) % 顯示指針本身內容 指向內容的數據烈性 ( ) ans = 1x1 cell 數組 {'This is the firest cell'} >> A{1,1} %顯示指針指向的內容 具體數據 { } ans = 'This is the firest cell'
元胞數組函數


>> a=magic(3) b=num2cell(a) a = 8 1 6 3 5 7 4 9 2 b = 3x3 cell 數組 {[8]} {[1]} {[6]} {[3]} {[5]} {[7]} {[4]} {[9]} {[2]} %此時 b變為了元胞數組
3x1 cell 數組
{[8 1 6]}
{[3 5 7]}
{[4 9 2]}
多維數組

array concatenation

cat(1,A,B) 第一個參數表示三維中的第幾維 1為row 2為column 3為layer
A=[1 2;3 4] B=[5 6;7 8] C=cat(1,A,B) >>C = 1 2 3 4 5 6 7 8 >> C=cat(2,A,B) C = 1 2 5 6 3 4 7 8 >> C=cat(3,A,B) %layer 為3 C(:,:,1) = % 1代表第一layer 1 2 3 4 C(:,:,2) = %代表第二layer 5 6 7 8
reshape() 將原來的矩陣行數和列數 改變 變成一個新的矩陣 r1*c1=r2*c2 行數1*列數1=行數2*列數2
returns a new array with assigned rows and columns
A={'james bond',[1 2;3 4;5 6];pi,magic(5)};
C=reshape(A,1,4);
>> A
A =
2x2 cell 數組
{'james bond'} {3x2 double}
{[ 3.1416]} {5x5 double}
>> A{2,2}
ans =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> C
C =
1x4 cell 數組
{'james bond'} {[3.1416]} {3x2 double} {5x5 double}
1 A=[1:3;4:6]; 2 3 >> A 4 A = 5 6 1 2 3 7 4 5 6 8 >> whos A 9 Name Size Bytes Class Attributes 10 11 A 2x3 48 double 12 >> C=reshape(A,3,2) 13 C = 14 1 5 15 4 3 16 2 6 17 >>

文件讀寫 FILE ACCESSING 讀寫matlab格式的數據


a=magic(4); save testdata.mat; >> clear >> a 函數或變量 'a' 無法識別。 >> load('testdata.mat') >> a a = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 >>
注意 1. 不加 -ascii碼后,生成的mat文件打開會出現亂碼
2. 在save文件時有-ascii時,load文件 也要加上相應的參數
讀寫excel表格 數據
xlsread( ) xlswrite()
score=xlsread('81score.xlsx'); score=xlsread('81score.xlsx','B2:D4'); %僅僅讀取其中的數值 而不讀取文字

注意表格文件 所存放的目錄 matlab能夠搜索的路徑下
xlswrite() 計算平均值 并寫入xls表格中
score=xlsread('s.xls');%將表格中數據保存到score變量中 M=mean(score')' %注意‘’ 的位置? 計算每人的平均值 xlswrite('s.xls',M,1,'E2:E4'); % 文件名 M為三人平均值數值 1為%sheet1 表格 E2:E4為單元格位置 % filename variable sheet location xlswrite('s.xls',{'平均值'},1,'E1'); %將字段名填寫到E1位置

讀取數值和字段名稱部分
[score header]=xlsread('s.xls');
參數1存儲numeric 數值類型的數據 header存儲string 數據
>> [score header]=xlsread('s.xls') score = 110.0000 25.0000 49.0000 61.3333 100.0000 68.0000 58.0000 75.3333 120.0000 54.0000 27.0000 67.0000 header = 4×5 cell 數組 '' '數學' '語文' '英語' '平均' '張三' '' '' '' '' '李四' '' '' '' '' '王二' '' '' '' ''
同時也能將兩種類型的數據 存儲到xls文件當中去 xlswrite() 介紹略
低級文件的輸入和輸出
在字節或字符級別讀取和寫入文件
文件ID為fid fileid 利用內建函數確定
文件中的位置由可移動的指針制定

fid=fopen('[filename]','[permission]') 前者為文件名稱 可包括路徑 后者為權限 可加 可寫 可執行
status=fclose(fid); 關閉打開的文件 參考c語言中的文件
浙公網安備 33010602011771號