数据类型转换对于经常使用Matlab的来说真的是很基础且实用的知识点,相互之间转换关系很复杂不容易记住,每次使用的时候都要百度,为了方便大家记住数据类型转换关系,转换图变应运而生,下图就是过冷水给大家分享的转换图。
符号数值计算默认精度是32位,是Matlab数值计算的2倍,符号运算要比数值运算更精确,过冷水的习惯一般都是做符号运算最后转换成数值型符号,这样在编程过程中不容易出错。先从数值型符号来开始学习
pi class(pi) ans = 3.14 ans = 'double'
使用函数class可查看数据类型,可知pi是一个数,有效数是小数点两位,想看其小数点后八位,怎么做?就可以使用vpa函数
b=vpa(pi,9) class(b) b = 3.14159265 ans = 'sym'
小数点后八位我们看见了,但是数据类型改变了,变成了符号型,有时候做积分或者求导的时候必须要做符号运算,得到数据自然是符号类型,如何将符号类型转换成数值类型呢?
c = 3.14159265358979 ans = 'double'
过冷水最早摸索符号数据类型转换主要是为了想解决在图像绘图的时候自动标点的问题,不仅要找到极小值点,而且还要再极小值点出标出具体值
就是要解决min(56.8133,19.2481)的问题,完整代码可见matlab图像标记&四周添加坐标轴不用怀疑,此处肯定有转换数据类型的小技巧
plot1 = plot([T',T'],[y1',y2'],'MarkerSize',4,'LineWidth',3); [m_one,n_one]=find(abs(y1-y2)==min(abs(y1-y2))); m=T(m_one,n_one);n=y1(m_one,n_one); plot(m,n,'DisplayName','point of intersection','MarkerSize',15,'Marker','*','LineWidth',1.5,'LineStyle','none','Color',[0 0 1]); str = ['min(' num2str(m) ',' num2str(double(n)) ')']; text(m (max(max(T))-min(min(T)))/20,double(n),str,'FontSize',14,'fontname','楷体','Color','red');
先使用find函数找出两条线的交点位置[m_one,n_one] ,求得该位置具体的的x,y值,注意代码
str = ['min(' num2str(m) ',' num2str(double(n)) ')'] M=class(m) Str=class(str) str = 'min(56.8133,19.2481)' M = 'double' Str = 'char'
m是数值类型,而str是字符串类型,此处过冷水就使用了数值转换字符串的函数num2str。而关于str2num函数由于过冷水对其不太了解不知道具体使用场景是什么,
str = 'min(56.8133,19.2481)' STR = 19.2481 ans = 'double'
只是觉得字符串转换成数值有什么用呢加密吗?12345=活捉满广志?实际numstr 、strnum 还不一定能构成循环
m = 56.8133333333333 a = '56.8133' b = 56.8133 a = ['min(' num2str(m) ',' num2str(double(n)) ')'] b=str2num(a) c=num2str(b) a = 'min(56.8133,19.2481)' b = 19.2481 c = '19.2481'
所以到底有什么用?有懂得人可以告诉我,还需要注意的是num2str(double(n))
n a=class(n) b=num2str(double(n)) c=class(b) n = 19.24809717 a = 'sym' b = '19.2481' c = 'char'
可知实际n是一个符号表达式,想要将其转换成字符串表达式,过冷水做了两步变化,实际可以自己转换的
char(n) ans = '19.24809717'
当时过冷水功夫不到家不知道使用char函数,现在知道了,编程只有学的越大知道的越多做事情才省事,半生不熟的时候使用的方法有时候看起来很笨,所以多看过冷水的推文学习实用小技巧总是对自己有好处的。
如果有一直关注过冷水推文的读者,应该有看过推文一文带你轻松搞定matlab各种数据读写过其中就有使用char函数,不过此处可不是转换符号表达式
row1='《一代人》';row2='黑夜给了我黑色的眼睛';row3='我却用它寻找光明'; FileID=fopen('test.docx','w','b'); fwrite(FileID,row1, 'char'); fprintf(FileID,'\n'); fwrite(FileID,row2, 'char'); fprintf(FileID,'\n'); fwrite(FileID,row3, 'char'); fclose(FileID); %读取数据 FileID=fopen('test.docx','r','b'); A=fread(FileID,5000,'char') A = 12298 19968 20195 20154 12299 10 40657 22812 32473 20102 25105 40657 33394 30340 30524 30555 10 25105 21364 29992 23427 23547 25214 20809 26126 char(A') ans = '《一代人》 黑夜给了我黑色的眼睛 我却用它寻找光明'
这里有两处使用了char ,就是对数据类型进行处理,读取文本数据。关于数据类型这一块的知识复杂,其连接性比较广,想要熟练掌握需要在实际案例中使用,本期过冷水就给大家演示一下各转换关系的实际使用场景,让大家心里有数,知道去使用它。希望能够起到抛砖引玉的效果。
原创文章,作者过冷水,未经授权,禁止私自转载,转载请联系作者,如果您希望加入Matlab仿真秀官方交流群和资料下载可加群:927550334