>> disp('pi=',pi)
??? Error using ==> disp
Too many input
arguments.
>> disp(sprintf('圓周率pi= %8.5f',pi))
圓周率pi= 3.14159
想把字符串pi=和變量pi的值顯示在一行上,試用disp(′pi=′,pi),回答這是非法的.這時應該用sprintf函數,它可把數據按要求的格式轉換為字符串,再把它與需要顯示的字符串組裝成一個長字符串,使顯示格式非常靈活,人機界面更為友好.如鍵入
st=sprintf(′ 圓周率pi= %8.5f′,pi);
disp(st)
結果為
圓周率pi=3.14159
其中,%為數據格式符,f表示十進制浮點,8.5表示數字的長度為8位,小數點后5位.從%到f之間的字符都是不顯示的,它只指出顯示數據pi的格式,跟C的printf很相似。
| 字 符 串 轉 換 |
|
| abs |
字符串到ASCII轉換 |
| dec2hex |
十進制數到十六進制字符串轉換 |
| fprintf |
把格式化的文本寫到文件中或顯示屏上 |
| hex2dec |
十六進制字符串轉換成十進制數 |
| hex2num |
十六進制字符串轉換成IEEE浮點數 |
| int2str |
整數轉換成字符串 |
| lower |
字符串轉換成小寫 |
| num2str |
數字轉換成字符串 |
| setstr |
ASCII轉換成字符串 |
| sprintf |
用格式控制,數字轉換成字符串 |
| sscanf |
用格式控制,字符串轉換成數字 |
| str2mat |
字符串轉換成一個文本矩陣 |
| str2num |
字符串轉換成數字 |
| upper |
字符串轉換成大寫 |
在許多情況下,希望把一個數值嵌入到字符串中。幾個字符串轉換可完成這個任務。
» rad=2.5; area=pi*rad^2;
» t=[' A circle of radius ' num2str(rad) ' has an area of ' num2str(area) ' . ' ] ;
» disp(t)
A circle of radius 2.5 has an area of 19.63.
這里函數num2str用來把數值轉換成字符串,字符串連接用來把所轉換的數嵌人到一個字符串句子中。按類似方式,int2str把整數轉換成字符串。無論是num2str還是int2str都調用函數sprintf,它用類似C語言語法把數值轉換成字符串。
函數fprintf經常是函數disp的一個有用替換,由於它提供了對結果更多的控制。當准備把格式化的數據寫到一個文件中去時,按缺省它在命令窗口顯示結果。例如,
» fprintf(' See what this does ')
See what this does»
» fprintf(' See what this does\n ')
See what this does
在上面第一個例子里,fprintf顯示字符串,然后立即給出MATLAB提示符。相反,在第二個例子里,\n插入一個新行字符,在MATLAB提示符出現之前創建一個新行。
無論fprintf還是sprintf以同樣方式處理輸入參量,但fprintf把輸出送到顯示屏或文件中,而sprintf把輸出返回到一個字符串中。例如,上面的例子用num2str可重寫為
» t=sprintf(' A circle of radius %.4g has an area of %.4g. ', rad, area);
» disp(t)
A circle of radius 2.5 has an area of 19.63.
» fprintf(' A circle of radius %.4g has an area of %.4g.\n ' , rad, area)
A circle of radius 2.5 has an area of 19.63.
這里%.4g是用在函數num2str中的數據格式。%.4g就是用指數或定點標記,不管哪一種更短些,只顯示至4位數字。除了g格式,還可用e (指數)和f (定點)轉換。表6.2表明在各種不同轉換下,如何顯示pi結果。
表6.2
| 數 值 格 式 轉 換 例 子 |
|
| 命令 |
結果 |
| fprintf(' %.0e\n ',pi) |
3e+00 |
| fprintf(' %.1e\n ',pi) |
3.1e+00 |
| fprintf(' %.3e\n ',pi) |
3.142e+00 |
| fprintf(' %.5e\n ',pi) |
3.14159e+00 |
| fprintf(' %.10e\n ',pi) |
3.1415926536e+00 |
| fprintf(' %.0f\n ',pi) |
3 |
| fprintf(' %.1f\n ',pi) |
3.1 |
| fprintf(' %.3f\n ',pi) |
3.142 |
| fprintf(' %.5f\n ',pi) |
3.14159 |
| fprintf(' %.10f\n ',pi) |
3.1415926536 |
| fprintf(' %.0g\n ',pi) |
3 |
| fprintf(' %.1g\n ',pi) |
3 |
| fprintf(' %.3g\n ',pi) |
3.14 |
| fprintf(' %.5g\n ',pi) |
3.1416 |
| fprintf(' %.10g\n ',pi) |
3.141592654 |
| fprintf(' %.8.0g\n ',pi) |
3 |
| fprintf(' %.8.1g\n ',pi) |
3 |
| fprintf(' %.8.3g\n ',pi) |
3.14 |
| fprintf(' %.8.5g\n ',pi) |
3.1416 |
| fprintf(' %.8.10g\n ',pi) |
3.141592654 |
注意,對e 和f 格式,小數點右邊的十進制數就是小數點右邊要顯示的多少位數字。相反,在g的格式里,小數點右邊的十進制數指定了顯示數字的總位數。另外,注意最后的五行,其結果指定為8個字符長度,且是右對齊。在最后一行,8被忽略,因為指定超過了8位。
概括起來,當需要比缺省函數disp,num2str和int2str所提供的更多的控制時,fprintf和sprintf是有用的。
函數str2mat把一列的幾個字符串轉換成一個字符串矩陣。例如,
» a=' one ' ; b= ' two ' ; c= ' three ' ;
» disp(str2mat(a, b, c, ' four '))
one
two
three
four
從上面看不明顯,上面的每行有同樣數目的元素。較短行用空格補齊,使結果形成一個有效的矩陣
在逆方向轉換中,有時是很方便的。
» s= ' [1 2; pi 4] ' % a string of a MATLAB matrix
s =
[1 2; pi 4]
» str2num(s)
ans =
1.0000 2.0000
3.1416 4.0000
» s=' 123e+5 ' % a string containing a simple number
s =
123e+5
» str2num(s)
ans =
12300000
函數str2num不能接受用戶定義的變量,也不能執行轉換過程的算術運算。
pcolor(X,Y,C)函數的用法: X,Y是用來定位的,C是用來填充顏色的。
當X,Y是向量時,X與C的列對應,Y與C的行對應,因此向量X和Y的維數必須要求與C的列與行統一。所以使用時注意檢查X,Y,C的大小和維數。
其后面最好用上函數:shading interp;
