首页/文章/ 详情

matlab不同类型数据互换实例

3年前浏览3559

   image.png

 数据类型转换对于经常使用Matlab的来说真的是很基础且实用的知识点,相互之间转换关系很复杂不容易记住,每次使用的时候都要百度,为了方便大家记住数据类型转换关系,转换图变应运而生,下图就是过冷水给大家分享的转换图。

图片1.png

        符号数值计算默认精度是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'

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

图片2.png

    就是要解决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

精品回顾>>>>>>

matlab绘制农夫过河动态图

用matlab实现复杂累计求和的展开(程序分享)

Matlab 做重要性抽样 含代码

MATLAB/ADAMS求解动力学

Simulink电力电子技术建模和仿真

微信图片_20210415161543.jpg

MATLAB
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2021-01-05
最近编辑:3年前
过冷水
博士 | 讲师 讨论号:927550334
获赞 361粉丝 184文章 107课程 11
点赞
收藏
作者推荐

免费 5.0
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