5 Matlab 的变量与数据类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5 Matlab 的变量与数据类型相关的知识,希望对你有一定的参考价值。

参考技术A

计算机本质上是一个能够处理数据的机器。Matlab 可以处理很多类型的数据,我们功利一点,先只了解最常用的几种数据类型。其他的数据类型,随用随查。

从这一次教程开始,大家要勤在命令行窗口中练习。

可以把它理解为数学意义的数字。Matlab 默认把数值型数据按照双精度浮点型存储。咱们先不管什么是双精度浮点型,最直观的了解就是咱们在Matlab 中做数值计算时,它的精度是小数点后4位。

你可以试着在命令行窗口中输入以下命令,看看这样的数值计算(输入完命令后要按回车。在 >> 符号后面是输入的内容, ans = 之类的内容,是 matlab 在执行命令后的输出,后文不再解释类似的输入与输出)。

以单引号 \' 或双引号 " 括起来的任意文本,如 \'abc\' 就是一个字符串,它包含 a , b , c 三个字符,也可以写成 "abc" 。

请注意,单引号或双引号只是字符串的边界,它并不包含在字符串当中。那如果字符串本身包含有单引号或双引号时怎么办?

这里存在两类情况,我们用写字符串 I\'m OK 和 I"m OK 来举例.

大家可以思考一下,如果字符串里面既包含 \' 也包含 " 怎么办?

在 matlab 中用不同的方法试试:

字符串是文本,而计算机只能处理数字。所以需要先将文本转换为数字才能执行进一步的操作。这就涉及到编码,所有的文本先通过编码计算方案转换为数字再存储到计算机里。

最早的编码方案是美国人搞出来的,只负责127个字符(大小写英文字母加上一些符号和数字)的编码。这种编码方案被称为 ASCII 编码。比如,在这个编码方案里, a 对应的数字是 97 , b 对应的是 98 . 所以,大家应该能理解下面的计算结果。

编码方案还有很多种,比如中国的汉字编码采用的是 GBK 编码,也有采用 GB2312 的,有兴趣的小伙伴们,可以自己去查一下。

逻辑型数据,很多人都习惯上把它称为布尔值。在 Matlab 中,它只有 true 和 false 这两个值,请注意大小写。Matlab 用 1 表示 true ,而用 0 表示 false .

我们在命令行窗口中看看这一特性:

布尔值可以通过关系操作符计算得到,关系操作符主要有以下几种(如果对以下的判断回答为“是”,则结果为 true,否则结果为 false.):

请看例子:

多个关系计算式可以通过逻辑运算符连接得到更复杂的逻辑表达式。逻辑运算符主要有以下三种:

结合例子进一步理解:

这里可能有小伙伴比较懵,几个意思?前面说过,true 被 Matlab 存储为 1 ,而false被存储为 0 . 更进一步,在逻辑运算过程中,Matlab 将所有的 非零 数据都当作是 true.

继续看例子:

这里用了括号,以提高某些块的运算优先级(跟数学里做的一样,都是先算括号里的,然后才算其他的)。可以想一想,如果我写成这样: ~ 2 > 3 & 3 <= 4 | 5 > 3 ,大家能一眼看出先算哪个,后算哪个吗?

为了避免歧义,勤用括号就没错。 & , | , ~ 这三种运算符的运算的规则是从左至右,其他的优先级关系我们就不管了,留着脑容量处理更重要的事情。

逻辑运算常常用于循环或条件判断中。比如:

如果 5 > 3 ,就显示 OK .

这是一个循环操作,只要 3 < 5 就一直显示 3 smaller than 5 . 这个例子,是一个死循环,也就是说它会一直这么执行下去,除非强制终止(在Matlab中是按 ctrl + c 键)。实际工作中,很少这么写。

变量的概念与初中代数中变量概念几乎是相同的。只是在计算机程序中,变量可以是任意的数据类型。在程序中,使用变量名来表示变量。顾名思义,变量名就是变量的名称。变量名不能乱取,在 Matlab 中,变量的命名必须遵守以下规则:

可以通过赋值操作符 = 将数据赋值给变量。

注意,这里的 = 与数学里的 = 不一样。

本质上,变量是一个指针,通过指针的指向我们可以获取变量的值。赋值操作只是改变了这个指针的指向。

我们试着用以上知识来理解下面的结果:

