转:matlab中sprintf与dist的⽤法
>> 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 (指数)和
printf输出格式matlab
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