日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(一)MATLAB中的输入与输出

發布時間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (一)MATLAB中的输入与输出 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先寫一些,積累多點再來補充~

一? ?輸入

1.input

input 的應用形式主要有以下兩種,其中第一個輸入的數字,第二個輸入的是文本信息(一般為字符串)

x = input(prompt)str = input(prompt,'s')

式中,prompt 代表要展示的文本信息,例如 a=input('please input a number\n') ,會在命令行上顯示?please input a number?,此時可以手動輸入一個數字(若輸入其他格式例如字符會報錯)。這是程序不會繼續運行,而是等待輸入數字后回車方可繼續運行,文本輸入同理。詳見MATLAB中的input函數。

2.其它輸入

輸入數據也可以是導入和讀取文件數據,MATLAB支持的數據格式多種多樣,常見的主要有txt格式、xml格式等,再次僅對少數函數進行介紹,若想了解更多可以參考MATLAB數據導入與分析中的關于文本、表格、圖像等格式文件的導入函數,本文主要介紹函數調用形式的輸入輸出。

2.1? fscanf

首先,使用 fscanf 函數讀取的文件格式為文本格式,應用到的三種形式如下:

?A = fscanf(fileID,formatSpec)?將打開的文本文件中的數據讀取到列向量?A?中,并根據formatSpec?指定的格式解釋文件中的值。fscanf?函數在整個文件中重新應用該格式,并將文件指針定位在文件結尾標記處。如果?fscanf?無法將?formatSpec?與數據相匹配,將只讀取匹配的部分并停止處理。fileID(文件標識符)可以使用fileID = fopen('x.txt','a'); 的方式打開文件得到。formatSpec為數據段部分格式。

A = fscanf(fileID,formatSpec,sizeA)?將文件數據讀取到維度為?sizeA?的數組?A?中,并將文件指針定位到最后讀取的值之后。fscanf?按列順序填充?A。sizeA?必須為正整數或采用?[m n]?的形式,其中?m?和?n?為正整數(也可以是Inf? 正無窮,表示讀取對應的所有行/列/整塊數據)。

[A,count] = fscanf(___)?還將返回?fscanf?讀取到?A?中的字段數。對于數值數據,這是已讀取的值數。您可以將此語法與前面語法中的任何輸入參數結合使用。

然而,一般我是不用這個的。

2.2 load

load是MATLAB中最為常見的一種文件讀取函數了,主要形式有以下五種:

load(filename)

load(filename,variables)

load(filename,'-ascii')

load(filename,'-mat')

load(filename,'-mat',variables)

可以是直接加載,形如 data=load('D:/test.txt'); 或者?data=load('D:/test.txt','x')讀取 test.txt 中的x變量,其中x也可替換為多個變量組成的元胞數組,例如將x替換為var{:},其中var={'x','y','z'};除了 txt文本文件,還可以是MATLAB的數據類型mat格式文件(會直接輸出到工作區中),ascii文件格式如第三個式子所示,會創建一個包含該文件數據的雙精度數組。

通過load方式加載的數據尤為常見,在許多MATLAB的擴展函數中都可以見到,加載的格式也算是非常豐富的,文本文件,數據庫文件或是表格文件都可以。

2.3 fopen

fopen 是打開文件,在下面fprintf函數中又對其各種格式的詳細說明。通過fopen打開文件后,可以使用文本文件或字符串讀取函數 testscan 來讀取文件,調用格式如下:

fileID=fopen(filename);

C=testscan(fileID,formatSpec);

fclose(fileID);

打開文件后,testscan會嘗試將文件中的數據與formatSpec中的轉換設定符匹配。testscan函數在整個文件中按 formatSpec重復掃描數據,直至?formatSpec?找不到匹配的數據時才停止。

另外,也可以參考以下這種做法,將數據處理成元胞數組再轉化為字符數組,運行結果如下

fileID = fopen('D:/test.txt','r');
rowdata = textscan(fileID, '%s', 'DElimiter', '\n');% 獲得每行數據
fclose(fileID);
whos rowdata
rowdata{1}
%rowdata{2},會報錯,rowdata為{1,1}元胞數組
a=rowdata{1,1}
whos a
b1=a{1,1}
whos b1

至于轉換后的字符數組要怎么處理便是自己的事情了,這是相對于復雜輸入類型的讀取方式,更詳細部分可以參考textscan。輸入還是以 load 加載為主。


二? ?輸出

常見的輸出形式主要有三種:

1.直接輸出到命令行

MATLAB允許在腳本(M文件)或者命令行上直接輸入變量名即可輸出,這種方法應用起來較為簡單方便,適合測試時使用。但一般輸出時時按照系統默認格式進行輸出,若要調整需要在程序前通過 format 修改命令行輸出格式,例如 format long 設置命令行輸出格式為固定十進制長格式,同理可以設置為 short 短格式,更多的數值格式見下表所示(這些在MATLAB文檔中都可以找到~format詳解)

數值格式

這些樣式可控制數值變量的輸出顯示格式。

Style

結果

示例

short (default)

固定十進制短格式,小數點后包含 4 位數。

