回顾链接 这是#第一话#的超链接,让大家对MATLAB有一个感性认识。
第二话
1-梳理一下MATLAB中的字符char、符号变量symbol和数值型变量double等的区别。经过图图长时间调研,发现大家对这三个概念不是很清楚,这突出反映在函数的使用上,比如在只接受数值型变量,例如x=1,的函数中传入了符号型变量syms x。
2-深入理解和区分一下函数文件和脚本文件,比如一个函数文件中是否可以定义多个function。
此外 小编提供了多版本的MATLAB破解安装包,可以在后台回复"电脑软件"自由获取。大家如果有问题或者看不懂的表述可以在文末扫码反馈!
![e8ca7973d76881ed773b7e72bb8a8f96.png](https://i-blog.csdnimg.cn/blog_migrate/fdd1ffce5555b57f6be7dafb587ee136.png)
PART 1 字符 | 符号变量 | 数值变量
字符——首先看字符x,赋值时采用
单引号
引起,注意工作区中x的前面带了‘
ch’,代表char,也就是
字符;此时计算x+1,发现结果是50!为什么?因为这是字符x,而另外+的1是一个数值,在计算的时候MATLAB内部自动进行了转换,采用的是x的
存储码进行计算!否则一个符号怎么能和一个数计算呢?你说字母A+数字1是多少?没有结果的!
![146d50b2c675741c0a887badb0d7a74e.png](https://i-blog.csdnimg.cn/blog_migrate/1b6d6658a2ef8224b7d28884238e415b.png)
我们再看一下更复杂的情况,此时x的变量类型大家注意看还是char,但是在算x+1的时候出现了三个结果,为什么?因为此时x其实是三个char组成的个字符数组,而不是一个含有‘123’的字符串。聪明的你肯定猜到了x是1行3列的字符数组。好了至此介绍完了char以及char数组,已经够用了。补充:关于
双引号的作用——用于字符串的定义,也就是string,这里不易混淆,也不做探讨,简单来讲,单变量char只代表一个字母,而单变量str可以代表多个字母组成的一串符号。
![8bd52e4f866c142b49e32239b21d40ed.png](https://i-blog.csdnimg.cn/blog_migrate/3c38d00cb9ae3d6320506470038f4497.png)
最后,我们可以将char理解成无法进行数学运算(注意不是不能运算,而是不能进行数学运算)的量,所以不易混淆,只不过它与符号变量名字有所相似。下面来看符号变量。
符号变量——我们在手算中采用都是的是符号变量,什么求导、微积分等等,可以说在我们接触编程环境之前所有的数学量都是符号变量,为什么?因为我们采用的所有数据都是精确的,不存在数值解一说。符号变量的特点是它不需要依赖一个具体的值,比如syms x,当x创建好了,我们也不知道x的值是多少;而数值变量则不然,数值变量必须时刻有个一值(比如我们定义x=1,当然特殊地,x=[],代表空值,通常用来向内存申请一个空间)
在matlab中
如何定义一个符号变量,请看截图,多种方式:
![f2d01bad9619ba5caef27798003b5470.png](https://i-blog.csdnimg.cn/blog_migrate/ed374ba8148040bd9fe05ce64672ef20.png)
先注意看
工作区(右上角)中每一个变量的值都是
sym标识,它代表这是一个
符号变量。
(此处小贴士,
大家在不确定自己的量是什么类型的时候可以在运行结束之后在工作区来看看!)第一行和第三行功能一样,但是函数不同,推荐大家用第一种方法;第二行同时定义多个符号变量,注意各个变量之间用空格而不是逗号;第四行是定义了一个符号变量的数组,维度是[3 3],即一个3行3列的矩阵里每个元素都是符号变量。
有了符号变量,我们就可以构造
表达式了,想想你在草稿纸上进行数学运算而不是编程环境中, 你就可以很好理解这一点。比如我们利用x构造一个符号表达式y,结果显而易见,如图中的y;我们也可以将符号变量x+1,得到的仍然是一个符号变量,这里的‘1’最好理解成常数项,而不是数字1会更好!
数值变量——
最后看一下数值变量,这个没什么好说的,形如x=1;A=[1 2; 3 4];都是数值型的变量,它们的值直接在工作区中显示出来,而且在变量名前没有任何标识符,大家仔细体会!
这是由于数值变量是MATLAB的根基,MATLAB最核心的是数值运算,其他诸如符号运算的软件有更为强大的计算工具可以替代!
此外,符号变量x无法强制转换成数值型变量x,参见如下报错:
![a6c6f2f4b02ef80279896d796dd5fc56.png](https://i-blog.csdnimg.cn/blog_migrate/d458fb7499e6b982830b328f054a5e26.png)
但是符号常量(注意
不是数值常量)可以进行转换。仔细看下面第一行,这里的x值为1,是精确的1,而不是数值的1,是不是有点懵?没关系,可以看工作区变量类型,即x为sym!
例子——
我们来比较一下
符号变量和
数值变量的区别,以两个绘图函数
fplot和plot为例,只做最简单的参数传递。
——fplot(fun)
:要求一个fun是符号表达式,即不用给出任何具体的值,就可以根据函数表达式绘制图像,当然函数内部有默认的定义域范围(怎么改后续画图推送会接着介绍)。这完全类似我们人工的画图思维,对吗?
——plot(x):
要求传入的是数值型变量(标量、向量、矩阵),且必须指定具体的值。
![8890e7ffdeb5c5e66ebbbe2ab1e674e8.png](https://i-blog.csdnimg.cn/blog_migrate/f62861bc2a42b097c2625bde73202846.png)
希望大家通过这两个函数的对比了解了符号变量和数值变量的区别,在MATLAB内部还有很多类似的
函数对照组,大家在使用的时候一定要注意,通常
以“ f ”开头的很有肯能是要求传入
符号变量的!
PART 2 函数文件和脚本文件
此部分总述
MATLAB 提供了一个强大的编程语言和交互式计算环境。我们可以在MATLAB 命令行中
一次输入一个命令(两个大于号那里),也可以向某个.m文件写入
一系列命令,按照与执行任何 MATLAB 函数的相同方式来执行这些命令。
.m文件分为两种:
——脚本,不接受输入参数或返回输出参数。它们处理工作区中的数据。
——函数,可接受输入参数,并返回输出参数。内部变量是函数的局部变量。
虽然后缀一致,在电脑文件夹看不出区别,可在MATLAB目录里可以看出区别,带有
fx的是函数文件,就是以
function开头的文件。
脚本文件
通常我们初学会先接受脚本文件,因为它只是函数命令的集合,不涉及封装。如下所示。使用edit function1新建一个名为function1的.m文件,如果已有,将先打开这个文件。接着我们写简单代码运行这个文件,发现工作区出现了变量的名称和值。这代表了什么?这代表了这些变量被存储在了工作区空间中(可以理解为全局空间,任何函数和命令都可以直接调用这些变量),这说明,脚本文件是对全局空间进行操作的。既然如此,当然不会存在传入传出参数的问题,因为,往哪里传呢,都在这里了!
函数文件
下面看函数文件,功能和function1.m完全一致,为了和脚本文件对比,我设置的函数
function2(
这个名字也是.m文件的名字,它们两个必须一致。详细来说:函数文件的第一行必须是function开头的函数声明,然后函数名必须和文件名相同
)
没有任何参数(
请注意,即便没有任何参数,小括号也不可以少!
)我们运行一下,发现工作区没有变量出现,
命令行的输出是分号不起作用的结果,我相信大家都明白什么意思,
只是为了显示这个函数确实运行了。这是为什么?
因为函数文件本身就创建了一个空间,所有的命令在函数的空间里运行,当然不会在代表全局空间的工作区中显示,这也就解释了函数文件必须要有输出参数的原因,否则接收不到运行结果!当然一些特殊函数,如clc,清屏,不需要任何输入输出除外!
一个函数文件可以写多个函数吗?答案是肯定的,如下图:第二个子函数被成功调用!
只要保证第一行的function与文件同名即可!
因为刚刚说了一个函数文件就是一个独立的空间,所以定义在后面的子函数function2_sub是无法在外部被调用的,只可以被这个文件里的其他命令调用!
看两个错误的例子,
一个试图调用函数文件里的第二个函数,一个没有保证第一行函数与文件同名,都是错的!
![0a1be3a26d4f9771d54b08eb22021dea.png](https://i-blog.csdnimg.cn/blog_migrate/f5c18bd47341f05c20dc6cdc357b47dd.png)
如果想要查看
函数文件运行中内部变量的值,可以
在数字右边单击,会出现小红点,代表断点,当函数运行到这一句时,会暂停,此时在工作区中看的的就是子函数里的所有变量,而全局变量此时是看不的!这也体现了函数文件的封装性。
![651d3b27bd1da46dafa145d99540ea12.png](https://i-blog.csdnimg.cn/blog_migrate/505893562ed09975d9da31a95131b809.png)
此外,补充一下匿名函数,有时候我们的函数短到没有必要写一个函数文件但又想多次调用时可采用。
![2483974b1be2436820df27f370475f95.png](https://i-blog.csdnimg.cn/blog_migrate/a430e30e28413ae4aab3395c3d1dd539.png)
本话完,下一话待整理...
如果觉得不错,可以打赏/在看/转发支持一下
写写你的建议给小编
![c6b358dea362421d0a19accc5bbb61ec.png](https://i-blog.csdnimg.cn/blog_migrate/6e11ec56ecf910a12448f7451aad1ec7.jpeg)
推荐阅读
图说“群体免疫”对抗“新冠病毒”真的有效吗?
图图的APPs | 你看过动态泰勒展开吗?想与外语母语者直接交流吗?
PPT模板 | 图图自制#蓝色#科研报告
![6bac0fd443d710a041929a4f803eecda.gif](https://i-blog.csdnimg.cn/blog_migrate/00e6195bdd7976d4c2c140f09883b9ac.gif)