数据转换对于经常使用matlab的伙伴来说是很基础且实用的知识点,but! 相互之间转换关系不太容易厘清,免不了书到用时求谷哥度娘。为了方便伙伴们记住不同数据类型之间的相互转换关系,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=double(b)
class(c)
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=活捉满广志?实际num2str 、str2num 还不一定能构成循环
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 ,就是对数据类型进行处理,读取文本数据。关于数据类型这一块的知识复杂,其连接性比较广,想要熟练掌握需要在实际案例中使用,本期过冷水就给大家演示一下各转换关系的实际使用场景,让大家心里有数,知道去使用它。希望能够起到抛砖引玉的效果。