Matlab-基础篇(一)

Matlab是Matrix和Laboratory的综合缩写,意为矩阵实验室,由美国MathWorks公司出品。作为一款数学软件,集数据导入导出、数值分析、时序分析、图影处理、仿真等内容于一体。同Fortran、IDL、Python等数据分析软件,Matlab有着丰富的工具包,为大量学科的数据提供了较为实用且便捷的选择。
这一次,先来了解一下数据的类型和计算机存储。
由于Matlab是基于“矩阵”的,所以数据通常以矩阵数组的形式进行存储。高中数学中,关于数组的广义定义应该是由一串有规律的数组成的集合,但通常是由一个下标来表征数组的通项公式。但是,实际应用中,通常都应该由两个及两个以上的下标来表征对应位置的数,例如:古希腊毕达哥拉斯学派的数学家总结的第个
边形数的表达式
(选自《高中数学-数的规律基础》中题1-3ppt, 摘录自《高考数学:拉分提档全攻略-数列》浙江大学出版社)。
数据通常可以分为数型、字符型、元胞型、结构型。数型就相当于数集,通常根据有无小数点可以分为实型(浮点型float)和整型(integer),而鉴于复型(complex)是相当于二维数据格式,需要实部和虚部共同来决定。同时,对于数型,从精度(存储的有效位数)考虑,在Matlab中可以分为单精度(single precision)和双精度(double precision)。字符型(str/char)包括字符或字符串,通常用前后单引号赋值,对于数据字符,可考虑使用函数转化,否则无法直接参与运算。但如果对于不同的变量数型或字符型,如何做到存入一个数据中方便信息传输?通常会考虑元胞型(cell),即一个元胞数组中通常有各种变量的不同维度大小的数据共同存储空间,找到元胞数组中对应位置即可提取需要的数据列。而不同的元胞数组又可以构成结构型(struct)数据,struct数据中通常有各种对应的信息名称,比如:A和B同学的期末考试各科成绩及个人信息等存储,就可以存成结构型数据。(注意:字符型变量不能和数型变量做交叉赋值。)当然,Matlab的界面区会直接显示各个变量的类型,需做好区分。
在这里,可能有很多第一次接触计算机语言的小伙伴。通常,单精度数据是32位,双精度存储是64位,那跟计算机的内部数据存储到底有什么联系呢?0还是0吗?
首先,要清楚的是计算机对于任何数字都是以‘0/1’二进制编码记录的,1个字节(byte)等于8位(bit),32 bit=4 byte。因此,在Fortran中,一个单精度的实数,就可以用real*4去定义。对于32 bit来说,每个bit都只有0/1的选择,下面给定计数法则:
第1个bit:符号位
-(0为正数,1为负数);
第2-9个bit:指数位
-
;
第10-32个bit:小数部分
-二进制下的科学计数法小数部分。
看到这里,还没有搞懂?下面给出762.75在计算机里的存储,来看看具体过程吧?(部分推导源自《百度百科》)


那对于单精度的数值最大能存多少呢?来算一算:

看到这里,是否比较清晰了呢?64 bit你是否也可以信手拈来?是不是可以轻松地其计数法则和最大最小呢?

可以看出单双精度的数据在存储上就差了不是一个量级的水平,因此随着计算机性能的提高、存储能力的提升,通常会更喜欢双精度的数据。但实际中,卫星数据的传递,由于信息量过大,通常也有单精度的数据,需要在使用的时候特别注意。
对于原始观测数据来说:对一种确定变量的连续时间观测,也叫作“时间序列”,是一维(1-D)的数列,象征性地可以记为
;一个确定时刻,对一种确定变量
,有着类似“经纬度”的变化,也叫作“图像序列”,是二维(2-D)的数组,象征性地可以记为
;而对一种有着“经纬度”变化的确定变量
,连续时间观测,也叫作“视频序列”,是三维(3-D)的数据,象征性地可以记为
。因此,如果对一个空间
的实时观测量
,应该是具有四维(4-D)的信息,象征性地可以记为
,以此类推。关于实测数据的实际维度和每个维度的个数,可以用
来表达。
说了那么多关于数据的基础知识,通常,基本上是拿不到直接的数据文件,市面上也有很多不同的文件格式和类型,究竟如何才能把文件中的数据提取出来?这部分叫做“数据读取”,无论是最终读出来是数型、字符型、元胞型、结构型的哪一种或哪几种,都要求“正确地读取”。关于“正确地读取不同类型的文件数据”,将在下一章细致阐述。