第一次,Matlab 创建了一个变量 a 和数据 5 ,并且通过赋值操作,将变量 a 指向数据 5 ;
第二次,先将 a 指向的数据 5 加上 3 ,得到 8 ,通过赋值操作,将变量 a 指向了新的数据 8 ;
第三次,Matlab 创建了一个新的变量 b ,通过赋值操作,变量 b 与变量 a 指向同一个数据 8 . 注意了,这里两个变量指向了同一个数据。
第四次,Matlab 创建了一个字符串数据 Hello world! ,通过赋值操作,将变量 a 指向了这个字符串数据。注意了,虽然变量 a 的指向发生了变化,但是 b 仍然是指向数据 8 的。
最后,用 disp 命令查看下 b 的值是什么。

Matlab正弦曲线拟合

我有一组数据,想通过正弦曲线拟合算法找到最合适的拟合正弦信号哦,再分析其与实际输入原始数据的对比

方法/步骤

    运行Matlab软件。

    在工作空间中存入变量的实验数据。具体如下:

    可以直接用矩阵来存放数据,直接在命令窗口输入

    x=[数据x1,数据x2,...,数据xn];

    y=[数据y1,数据y2,...,数据yn];

    当数据较多时,可以从excel,txt等文件中导入。

    把数据存入工作空间后,在命令窗口中输入cftool,回车运行。

    在这个拟合工具窗口的左边,选择变量,即分别选择x,y。

    选择拟合的曲线类型,一般是线性拟合,高斯曲线,平滑曲线等,根据需要选择。

    选择完后会自动完成拟合,并且给出拟合函数表达式。

    点击菜单栏中的“file”,选择“print to figure"进行画图。

    在图形窗口中,可以对图形显示模式进行修改,如添加标题,坐标名称等。

    最后得到比较完整的图形曲线。点击”file"中的“save"进行保存。

追问

我是想通过一组正弦曲线的拟合,找出残差平方和最小,最合适的拟合正弦信号怎么办呢?

参考技术A 【1】第一步
<br>>>cftool
<br>【2】出现对话框,点击data选x和y
<br>【3】creat data set,然后close
<br>【4】点击fitting,在type of type,选Fourier
<br>选择一个合适的即可。

例如:
>> x=0:0.1:pi
>> y=sin(x+x.^2)
>> plot(x,y,'o-')
用非线性回归,得到
得到
General model Sin8:
f(x) =
a1*sin(b1*x+c1) + a2*sin(b2*x+c2) + a3*sin(b3*x+c3) +
a4*sin(b4*x+c4) + a5*sin(b5*x+c5) + a6*sin(b6*x+c6) +
a7*sin(b7*x+c7) + a8*sin(b8*x+c8)
Coefficients (with 95% confidence bounds):
a1 = 4.36 (-2.007e+010, 2.007e+010)
b1 = 1.643 (-1.371e+009, 1.371e+009)
c1 = 0.4803 (-2.517e+009, 2.517e+009)
a2 = 4.282 (-3.806e+006, 3.806e+006)
b2 = 5.715 (-8.181e+004, 8.182e+004)
c2 = -4.306 (-7.305e+004, 7.305e+004)
a3 = 3.823 (-3.826e+006, 3.826e+006)
b3 = 5.867 (-6.623e+004, 6.624e+004)
c3 = -7.586 (-6.24e+004, 6.238e+004)
a4 = 2.67 (-1.363e+014, 1.363e+014)
b4 = 7.29e-006 (-5.336e+011, 5.336e+011)
c4 = -0.8273 (-5.575e+013, 5.575e+013)
a5 = 2.006 (-2.405e+014, 2.405e+014)
b5 = 0.5948 (-1.429e+013, 1.429e+013)
c5 = -0.5683 (-8.375e+013, 8.375e+013)
a6 = 1.729 (-2.606e+014, 2.606e+014)
b6 = 0.5869 (-1.455e+013, 1.455e+013)
c6 = -0.5213 (-8.638e+013, 8.638e+013)
a7 = -2.189 (-1.781e+009, 1.781e+009)
b7 = 2.225 (-1.048e+008, 1.048e+008)
c7 = -0.8675 (-2.948e+008, 2.948e+008)
a8 = 1.225 (-1.956e+014, 1.956e+014)
b8 = 0.616 (-4.375e+012, 4.375e+012)
c8 = -0.03419 (-1.33e+014, 1.33e+014)

Goodness of fit:
SSE: 0.01188
R-square: 0.9992
Adjusted R-square: 0.9968
RMSE: 0.03854

以上是关于5 Matlab 的变量与数据类型的主要内容,如果未能解决你的问题,请参考以下文章

es6新增--变量定义与变量类型

matlab中怎么修改变量的类型

MATLAB基础2.0

MATLAB-数据类型

MATLAB变量 ( 变量引入 | 变量类型 )

如何在matlab定义函数中定义参数的数据类型