第3章-MATLAB程序設計20140822_第1頁
第3章-MATLAB程序設計20140822_第2頁
第3章-MATLAB程序設計20140822_第3頁
第3章-MATLAB程序設計20140822_第4頁
第3章-MATLAB程序設計20140822_第5頁
已閱讀5頁,還剩81頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

第三講 MATLAB程序設計M文件數(shù)據(jù)的輸入輸出選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)函數(shù)文件全局變量和局部變量類和對象文件操作3.1

M文件3.1.1

M文件的建立與編輯建立新的M文件菜單操作:MATLAB命令窗口的File菜單→

New菜單項→M-file命令。命令操作:在MATLAB命令窗口輸入命令

edit。命令按鈕操作:單擊MATLAB命令窗口工具欄上的“新建”命令按鈕。編輯已有的M文件3.1.2

M文件的分類分類:獨立的m文件—稱命令文件(script

File),主程序命令文件實際上是一串指令的集合,與在命令窗口逐行執(zhí)行文件中的所有指令,其結(jié)果是一樣的。沒有輸入輸出參數(shù)。可調(diào)用m文件—稱函數(shù)文件(Function

File),子程序第一行包含function,需要輸入變量,返回輸出變量主要區(qū)別:命令文件的變量在文件執(zhí)行完后保存在內(nèi)存中,而函數(shù)文件內(nèi)定義的變量僅在函數(shù)文件內(nèi)部起作用,執(zhí)行完函數(shù)文件后,這些內(nèi)部變量將被清除。例3.1建立一個命令文件將變量a,b的值互換,然后運行該命令文件。首先建立命令文件并以文件名exch.m存盤:

clear

all;a=1:10;

b=[11,12,13,14;15,16,17,18];c=a;a=b;b=c;ab然后在MATLAB的命令窗口中輸入exch,將會執(zhí)行該命令文件。>>exch例3.2

建立一個函數(shù)文件將變量a,b的值互換,然后在命令窗口調(diào)用該函數(shù)文件。首先建立函數(shù)文件

fexch.m:function

[a,b]

=

fexch(a,b)c=a;

a=b;

b=c;然后在MATLAB的命令窗口調(diào)用該函數(shù)文件:>>clear

all;>>x=1:10;

y=[11,12,13,14;15,16,17,18];>>[x,y]=fexch(x,y)function

r

=

rank(A,tol)%RANK

Matrix

rank.%

RANK(A)

provides

an

estimate

of

the

number

of

linearly% independent

rows

or

columns

of

a

matrix

A.%

RANK(A,tol)

is

the

number

of

singular

values

of

A%

that

are

larger

than

tol.%

RANK(A)

uses

the

default

tol

=max(size(A))*

eps(norm(A)).%%%Class

support

for

input

A:float:

double,

single% Copyright

1984-2004

The

MathWorks,

Inc.%

$Revision:

$

$Date:

2004/08/20

19:50:33

$s

=

svd(A);if

nargin==1tol

=