3.1416

long

長固定小數格式,double?值的小數點后包含 15 位數,single?值的小數點后包含 7 位數。

3.141592653589793

shortE

短科學記數法,小數點后包含 4 位數。

3.1416e+00

longE

長科學記數法,double?值的小數點后包含 15 位數,single?值的小數點后包含 7 位數。

3.141592653589793e+00

shortG

短固定小數格式或科學記數法(取更緊湊的一個),總共 5 位。

3.1416

longG

長固定小數格式或科學記數法(取更緊湊的一個),對于?double?值,總共 15 位;對于?single?值,總共 7 位。

3.14159265358979

shortEng

短工程記數法,小數點后包含 4 位數,指數為 3 的倍數。

3.1416e+000

longEng

長工程記數法,包含 15 位有效位數,指數為 3 的倍數。

3.14159265358979e+000

+

正/負格式,對正、負和零元素分別顯示?+、-?和空白字符。

+

bank

貨幣格式,小數點后包含 2 位數。

3.14

hex

二進制雙精度數字的十六進制表示形式。

400921fb54442d18

rat

小整數的比率。

355/113

除此,也可以設置矩陣輸出時的行距格式:

Style

結果

示例

compact

隱藏過多的空白行以便在一個屏幕上顯示更多輸出。

theta = pi/2
theta =
??1.5708

loose

添加空白行以使輸出更易于閱讀。

theta = pi/2

theta =

??1.5708

2 fprintf函數輸出

fprintf函數是MATLAB函數中較為常見的一種(詳見fprintf函數),因為它可以設置輸出格式,較為靈活全面。最為常見的一種形式為: fprintf('%s is a boy',boyname) ,其中 boyname 表示一個存儲字符串的變量名,同理這種形式可以輸出十進制數(%d)、八進制數(%o)、定點記數法的浮點數(%f)以及指數記數法的浮點數(%e),單個字符(%c)和字符串(%s)。

如是需要控制輸出的長度,可以在百分號后加上數字,例如 %8s 輸出長度為八(若實際字符串長度超過八會輸出字符串原身,不會截斷),在命令行上至少保持8個占位,不夠用空格來補,而 %4.8f 則會輸出4位整數加小數點加8位小數的數字格式,與字符串不同的時,整數不夠用空格補,小數不夠用 0 來補。

前面所提的案例輸出格式遵循右對齊的格式,若想變成左對齊則在百分號后數字或格式前加一個負號即可,例如 %-8s 。除此,我們還可以通過一些特殊的控制字符來維持輸出格式的美觀,例如 \t (水平)制表符,\n 換行符,\v 垂直制表符。

除此,fprintf函數還可以將數據輸出到文件中存儲起來,在MATLAB腳本中操作,格式案例如下:

x = 0:.1:1; A = [x; exp(x)];fileID = fopen('exp.txt','w'); fprintf(fileID,'%6s %12s\n','x','exp(x)'); fprintf(fileID,'%6.2f %12.8f\n',A); fclose(fileID);

在輸出前首先需要打開文件(fopen),輸出結束后需要關閉文件(fclose),如上所示。其中,fopen函數里的是文件名以及標識符,標識符類別有以下8種,若是要創建新文件則是 w ,若是在原有文件里補充則是 a ,一般用到的就這兩種。

'r'

打開要讀取的文件。

'w'

打開或創建要寫入的新文件。放棄現有內容(如果有)。

'a'

打開或創建要寫入的新文件。追加數據到文件末尾。

'r+'

打開要讀寫的文件。

'w+'

打開或創建要讀寫的新文件。放棄現有內容(如果有)。

'a+'

打開或創建要讀寫的新文件。追加數據到文件末尾。

'A'

打開文件以追加(但不自動刷新)當前輸出緩沖區。

'W'

打開文件以寫入(但不自動刷新)當前輸出緩沖區。

fclose 關閉文件,括號里面的fileID是文件標識符,即代表打開的文件,無特殊情況該語句也可以用 fclose('all') 關閉所有文件代替。而fprintf與前面輸出到命令行的格式大致相似,不過在最前面加上了一個fileID~文件標識符而已。

3.disp

disp函數是直接輸出,打印變量值或者打印字符串,形如 disp(x)和disp('x')表達的意思是不同的,前者是輸出 x 的值,可以是字符串、整數、矩陣等等,而后者則是直接打印字符串 x ,打印完會直接換行,不像fprintf函數需要輸入 \n 換行。同時,需要注意的是 disp 若是要在一行i打印字符串和變量值不能直接寫成這種形式: disp('a is',a_value),這樣會出現輸入參數過多的錯誤(而在C#語言中使用$可以做到類似操作),但是可以寫成類如以下形式來輸出:

name = 'Alice'; age = 12; X = [name,' will be ',num2str(age),' this year.']; disp(X)

這樣會在一行里輸出 :Alice will be 12 this year.

大致的輸入輸出操作就到這兒了,更多內容還需繼續進修~一般來說這些輸入輸出就足夠了

總結

以上是生活随笔為你收集整理的(一)MATLAB中的输入与输出的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。