前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >过冷水带您走进matlab数据转换新世界

过冷水带您走进matlab数据转换新世界

作者头像
巴山学长
发布2021-01-12 15:39:33
4380
发布2021-01-12 15:39:33
举报
文章被收录于专栏:巴山学长巴山学长

数据转换对于经常使用matlab的伙伴来说是很基础且实用的知识点,but! 相互之间转换关系不太容易厘清,免不了书到用时求谷哥度娘。为了方便伙伴们记住不同数据类型之间的相互转换关系,matlab数据转换图便应运而生,下图就是过冷水要给大家分享的转换图。

符号数值计算默认精度是32位,是Matlab数值计算的2倍,符号运算要比数值运算更精确。过冷水的习惯一般都是做符号运算,最后转换成数值型符号,这样在编程过程中不容易出错。

先从数值型符号来开始学习

代码语言:javascript
复制
 pi
class(pi)
ans =
          3.14
ans =
'double'

使用函数class可查看数据类型,pi是一个数,有效数是小数点两位,想看其小数点后八位,怎么做?就可以使用vpa函数。

代码语言:javascript
复制
b=vpa(pi,9)
class(b)
b =
3.14159265
ans =
    'sym'

小数点后八位我们看见了,这是时候数据类型改变了,变成了符号型,有时候做积分或者求导的时候必须要做符号运算,得到数据自然是符号类型,如何将符号类型转换成数值类型呢?

代码语言:javascript
复制
c=double(b)
class(c)
c =
  3.14159265358979
ans =
    'double'

过冷水最早摸索符号数据类型转换主要是为了想解决在图像绘图的时候自动标点的问题,不仅要找到极小值点,还要在极小值点处标出具体值

就是要解决min(56.8133,19.2481)的问题,完整代码可见matlab绘图(五)

不用怀疑,此处肯定有转换数据类型的小技巧

代码语言:javascript
复制
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值,注意代码

代码语言:javascript
复制
 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函数由于过冷水对其不太了解不知道具体使用场景是什么,

代码语言:javascript
复制
str =
    'min(56.8133,19.2481)'
STR =
                   19.2481
ans =
    'double'

只是觉得字符串转换成数值有什么用呢?加密吗?12345=活捉满广志?实际num2str 、str2num 还不一定能构成循环

代码语言:javascript
复制
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))

代码语言:javascript
复制
n
a=class(n)
b=num2str(double(n))
c=class(b)
n =
19.24809717
a =
    'sym'
b =
    '19.2481'
c =
    'char'

可知实际n是一个符号表达式,想要将其转换成字符串表达式,过冷水做了两步变化,实际可以自己转换的

代码语言:javascript
复制
 char(n)
ans =
    '19.24809717'

当时过冷水功夫不到家不知道使用char函数也可以实现,现在知道了,编程只有学的越多,知道的越多做事情才省事,半生不熟的时候使用的方法有时候看起来很笨,所以多看过冷水的推文学习实用小技巧总是对自己有好处的。

如果有一直关注过冷水推文的读者,应该有看过推文一文带你轻松搞定matlab各种数据读写其中就有使用char函数,不过此处可不是转换符号表达式

代码语言:javascript
复制
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 ,就是对数据类型进行处理,读取文本数据。关于数据类型这一块的知识复杂,其连接性比较广,想要熟练掌握需要在实际案例中使用,本期过冷水就给大家演示一下各转换关系的实际使用场景,让大家心里有数,知道去使用它。希望能够起到抛砖引玉的效果。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 巴山学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档