(一)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詳解)
數值格式
這些樣式可控制數值變量的輸出顯示格式。
| 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 |
除此,也可以設置矩陣輸出時的行距格式:
| 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中的输入与输出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java反编译工具 luyten 0.5
- 下一篇: 工厂好的html页面,jquery中被誉