max(size(A)")

*

eps(max(s));endr

=

sum(s

>

tol);Input允許用戶在命令窗口用鍵盤輸入3.2

數(shù)據(jù)的輸入輸出input函數(shù)調(diào)用格式為:A=input(提示信息,選項);其中提示信息為一個字符串,用于提示用戶輸入什么樣的數(shù)據(jù)。A=input("A=

")

如果在input函數(shù)調(diào)用時采用"s"選項,則允許用戶輸入一個字符串。例如,想輸入一個人的姓名,

可采用命令:xm

=input

("What""s

your

name?",

"s")3.2.2 disp函數(shù)調(diào)用格式為:disp(輸出項)其中輸出項既可以為字符串,也可以為矩陣。注意:用disp函數(shù)顯示矩陣時將不顯示矩陣的名字,而且其格式更緊密,且不留任何沒有意義的空行。b

=disp("

JanFebMar")234

disp(rand(5,3))567890JanFebMar>>

disp(b)0.95010.76210.61542340.23110.45650.79195670.60680.01850.92188900.48600.82140.73820.89130.44470.1763程序如下:

a=input("a=?");b=input("b=?");c=input("c=?");d=b*b-4*a*c;x=[(-b+sqrt(d))/(2*a),

(-b-sqrt(d))/(2*a)]disp(["x1=",num2str(x(1)),",x2=",num2str例3.3 求一元二次方程ax2

+bx+c=0的根。其調(diào)用格式為:

pause(延遲秒數(shù))如果省略延遲時間,直接使用pause,則將暫停程序,直到用戶按任一鍵后程序繼續(xù)執(zhí)行。

pause命令在程序調(diào)試以及需要看中間結(jié)果時特別有用。若要強行中止程序的運行可使用Ctrl+C命令。3.2.3

pause函數(shù)3.3

選擇結(jié)構(gòu)3.3.1

if語句在MATLAB中,if語句有3種格式。

1.單分支if語句語句格式為:if

條件語句組

end當條件成立時,則執(zhí)行語句組,執(zhí)行完之后繼續(xù)執(zhí)行if語句的后繼語句,若條件不成立,則直接執(zhí)行if語句的后繼語句。2.雙分支if語句語句格式為:if 條件語句組1else語句組2end當條件成立時,執(zhí)行語句組1,否則執(zhí)行語句組2,語句組1或語句組2執(zhí)行后,再執(zhí)行if語句的后繼語句。例3.4計算分段函數(shù)值。程序如下:x=input("請輸入x的值:");

if

x==10y=cos(x+1)+sqrt(x*x+1);elsey=x*sqrt(x+sqrt(x));endy例3.5輸入數(shù)n,判斷其奇偶性程序如下:n

=

input("n="),if

rem(n,2)==0A

=

‘even’elseA

=

‘odd’end3.多分支if語句語句格式為:if

條件1語句組1elseif

條件2語句組2……elseif

條件m語句組melse語句組m+1end例3.6輸入一個字符,若為大寫字母,則輸出其后繼字符,若為小寫字母,則輸出其前導字符,若為數(shù)字字符則輸出其對應的數(shù)值,若為其他字符則原樣輸出。c=input("請輸入一個字符","s");if

c>="A"&

c<="Z"disp(setstr(abs(c)+1));elseif

c>="a"&

c<="z"disp(setstr(abs(c)-1));elseif

c>="0"&

c<="9"disp(abs(c)-abs("0"));elsedisp(c);endif

a==bif

isequal(a,b)isemptyallany3.3.2

switch語句其語句格式為:switch

表達式case

表達式1語句組1case

表達式2語句組2……case

表達式m語句組motherwise語句組m+1end例3.7判斷輸入數(shù)n的奇偶性n

=

input("n=")switch

mod(n,2)case

1A

=

‘odd’case

0A

=

‘even’otherwiseA

=

‘null’endprice=input("請輸入商品價格");switch

fix(price/100)case

{0,1}rate=0;case

{2,3,4}rate=3/100;case

num2cell(5:9)rate=5/100;case

num2cell(10:24)rate=8/100;case

num2cell(25:49)rate=10/100;otherwiserate=14/100;endprice=price*(1-rate)例3.8 某商場

對顧客所購買的商品實行打折銷售,已知打折標準,求所售商品的實際銷售價格。3.3.3

try語句

(錯誤控制語句)語句格式為:

try語句組1catch語句組2endtry語句先試探性執(zhí)行語句組1,如果語句組1在執(zhí)行過程中出現(xiàn)錯誤,則將錯誤信息賦給保留的lasterr變量,并轉(zhuǎn)去執(zhí)行語句組2。這種試探性執(zhí)行語句是其他高級語言所沒有的。例3.9矩陣乘法運算要求兩矩陣的維數(shù)相容,否則會出錯。先求兩矩陣的乘積,若出錯,則自動轉(zhuǎn)去求兩矩陣的點乘。A=[1,2,3;4,5,6];

B=[7,8,9;10,11,12];tryC=A*B;catchC=A.*B;endClasterr

%顯示出錯原因3.4

循環(huán)結(jié)構(gòu)3.4.1

for語句語句格式為:for循環(huán)變量=初值:增量:終值循環(huán)體語句end例3.10已知y的表達式,當n=100時,求y的值。y=0;

n=100;for

i=1:ny=y+1/i^2;endy在實際MATLAB編程中,為提高程序的執(zhí)行速度,常用向量運算來代替循環(huán)操作:n=100;

i=1:n;f=1./i.^2;y=sum(f)例3.11

求定積分。a=0;b=3*pi;

n=1000;

h=(b-a)/n;x=

a:h:b;

f=exp(-0.5*x).*sin(x+pi/6);for

i=1:ns(i)=

(f(i)+f(i+1))*h/2;ends=sum(s)事實上,MATLAB提供了有關數(shù)值積分的標準函數(shù),實際應用中可直接調(diào)用這些函數(shù)求數(shù)值積分。for語句更一般的格式:for

循環(huán)變量=矩陣表達式循環(huán)體語句end執(zhí)行過程是依次將矩陣的各列元素賦給循環(huán)變量,然后執(zhí)行循環(huán)體語句,直至各列元素處理完畢。實際上,“初值:增量:終值”是一個僅為一行的矩陣(行向量),因而列向量是單個數(shù)據(jù)。例3.12已知5個學生4門功課的成績,求每名學生的總成績。s=0;a=[65,

76,

56,

78;

98,

83,

74,

85;

76,

67,

78,

79;98,

58,

42,

73;

67,

89,

76,

87];for

k=as=s+k;enddisp(s");65765678988374857667787998584273678976873.4.2

while語句while語句的一般格式為:

while

(條件)循環(huán)體語句end其執(zhí)行過程為:若條件成立,則執(zhí)行循環(huán)體語句,執(zhí)行后再判斷條件是否成立,如果不成立則跳出循環(huán)例3.13根據(jù)矩陣指數(shù)的冪級數(shù)展開式求矩陣指數(shù)。X=input("X=");E=zeros(size(X));F=eye(size(X));n=1;while

norm(F,1)>0E=E+F;F=F*X/n;n=n+1;endEexpm(X)

%調(diào)用MATLAB矩陣指數(shù)函數(shù)求矩陣指數(shù)

與循環(huán)結(jié)構(gòu)相關的還有一個break語句,當在循環(huán)體內(nèi)執(zhí)行到該語句時,程序?qū)⑻鲅h(huán)。該語句一般與if語句配合使用。

在多重循環(huán)中,break只能使程序跳出包含它的最內(nèi)層的那個循環(huán)例3.14用while語句實現(xiàn)例3.10。y=0;

i=1;while

1f=1/i/i;y=y+f;

if

i=

=100break;endi=i+1;end3.4.3

循環(huán)的嵌套

如果一個循環(huán)結(jié)構(gòu)的循環(huán)體又包括一個循環(huán)結(jié)構(gòu),就稱為循環(huán)的嵌套,或稱為多重循環(huán)結(jié)構(gòu)??梢?/p>

按照嵌套層數(shù),分別叫做二重循環(huán)、三重循環(huán)等。處于內(nèi)部的循環(huán)叫作內(nèi)循環(huán),處于外部的循環(huán)叫

作外循環(huán)。

在設計多重循環(huán)時,要特別注意內(nèi)、外循環(huán)之間的關系,以及各語句放置的位置,不要搞錯。例3.15列出從2到m的全部素數(shù)。m=input("m=");p=2:m;for

i=2:sqrt(m)%依次列出最大除數(shù)n

=

find(rem(p,i)==0&

p~=i);%找到能被 %

i整除,而不等于i的數(shù)的序號p(n)=[];%去掉該數(shù)endp

%顯示結(jié)果3.5

函數(shù)文件3.5.1

函數(shù)文件的基本結(jié)構(gòu)函數(shù)文件由function語句引導,其基本結(jié)構(gòu)為:function[輸出形參表]=函數(shù)名(輸入形參表注釋說明部分函數(shù)體語句說明:關于函數(shù)文件名:函數(shù)文件名與函數(shù)名也可以不相同。當兩者不同時,MATLAB將忽略函數(shù)名而確認函數(shù)文件名,因此調(diào)用時使用函數(shù)文件名。關于注釋說明部分。注釋說明包括三部分內(nèi)容:①緊隨函數(shù)文件引導行之后以%開頭的第一注釋行。②第一注釋行及之后連續(xù)的注釋行。③與在線幫助文本相隔一空行的注釋行。關于return語句。執(zhí)行到該語句就結(jié)束函數(shù)的執(zhí)行,程序流程轉(zhuǎn)至調(diào)用該函數(shù)的位置。通常,在函數(shù)文件中也可不使用return語句,這時在被調(diào)函數(shù)執(zhí)行完成后自動返回。例3.16

編寫函數(shù)文件求半徑為r的圓的面積和周長。function

[s,p]

=

fcircle(r)%CIRCLE

calculate

the

area

and

perimeter

of

a

circle

ofradii

r%r

圓半徑%s

圓面積%p

圓周長%2001年7月30日編

s=pi*r*r;p=2*pi*r;將以上函數(shù)文件以文件名fcircle.m存入c:\matlab6p5\wor然后在MATLAB命令窗口調(diào)用該函數(shù):>>[s,p]=fcircle(10)3.5.2

函數(shù)調(diào)用函數(shù)調(diào)用的一般格式是:[輸出實參表]=函數(shù)名(輸入實參表)例3.17利用函數(shù)文件,實現(xiàn)直角坐標(x,y)與極坐標(ρ,θ)之的轉(zhuǎn)換。函數(shù)文件tran.mfunction

[rho,theta]

=

tran(x,y)rho

=

sqrt(x*x+y*y);theta

=

atan(y/x);調(diào)用tran.m的命令文件main1.m:x=input("Please

input

x=:");y=input("Please

input

y=:");[rho,theta]=tran(x,y);rho,

theta例3.18利用函數(shù)的遞歸調(diào)用,求n!。遞歸調(diào)用函數(shù)文件factor.m:function

f

=

factor(n)if

n<=1f

=

1;elsef

=

factor(n-1)*n;end在命令文件main2.m中調(diào)用函數(shù)文件factor.m求s=1!+2!+3!+4!+5!。3.5.3

函數(shù)所傳遞參數(shù)的可調(diào)性在調(diào)用函數(shù)時,MATLAB用兩個永久變量nargin和nargout分別記錄調(diào)用該函數(shù)時的輸入實參和輸出實參的個數(shù)。只要在函數(shù)文件中包含這兩個變量,就可以準確地知道該函數(shù)文件被調(diào)用時的輸入輸出參數(shù)個數(shù),從而決定函數(shù)如何進行處理。例3.19 nargin用法示例。函數(shù)文件examp.m:function

fout

=

examp

(a,b,c)if

nargin

==

1fout

=

a;elseif

nargin

==

2fout

=

a+b;elseif

nargin

==

3fout=(a*b*c)/2;end命令文件mydemo.m:%x

=

[1:3];y

=

[1;2;3];out1

=

examp(x)out2

=

examp(x,y")out3

=

examp(x,y,3)全局變量可以被所有定義該變量為全局變量的函數(shù)使用。如果想在命令行中使用全局變量,也要定義該變量為全局變量.在函數(shù)文件里,全局變量的定義語句應放在變量使用之前,為了便于了解所有的全局變量,一般把全局變量的定義語句放在文件的前部。一般來說,全局變量的取名應能反映變量的具體意思,一般用大寫字母表示,以防被誤用。3.6

全局變量和局部變量global

ALPHA

BETAf=ALPHA*x+BETA*y;全局變量用命令global定義。函數(shù)文件的內(nèi)部變量是局部的,與其他函數(shù)文件及MATLAB工作空間相互隔離。例3.20全局變量應用示例。先建立函數(shù)文件weight_add.m,該函數(shù)將輸入的參數(shù)加權(quán)相加。function

f=weight_add(x,y)在命令窗口中輸入:global

ALPHA

BETAALPHA=1;

BETA=2;s=weight_add(1,2)數(shù)值數(shù)據(jù)(Numeric):雙精度型(double)、單精度數(shù)、帶符號整數(shù)(int8)和無符號整數(shù)(uint8)。字符數(shù)據(jù)(char)。結(jié)構(gòu)型(structure)和細胞型(cell)。稀疏型(sparse)。3.7

數(shù)據(jù)類型結(jié)構(gòu)和單元結(jié)構(gòu)數(shù)據(jù)MATLAB通過使用結(jié)構(gòu)(structure)數(shù)據(jù)類型把一組不同類型的數(shù)據(jù)同時又是在邏輯上相關的數(shù)據(jù)組成一個有機的整體,以便于管理和引用。結(jié)構(gòu)矩陣的建立與引用結(jié)構(gòu)成員的修改用賦值語句定義結(jié)構(gòu)時,只要給出結(jié)構(gòu)的屬性賦值,Matlab就會自動把該屬性增加到結(jié)構(gòu)中,賦值時,結(jié)構(gòu)名和屬性名用英文句號分開。例如,下面三條語句定義一個1x1的結(jié)構(gòu)數(shù)組,結(jié)構(gòu)名為student,有三個屬性:name,num,test。該結(jié)構(gòu)數(shù)組織有一個元素,在命令窗口鍵入結(jié)構(gòu)名student,將顯示該元素所有屬性的屬性值的特性]。1.結(jié)構(gòu)矩陣的建立與引用

(1)用賦值語句定義>>

=

"Leslie";>>

student.num

=

123456;>>

student.test=[79

75

73;180

178

177.5;22

210

20>>

studentstudent

=name:

"Leslie"num:

123456test:

[3x3

double]再鍵入下面三行可給該結(jié)構(gòu)數(shù)組增加一個元素。當結(jié)構(gòu)數(shù)組的元素超過一個時,matlab將不再顯示屬性的值,只顯示數(shù)組名、屬性名和維數(shù)大小。iieldnames函數(shù)可用來察看結(jié)構(gòu)的所有屬性名,>>

student(2).name

=

"David";>>

student(2).num

=

123532;>>

student(2).test=[68

70

68;118

118

119;172

170

123

543

433];>>

studentstudent

=1x2

struct

array

with

fields:namenumtest>>

fieldnames(student)ans

="name""num""test"屬性列表為結(jié)構(gòu)的所有屬性構(gòu)成的字符數(shù)組或細胞數(shù)組。利用這種調(diào)用格式時,所有屬性值都為空矩陣。也可以在函數(shù)struct中輸入屬性值,調(diào)用格式為:(2)用函數(shù)struct定義,調(diào)用格式:結(jié)構(gòu)數(shù)組名=struct(‘屬性1’,‘屬性值1’‘屬性2’,‘屬性值2’,…)>>

s

=

…struct("type",{"big","little"},"color",結(jié)構(gòu)數(shù)組一旦形成,就可用相應的函數(shù)取出數(shù)組中的某個元素并修改該元素的某個屬性的值。2.結(jié)構(gòu)成員的修改>>

str

=

student(2).name>>

n

=

student(2).test(4,2)>>

student(2).test(4,2)

=

0>>

for

i=1

:

length

(student)>>

disp(student(i).name)>>

end刪除屬性的命令:>>

student2

=

rmfield(student,"test")在matlab里,由于有細胞數(shù)組這個數(shù)據(jù)類型,]才能把不同類型、不同維數(shù)的數(shù)組組成一個數(shù)組。細胞數(shù)據(jù)細胞(Cell)數(shù)據(jù)的概念與結(jié)構(gòu)有些類似,也是把不同屬性的數(shù)據(jù)放在一個變量中。所

不同的是,結(jié)構(gòu)變量的各個元素下有成員,

每個成員都有自己的名字,對成員的引用是:結(jié)構(gòu)變量名.成員名。而細胞矩陣的各個元素就是不同類型的數(shù)據(jù),用帶有大括號下標的

形式引用單元矩陣元素。在matlab里,由于有細胞數(shù)組這個數(shù)據(jù)類型,]才能把不同類型、不同維數(shù)的數(shù)組組成一個數(shù)組。>>

A=[1

2

3

4;2

3

4

5;

3

4

5

6]A

=123423453456sum(sum(A))}>>

C={A

sum(A)C

=[3x4

double][1x4

double][42]1.細胞矩陣的生成和引用

(1)用賦值語句定義>>

clear

A;>>

A(1,1)={[1

4

3;0

5

8;7

2

9]};>>

A(1,2)={"Leslie"};>>

A(2,1)={3+7i};>>

A(2,2)={0:pi/10:pi};>>

clear

A;>>

A{1,1}=[1

4

3;

0

5

8;7

2

9];>>

A{1,2}="Leslie";>>

A{2,1}=3+7i;>>

A{2,2}=0

:

pi/10

:

pi;[]是矩陣的標志,{}是細胞數(shù)組的標志。二者不同是:大括號可以嵌套,細胞數(shù)組的元素可以是細胞數(shù)組,而中擴號不可以。C={[1

2],[3

4];[5

6],[7

8]}生成一個2X2的細胞數(shù)組,數(shù)組每個元素都為1X2的數(shù)值矩陣。(2)用cell預定義數(shù)組,然后用賦值語句給每個元素賦值>>B=cell(5,3)

%定義一個5x3的細胞數(shù)組>>

B(1,3)={1:3}celldisp:顯示細胞數(shù)組的每個元素的值。cellplot:畫出細胞數(shù)組的每個元素的結(jié)構(gòu)圖。綜合使用大括號和小括號可以取出細胞數(shù)組的某個元素或某些元素的值,也可取出某個元素值的一部分。>>c=A{1,2}>>

d=A{1,1}(2,2)>>

c=A(2:2,1:2)3.8類和對象

類的概念是結(jié)構(gòu)體的拓展,在類中,不但可以包含變量成員,還可以包含與這些變量相關聯(lián)的函數(shù)或運算。對象是類的一個具體實例。

類和對象的概念是面向?qū)ο蟪绦蛟O計(Object-oriented

Programming)的基礎。采用面向?qū)ο蠹夹g可以把復雜的操作過程加以隱藏,而外部呈現(xiàn)為人們所習慣的處理形式。例3.19建立一個整數(shù)類integer,該類含有一個數(shù)據(jù)成員n,代表一個3位整數(shù)。還具有顯示整數(shù)各位數(shù)字之和、各位數(shù)字平方和、各位數(shù)字立方和等功能。和其他高級語言一樣,對文件讀寫之前應該“打開”該文件,在使用結(jié)束之后應“關閉”該文件。Fid為調(diào)用文件時返回的文件句柄,文件打開后,可用句柄值來代替該文件。3.9文件操作(Low-Level

File

I/O

Functions)文件的打開與關閉打開文件fopen函數(shù)的調(diào)用格式為:fid=fopen(‘文件名’,‘使用文件方式’)關閉文件調(diào)用格式為:sta=fclose(fid)filename

=

input(‘Open

file:’,’s’);

[fid,message]

=

fopen

(filename,’r’);

if

fid==-1disp

(

message);end3.9.2二進制文件讀寫操作1.讀二進制文件fread

函數(shù)可以讀取二進制文件的數(shù)據(jù),并將數(shù)據(jù)存入矩陣。其調(diào)用格式為:

[A,count]=fread(fid,size,precision)例:

[Fid,message]=fopen(‘matrix.dat’,’r’);If

Fid==-1 disp

(message)

end;A

=

fread(Fid,100)2.寫二進制文件fwrite

函數(shù)按照指定的數(shù)據(jù)精度將矩陣中的元素寫入到文件中,并返回存入數(shù)據(jù)的個數(shù)。其調(diào)用格式為:count=fwrite

(Fid,A,precision)例:File

=

fopen(‘magic.bina’,’w’)Count

=

fwrite(File,magic(4),’int32’)Status

=

fclose(File)3.8.3文本文件讀寫操作?1.

讀文本文件fscanf函數(shù)可以讀取文本文件的內(nèi)容,并按指定格式存入矩陣。其調(diào)用格式為:[A,COUNT]=

fscanf

(Fid,

format,

size)2.

寫文本文件fprintf

函數(shù)可以將數(shù)據(jù)按指定格式寫入到文本文件中。其調(diào)用格式為:COUNT=

fprintf(Fid,

format,

A)例3.20從鍵盤輸入5名學生的姓名和成績,先建立一個數(shù)據(jù)文件,然后讀出數(shù)據(jù)文件的內(nèi)容,并按成績從低到高的順序在屏幕上輸出學生信息。3.8.4數(shù)據(jù)文件定位?fseek函數(shù)用于定位文件位置指針,其調(diào)用格式為:status

=

fseek(Fid,

offset,

origin)origin為給定的初始位置,為‘cof’,’bof’,’eof’之一?!甤of’:表示文件中的當前位置‘bof’:表示文件的開始位置‘eof’:表示文件的結(jié)束位置

ftell函數(shù)返回文件指針的當前位置,其調(diào)用格式為:position

=

ftell

(Fid)例3.21分析下列程序執(zhí)行后,four、position和three三個變量的值。a=1:5;Fid=fopen("fdat.bin",

"w");fwrite(Fid,

a,

"int16"

);fdat.binstatus=fclose(Fid);Fid=fopen("fdat.bin",

"r");%以寫方式打開文件fdat.bin%將a的元素以雙字節(jié)整型寫入文%以讀數(shù)據(jù)方式打開文件fdat.status=fseek(Fid,6,"bof");移動6個字節(jié)four=fread(Fid,1,"int16");下一個數(shù)據(jù)%將文件指針從開始位置向尾部%讀取第4個數(shù)據(jù),并移動指針position=ftell(Fid); %ftell的返回值為8%將文件指針從當前位置往前status=fseek(Fid,-4,"cof");動4個字節(jié)three=fread(Fid,

1,

"int16");status=fclose(Fid);%讀取第3個數(shù)據(jù)Importing

and

Exporting

Data

The

format

of

the

data:

text,

binary,

or

a

standarformat

such

as

HDF

The

easiest

way

to

import

data

into

MATLAB

isto

use

the

Import

Wizard.Importing

Text

DataText

DataIn

text

format,

the

data

values

are

AmericanStandard

Code

for

Information

Interchange(ASCII)

codes

that

represent

alphabetic

andnumeric

characters.

ASCII

text

data

can

beviewed

in

a

text

editor.Using

the

Import

Wizard

with

Text

DataUsing

Import

Functions

with

Text

DataUsing

the

Import

Wizard

with

Text

DatASCII

Data

FileFormatsASCII

Data

ImportFunctionFeatureComparisonASCII

DataComparisonImportFunctionFeature1.

Importing

Numeric

Text

Data

如果數(shù)據(jù)文件中只包含數(shù)字,根據(jù)分隔符的不同,可以選擇多import

function.Load

--分隔符是space,最簡單的命令!例:有一個文件my_data.txt,只含數(shù)字,分隔符是space1

2

3

4

56

7

8

9

10>>

load

my_data.txt在workspace中產(chǎn)生一個變量,跟文件名一樣(去掉擴展名)如果想產(chǎn)生一個和文件名不一樣的變量名,應用:>>

A=load

("my_data.txt")>>

load

my_data.txt>>

whosName

Sizemy_data

2x5Bytes

Class80

double

arrayGrand

total

is

10

elements

using

80

bytes>>

my_datamy_data

=12345678910>>

A=load

("my_data.txt")A

=123456789102.

Importing

Delimited

ASCII

Data

Filesdlmread--分隔符是any

character

,最簡單的命令!例:有一個文件ph.dat,內(nèi)容被分號隔開7.2;8.5;6.2;6.65.4;9.2;8.1;7.2把這個文件讀進工作空間,并命名為變量A>>A=dlmread("ph.dat",";")

dlmread

忽略數(shù)據(jù)元素之間的空格7.2;8.5;

6.2;6.65.4;9.2;8.1;7.23.

Importing

Numeric

Data

withText

Headerstextread—導入包含文本標題的數(shù)據(jù)文件例:有一個文件grades.dat,包含一行文本標題Grade1

Grade2

Grade378.855.945.999.566.878.089.577.056.7>>

[grade1

grade2

grade3]

=

textread

…("grades.dat","%f

%f

%f",

"headerlines",1)grade1

=78.800099.500089.5000grade2

=55.900066.800077.0000grade3

=45.900078.000056.70004.

Importing

Mixed

Alphabetic

andNumeric

DataSallyType112.34

45YesLarryType234.56

54Yestextread—可以返回多個輸出變量,并可以指定每個變量的數(shù)據(jù)類型例:有一個文件mydata.dat,包含一行文本標題Tommy

Type1

67.89

23

No>>

[names,types,x,y,answer]

=

…textread(‘mydata.dat’,‘%s

%s

%f

%d

%s’)>>[names,types,x,y,answer]=textread

…("mydata.dat","%s

%s

%f

%d

%s",

"delimiter",";")names

="Sally""Larry""Tommy"types

="Type1""Type2""Type1"x

=12.340034.560067.8900y

=455423answer

="Yes""Yes""No"Exporting

ASCII

DataExporting

ASCII

Data1.

Exporting

Delimited

ASCII

Data

Filessave

--easytouse!例:To

export

the

array

A,A

=

[

1

2

3

4

;

5

6

7

8

];>>

save

my_data.out

A

-ASCIIIf

you

view

the

created

file

in

a

text

editor,

it

looks

lik1.0000000e+000

2.0000000e+000

3.0000000e+000

4.0000000e+0005.0000000e+000

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論