粉丝1755获赞2979

今天我们一起来看一下 matlab 基本数据类型中的字符形和字符串形。 matlab 中有两种数据类型可以用来表达文本数据,字符形和字符串形。首先来看一下字符形字符数组的定义符号为一对单引号, 例如命令行窗口输入这样两条指令,得到一个输出结果,这就是一个自服型的输入。 字符型数组中以单个字符为元素,可以通过下标或序号进行锁引,例如命令行输入这样一条指令,输出的结果就是 前四个字符。由于马特 love 中任何类型的数组都必须遵循举行原则,字符型数组呢,如果有多行,那么每行上的字符个数,包括空格也必须相等。 例如命令行输入这样一条指令,得到这样一个输出,是一个三行的一个数组。 用 apple 函数和 lower 函数可以实现字符的大小写转换,输入这样两条指令。 第一条指令呢,是将第一行的每个元素都变成大写,第二条指令呢,是将从第二个字符到最后都变成小写。用类似函数可以获取字符的个数,比如 面临行输入这两条指令就是得到了自负的个数,但是这个指令呢,的自负长度是包括空格的。 用对布朗克函数可以将末尾的空白字符删除。命令为这个 输出的结果呢,就不包含空白字符啊。我们再来看一下字符串形。字符串数组是从二二零一六 b 版本才开始引入的一种数据类型,他是一对双引号作为定义符。 例如命令行输入这样两条指令,就得到这样一个输出,这是一个字符串型的数组。字符串数组呢,是以字符串为基本元素, 而不是字符在构成多尾数组时无需关心字符的个数。因此呢,比字符数组应用起来更加方便。比如命令行输入这样条指令,这是输出的结果, 就扩展为了一个两行三列的一个字符串数组。这里要注意一下,用到了两种定义空字符串的方法,一个是双引号中间压空格,这是用 mc 函数来定义暂缺值。 字符串数组呢,以字符串为元素,用下标锁引的时候,返回的是对应位置的整个字符串,比如命令行输入这个一个指令 得到了,返回的是第一个元素,也是一个字符串。数字与字符间的转化在编程中会经常用到。常用的命令是这样一些 在玛特拉布中,字符和字符串在绝大多数场合是可以混用的。适用于字符型参数的函数,一般也适用于字符串形参数。好,关注我,后面咱们再来看一下其他的数据类型。

各位 b 站的小伙伴们大家好啊,介绍完我们的 python 代码之后呢,我们也需要再去介绍一下我们的 madlab 代码, 那在讲解代码之前呢,我们需要先讲讲 madlab 的 一些基础的使用教程,比如说一些复制了一些简单的加减,以及各个工作区的一个介绍,那如果说已经会用这个软件的小伙伴们,可以直接跳到后续正式代码的一个讲解。当然呢, 而如果说啊,还有一些小伙伴还没有安装软件的话,也可以关注我们的公众号,回复软件两个字,他就会弹出一个推文啊,就我们根据推文里边的提示词去获取我们的安装包就可以了, 同时呢,我也会在资料里边放我们的 my lab 安装包以及安装教程供大家去使用。好。安装好这个软件之后呢,我们打开就可以看到这样一个界面, 上边呢是我们的工作栏,然后左侧呢是我们打开的文件夹,那如果说我们需要访问一些 excel 中的数据啊,就需要把 excel 放到这个文件夹下边, 中间呢是我们运行命令的一个窗口,也就是执行代码的地方。而右边呢是我们的工作区,这个呢主要是用于存放我们生成的各种变量。那如果说我们在使用过程当中呢,一不小心的拖动了某个工作区对不对?或者说我们甚至关掉了某个工作区,这样我们在看的时候非常难受, 我们可以点击这个布局默认,这样呢就恢复到最初一开始的状态了。好了,这个就是界面的一个介绍, 在编程语言当中呢,等号通常表示负值,比如说我在命令行窗口输入一个 x 等于一, 这个意思就是把右侧的这个数值复制给左侧的一个变量。在这里我查一下啊,不管是 madlab 还是 python 当中,输入代码的时候一定要用英文格式,不然会报错,这个呢要养成习惯。 还有一个就是比较规范的写法,就是像这种运算符和这种变量之间呢,他会以一个空格去隔开,这样写会比较规范,看起来这个格式化呢,会更加清晰一些,但是如果说你不要这个空格,他也是可以的,也是能运行的。 好的,我们按下回车,回车的作用呢,相当于是运行这条命令,这个与脚本编辑器不同,脚本中按回车只能是换行,这个呢稍后会讲。然后运行之后呢,命令行窗口就会显示我们的结果, x 等于一。同时呢,在右侧的一个工作区, 变量 x 会以一个一乘一的矩阵形式被存储。由于 madlab 啊,它的中文名字叫矩阵实验室,是专门用于处理矩阵的,也就是它在某些细节方面它是优于 python 的。 你比如说呢,我在这个工作区当中,我可以右键,然后选择它显示的内容,比如说最小值或者最大值等等的,或者极值或者极差, 我们呢可以根据自己的需求让它去显示。此外我们还可以双击这个变量名,直接以表格的形式打开该变量,非常直观的查看其数据的内容,这一点呢是 python 当前难以实现的, 这个是变量存放在工作区的作用之一,而另一个作用呢,是调用变量,你比如说我在工作区中输入 y 等于 x 加一, 它呢会直接调用 x 的 值并运行它,结果是二,然后呢会把这个二复制给 y。 而如果说我只想计算一个表达式,比如说我只想计算 x 加 y 吧,点击回车,它呢会帮我们自动生成一个 answer 的 一个变量, 也就是这个 ans, 然后把结果存储进去。如果说啊,我们在使用的时候发现啊,这个命令行窗口,包括这个工作区很乱很杂的时候,我们可以在命令行窗口啊输入 clc 去清除,这样呢,我们就可以把命令行窗口清除掉,或者呢,我们可以右键选择清空命令行窗口,这个作用呢是 clear 回车运行,这里呢工作区也被我们清空了,或者呢,我们也可以右键然后选择清空工作区,这个的作用呢是一样的, 如果说有看到过 my lab 代码的小伙伴们,他们应该会发现,就每一个代码包前面呢都有一个这样的命令, 它这个呢就是用于清空这些数据的。好的,以上呢,就是一些简单的预算和赋值了。 那不过我们一般不在命令行窗口去运行代码,因为这个它更像是一个临时工作的地方,如果你关掉了 maclab, 再次打开这些记录啊,都会消失的。 而如果你想保存你的代码,就需要用到脚本,我们点击这个主页,然后下边有两个,一个是新建脚本,第二个是新建实时脚本。 我们先看这个普通的脚本,我们可以点击或者说按快捷键 ctrl 加 n, 这个时候呢,我们就可以输入我们的代码了,比如说 x 等于一 y 等于一 x 加 y, 然后在这个时候我们就可以运行了,我们的运行不再是回车,它的运行快捷键是 f 五,或者我们可以点这个运行,当我们点击这个运行之后呢,它会需要我们保存一下这个文件,也就是把我们的代码保存下来,我们命名一下文件名,就可以选择保存了, 大家看这个时候呢,我们的答案就已经算出来了,而如果说当你关掉 madlab 的 时候,也就是我关掉这个文件之后呢,我把这块清空一下,然后我们再次打开这个代码包, 大家会发现这个代码还是在的,我运行一下这个结果呢,也是没有任何问题的。 这个呢就是我们的普通脚本了,而我们的实时脚本呢,它更像是 python 里边的 script, 我 们可以把代码运行的结果图像和文字说明放到一起去啊,这样呢能让我们的代码的可读性更高一些, 同时呢可以实现分块运行代码,这个功能我们用的会比较多一些。文本和代码的切换呢,它的快捷键是 alt 加回车,这样呢我们就切回到了我们一个呃文本格式,我们可以先给 x 和 y 赋值, 同时呢我们还可以给这个文字去做处理啊,我们先选中这块文字,点击实时编辑器,这块呢,就是我们可以给文字进行加粗啊,倾斜啊,或者加下划线啊,都是可以的。 它还有一个比较厉害的点是什么呢?就是我可以直接把图片复制进去, 比如说我复制这样一个图片,我可以直接 ctrl 加 v, 能直接把这个图片贴进去,这个做笔记什么的还是非常方便的。然后我们再按一下 alt 加回车,这样呢就回到了我们一个代码区,我们输入 x 等于一, y 等于一,然后呢我们再按一下 alt 加回车,我们来求 x 加 y 的 值。 然后右侧这块呢是设置结果的显示方式的,默认呢是会把结果显示到这块来,而为了方便观察,我们一般都是选择这个内嵌输出啊,也就是让这个结果呢是显示到我们的下边的。好,我们运行一下, 大家看到这就求出了我们的结果呢,我先把这个图片删掉, 但是呢这又会有一个问题啊,就是如果说每一行的代码它都输出的话, 那这样就会显得这个结果很乱,那为了只显示我们关心的结果啊,在一些我们不需要显示的句末尾啊,加上一个分号,你比如说像前面这两句我们就不需要,我们可以加上一个分号, 我们再运行一下,大家可以看到上面这两个就不会输出结果,我们只需要 x 加 y 去输出一下我们的结果。 还有一个呢就是分解符,这是我们用的比较多的,也就是把代码分成一块一块的,比如说我在 y 加一后边呢插入一个分解符,也就是这个蓝色的线,这个时候呢我就可以运行这一块的代码了, 我可以选择运行结,也就这个地方我点一下,大家可以看到它只运行了这一块,因为没有结果,我把这个分号先删掉, 大家可以看到这个就输出了我们这一块的一个结果。最后一个呢就是我们编辑代码过程当中最经常用到的一个东西就是注视了,我可以在代码区域去放上一段文字来解释我这串代码, 只要我把它注视掉呢,这个代码就会默认不运行了。注视的快捷键呢,是 ctrl 加 r, 而你如果想取消注视呢,就是 ctrl 加 t。 好的,以上呢,就是 metlab 中的一些基础知识和用法了,至于一些数据读取啊,各种函数的定义和调用,我会在第一次遇到的时候跟大家讲的。这样呢,我估计大家的接受度可能会更高一些。我们有这些基础知识呢,就可以真正地进入 metlab 的 代码学习当中了。

宝子们是不是刚打开 metallab 就 一脸懵?满屏的图标窗口不知道该点哪,该在哪写我们的代码。 今天咱们不聊复杂操作,就用三分钟把 metallab 界面扒得明明白白。首先咱们看最上方,这可不是普通的菜单栏,是新手的操作指挥中心。 主页栏包含最常用的新建脚本,脚本文件一般是咱们存储代码的地方,而且这里藏着个数据清理器,可以做简单的数据域处理操作,包括异常值和缺失值处理,大家感兴趣的话可以先试试哦!绘图栏不用写代码,点一下就能给数据画折现图、 柱状图,甚至三 d 图。咱们以这个代码的运行结果为例来演示一下。首先在工作区选中需要画图的变量,再选中咱们想画的图像类型,比如我只想画个折线图,点击 plot 即可得到。这里还有更多好图等你发掘哦! 应用程序栏藏着超多现成工具,比如渠县,你核信号分析,新手直接用不用从零写代码。接下来是核心区,这个叫命令行窗口,是即时聊天框,输入一行代码,按回车马上出结果。 比如输入 dsp hello 小 白,它就秒回你。而右边的工作区就是变量收纳盒,你定义的所有数据矩阵都会存在,这 鼠标点一下就能看内容,双击还能直接编辑,比如把变量小恩的值改成两百,超方便隐藏彩蛋。在命令行输入 doc 函数名,比如 docson 会弹出官方教程,新手别只会百度啦。最后是新手必用的脚本编辑器,别在命令行一行行输代码, 点新建脚本,把代码写在这个白色窗口里,保存成 m 文件。这一步要设置文件存放地址和文件名,点运行按钮就能批量执行。 注意,如果存放代码的地址和当前文件夹地址不一致,会出现弹框。选择更改文件夹或者添加到路径都可,不过二者有点区别,点击更改文件夹会使得你的当前文件夹跳转到脚本所在的文件夹的位置,点击添加到路径,不会改变当前文件夹的位置,直接运行。 而且之后编辑器也会认识当前文件夹的位置,意味着该文件夹下的函数、脚本等文件只要在整个搜索路径范围内是唯一的,在 matelab 的 任何工作文件夹下都可以被直接调用。 我这里习惯选更改文件夹,大家就按需选择了。这里介绍小白不知道的两个隐藏功能,工作区绘图魔法,选中变量右键点 plot, 不用写一行代码, matlab 自动给你画好图,命令行输入 x p b o n b s。 学累了,玩一玩扫雷超解压。好啦,今日的学习到此结束,关注我,下期教你们 matlab 更多内容!

shift 加一是叹号, shift 加二是艾特号, shift 加三是减号, shift 加四是货币符号。也就是说你像这个键盘上这些 一个键位上它有两个符号,对吧?这样的键位它叫双排符号键,还有像这样的这些逗号、句号,对吧?这些冒号什么的,这些就是一个键上有两个符号的,这叫双排符号键。如果说我们想把 嗯,这个上面的时候符号输入的话,需要我们摁住 shift 键不松手,再去摁这个箱的键,输入的就是上面的这个符号,比如说冒号, 摁住 shift 键不松手,然后再去摁这个键,它就是上面的冒号。如果说想输入分号的话,你就直接摁这个键就可以了, 嗯,对吧?如果说比如说问号, shift 键加这个键,它输入的都是上面的这些符号,哈,这叫双排符号键,明白了,同学们学会了吗?


大家好,欢迎来到数码交易站,那么的话本次给大家带来的是马尔科夫算法,那么什么是马尔科夫算法呢?我们前面也提到过马尔科夫算法,就是说下一状态只与当前状态有关,而与其他的任何状态都没有关系。有时候我只注重于当下,历史信息对我完全不会影响我当下的一个决断, 我所做出的一个决策永远只与当下有关,永远的是处于一个客观的状态,不会被过去的一个任何的一个事物,任何的情况所影响,那么的话这个就是我们的马克算法, 那么状态转移矩阵,那么这个矩阵的话,一般在我们数学建模比赛里面不会直接给出,这个矩阵是需要我们自己去进行计算的, 那么我们怎么去计算这个矩阵呢?那么其实在我们后面的一个梳理统计环节,我们会讲到那个大数定律以及我们的一个参数估计,那么里面的话有一个概念叫做极大似量估计,那么的话大数定律,极大似量估计,这种听起来非常高大上的名词,那么实际上是什么呢?实际上就是我们的一个数据, 他那个概率值,当我们的样本量足够大的时候,他的频率值会逐渐逼近他的概率值,就像我们抛硬币一样,当我们抛的次数越多的时候,他的一个频率会越来越接近二分之一, 那么这个也是同样的,在我们数学建模比赛里面,如果我们想要用到马尔科夫算法的话,然后题目又没有直接的给出我们这个状态转移矩阵,那么我们就可以用真实数据它的一个频率值来作为我们的一个概率值的一个估计,那么这个概率转移矩阵我们应该怎么去看呢? 首先第一条代表是晴天,第一天是晴天,第二天是晴天的概率值是百分之七十。第一天是晴天,第二天是阴天的概率值是百分之二十。第一天是晴天,第二天是雨天的概率值是百分之十。然后同样的第二个也是第一天是阴天,第二天是晴天的概率值是百分之三十。第一天是阴天,第二天是阴天的概率值是百分之四十。 第一天是阴天,第二天是雨天的概率值是百分之三十。那么雨天也是一样的,第一天是雨天,第二天是晴天的概率是百分之二十。第一天是雨天的概率值是百分之三十。第一天是雨天,第二天是雨天的概率是百分之五十。 那么根据这个概率转移矩阵,我们就可以来生成一组数据,然后的话根据他的一个转移的概率值来生成我们一组真实数据,那么实际的情况应该是我们根据这个数据去算到这个概率转移矩阵。哈, 那么这个数据我们应该怎么生成呢?首先的话依旧是生成一个全零的一个序列,然后指定我们这个序列的第一个值就是我们的一个初值状态,然后当前状态也设置为我们的初值状态, 然后从第二天开始我们就要去计算它的概率值了,那么概率值的话就根据我们当前状态去把那一天的一个状态转移矩阵的一个行给他取出来, 然后的话这一行是有几个值?三个值对不对?然后我们就可以从一到三里面去取随机数,然后这个随机数怎么取呢?原来 sample 是 表示从一到这个这个值他们中间去任取一个数,然后取出的概率值就等于他的一个他的取值,那么他就是这个东西。 然后我们就根据这个随机抽样的值来确定我们下一个状态的值对不对?然后的话再把我们当前的状态置为下一个状态,然后再重复这个过程,然后的话我们就可以得到根据我们这个状态转移矩阵,然后生成了一组随机数列, 然后的话我们这个地方生成了三十天的一个随机训练,那么下面我们就把这个随机训练的前十行给它打印出来,看看它到底是什么样子的。那么晴天,晴天,雨天,雨天雨天,然后晴晴晴阴阴, 那么接下来我们就要根据这个数据,然后呢重新的去计算我们的一个状态转移矩阵了, 那么的话这个估计的话就是用我们的一个极大自然估计去做估计,实际上也就是把它的一个观测值做我们的一个实际的一个值 指数,我们现在给他取了一个比较高大上的名字,叫做极大自然估计,那么我们发现当天是晴天,第二天是晴天。出现的一个频率是十五次,然后当天是晴天,第二天 是阴天,是两次,当天是阴天,第二天是阴天,是一次当天阴天,第二天雨天,是一次 当天雨天,第二天是晴天,是两次当天雨天,第二天阴天,是一次,当天雨天,第二天是雨天是三次,那么我们是不是很好进行计算呢?那么当天是晴天,第二天是晴天的概率值就是十五除以十五加二加二,对不对?然后阴天和雨天都是二除以十五加二加二, 阴天也就是百分之五十,百分之二十五,百分之二十五,对吧?那么这个呢?二除以二加一加三,一除以二加一加三,还有一个是三除以二加一加三,对吧?得到的是这样一个值,这个的话就差了一个估计值,那么的话在我们的一个数学建模比赛里面,我们就可以用这个值来作为我们 概率转移方程的一个估计。那么到了后面的话,其实也就和我们前面一样,根据当前的状态来预测第二天的一个状态,然后的话看看它的一个 频率的一个变化是怎么样子的。那么我们可以很明显的看到它的这个晴天,它的一个概率值是朝着百分之七持续进行逼近,对吧? 然后雨天是朝着百分之二十逼近,然后的话阴天是朝着百分之十逼近,这个是不是跟我们状态转移宇宙里面的那个零点七零零二零点一是比较相似的,对吧?随着它的一个时间的增加,它的一个频率越来越接近我们的一个真实的一个概率值,这就是我们大数据定律里面的一个内容, 那么后面的话我们就可以去得到它的一个稳态分布,用我们的最小二乘去进行求解。那么最小二乘的内容是在我们的一个陷阱违规里面,实际上也就是我们用用我们的陷阱违规去进行求解,那么的话我们可以画一说,一说画这个组图的一个技巧。我们怎么去画这种组图呢? 我们可以用 color layout, 然后的话指定一个二乘以二的一个矩阵,然后我在第一个矩阵的地方画了一个热力图,对不对?矩阵的第一个位置,然后的话在矩阵的 第二个位置画了一个预测的一个概率变化,它们俩就是并列的一个关系。然后下面这个图呢 一行二列,我在第三个地方画了一个图,它的一个占比是一行二列,对不对?然后的话就可以画出来这样一个组图,那么的话,包括我们还有各种各样的排列组合的方法的话,我们都可以用这种方法去进行绘制, 或者是就说我们用三 plus, 对 吧?那个三 plus 也可以去绘制,但是的话我们用这种那个太阳的话的一个定制化的程序可能会高一点, 包括我们还可以用网格排布的方法去画这种组图,那么的话这种画图的一个技巧也是我们在国产里面,或者说在各种各样的数码比赛里面要去掌握的。毕竟有些图片的话,单张图是很难表现出来的一个特点的,我们要用一些组图去增强他的一个效果,对吧?增强他的一个个可观性。 那么除了我们的一个一阶马尔科夫的话,也就是当前下一个状态与当前状态有关,我们还可以有一个二阶的一个马尔科夫二阶转移,也就是说下一个状态与当前状态与上一个状态有关。 但是实际上的情况下的话,我们的一个麦尔客户链,他的一个期望是我们下一个状态只与当前状态有关,所以说上一个状态应该与下一个状态他们之间是相互独立的。也就是说我引入了上一个状态,他并不太影响我下一个状态的一个变化, 也说我引入和没引入是一样的,那么的话这个东西用我们的一个概率的表达,就是这个应该也是我们在后面在梳理统计里面会去讲的东西,二者相互独立,对吧?我现在引入了 上一个状态,上一个状态的发生对下一个状态有一个影响,它的一个条件概率,我们的期望应该是他对于下一个状态是没有任何的影响的,所以说我引入了上一个状态,那么的话对下一个状态也是没有任何影响的,这个是我们所期望的, 那么我们就可以根据这种思想去做一个检验,看看我们这个马尔科夫它到底符不符合我们这个马尔科夫的特性。 那么可以看到一阶的一个概率转移和二阶的概率转移,他们之间差别并不是特别大,对不对?他的误差只有零点零二五, 所以说的话我们可以得到他的这个状态确实基本上只与下一个状态,确实只与上一个状态有关。所以说我们可以得出这个数据,他的下一状态确实只与当前状态有关,而与上一个状态没有什么太大的关系。那么的话这个马尔科夫的一个概率表,他就是一个稳定的概率表, 是符合我们的一个模型的一个假设的,那么我们再来看一看下一个例子,那么的话其实也和是和之前一样,我们只是换了一个场景,那么的话这个东西大家应该也很明确了,高频到高频,高频低频,高频的流失 和我们晴天到晴天,晴天到雨天,晴天和到晴天是一样的,只是我们现在换了一个场景,对不对? 那么像马尔科夫的话,在我们时间训练也好,或者说在在时间训练里面是用的比较多的,包括像我们国赛二零二零年的那个 c t 还是 b t 吧?那个穿越沙漠对不对?它的一个天气状态转移也是可以用我们的马尔科夫去做。然后的话像我们研赛里面也会经常涉及到马尔科夫的性质, 那么我们的核心就是要用它的一个频率值去估计我们的概率值,然后的话再去检验我们这个概率值是否稳定, 是不是符合我们马尔科夫模型的一个构建的一个条件。那么如果不符合的话,那我们肯定就要考虑其他模型了。那么如果符合上一状态与下一状态相互独立,下一状态只与当前状态有关的话,那么我们就可以考虑用马尔科夫去进行预测。 然后其他的话基本上也是说和我们的一个场景相结合一下,比如说我们在营销里面的话,我们还有什么 c l v, 对 吧?客户是不是有价值,我们可以引入一下, 然后的话它的一个核心的一个思想还是不变的,就是下一状态只与当前状态有关,其他的我们都不用太过 care, 只需要在我们打数学建模比赛的时候去补一补相关领域的一个知识就可以了, 我们的模型是不会变的。那么像你们一些比较详细的统计的知识的话,在我们后面的一个梳理统计的环节会给大家去做详细的讲解。 那么的话,相信我们后面大家学了梳理统计之后,到了条件概率统计性之后,对于我们这个刚刚写的那些条件概率的公式会有一个更加深层的一个理解, 那么我们本次的一个内容就到此结束,那么的话接下来就进入到我们梳理统计的环节。


各位 b 站的小伙伴们大家好,这里是树莓加油站,本节课要讲的呢是 top cs 法的一个 made live 代码,代码文件已经给大家打包好了,大家只需要联系小助理领取就可以了。好的,我们直接开始啊,先简单的过一下我们的代码,前面这一块呢是对出师矩阵的一个正向化, 然后下面这个呢就是标准化,最后呢计算我们的最大值,最小值的一个距离啊,最后呢求出我们的一个得分。 除过这个主代码之外啊,还定义了一些函数,有什么呢?有我们的这个函数,以及我们的 min to max 函数,以及 man to max 函数,还有我们的这个函数,我们等一会用这些函数的时候再去看它们具体的内容啊。好的,我们回到我们的主函数当中, 我们从头一行行的去看啊,先是这个 cllc 清除命令行和工作区的内容啊,常规操作了,这句话呢,它是一个注示啊,我把我那个出师矩阵呢提前输入进去啊,后续直接复制就可以了。 下面这句代码呢,是我们输入我们的出师矩阵 input, 里面这个呢是我们的提示词,这是方便我们在运行的时候知道我们要输入什么。 而下面这个 season 的 函数呢,它是查看矩阵的行数和列数的,也就是把矩阵 x 的 一个行数呢复制给 n, 把矩阵 x 的 一个列数呢复制给 m, 而这个行数啊,其实就是我们评价对象的一个数量,而这个列数呢就是我们指标的一个数量,像这种之前讲过的一个函数,我们过的就会快一点, 那么下边呢就是输出一下,我们有几个评价对象,几个指标。这个函数我们第一次遇到,给大家讲一讲,这个就是用于将变量转化为字母串的,也就是差的类型啊, 这个 number two, string 就是 它的函数,名 number 就是 数字, two 就是 到的意思, string 就是 字母串的意思, 它的基础语法呢,就是下面这样一个式子,括号里边只有一个变量,这个 n 呢就是我们输入的数值,我们可以是标量,也可以是向量矩阵,或者说多余数值。我们直接看下面这样一个例子啊,这个 n 等于十, 那下面这个 class 什么意思呢?它其实就是输出 n 的 一个类型啊,我们先输出原本 n 的 一个类型,然后呢再去输出一下用 number two string 的 这个函数处理过后的一个类型,我们运行一下, 看到没有,它一开始呢是一个 double 类型的,也就是数值型的,然后后边呢它就变成一个叉类型的。如果说啊,这个变量是一个矩阵,我们再运行一下,其实它效果是一样的,它还是一个 double 类型,变成一个叉类型的,对不对? 那为什么这个地方要用这样一个函数呢?是因为这一块啊,它是准备去输出一个字母串的,也就这些汉字啊, 如果单纯把 n 跟 m 放进去的话,它就只会去输出共有 n 个评价对象, m 个评价指标,它是不会把具体的数值去输出出来的。那这就需要借助这样的一个函数运行给大家看一下。我们先输入我们的矩阵 a, 大家可以看到是不是这块就是四个评价对象,四个评价指标,而不是说 n 个评价对象, m 个评价指标,那么下面这一块,它是用于判断我们这个矩阵需不需要去进行正向化处理的,如果需要呢,就输入一,然后把这个一复制给这样一个变量, 如果说不需要,那我就输入零,并把这个零复制给这样一个对象,然后就用 f 语句判断了这个变量,如果说等于一呢,就表示需要进行正向化处理,那么就运行下边这一块,否则呢就不用去进行处理。我们看一下 f 语句里面代码块啊, 它首先呢先用 input 去收集一下哪些列是需要进行处理的,把输入的数据呢给存放到这个 position 这个变量里边,下面这一句啊,它是输出了一句提示句啊,就表示一是极小型,二是中间型,三是区间型。 然后啊就再用这个引铺的去收集一下刚刚那些需要处理的列,他都是什么类型的,这种啊,都需要按顺序去输入的,而对于我们来说呢,也就是我们的第二列,第三列,第四列是需要进行处理的, 分别是我们的极小型、中间型以及我们的区间型,对不对?所以呢它就是一二三。然后呢就正式开始去处理我们的一个数据了,它呢是利用了一个 for 循环语句啊,这里边这个 position 和这个 type 啊,它都是一个项链, 所以这个 c 呢,它的函数后边呢是一个二表示,它要按行去求表示。计算一下这个 position 它有几列啊? 这个呢其实就是计算我们一共有几组数据需要去进行处理啊,这个呢也就是我们循环的次数,而下边这个循环体呢,利用了这样的一个函数啊,这个函数呢,是我们自己去定义的。先给大家讲讲怎么去定义一个函数啊, 在 madlab 当中啊,函数是用来执行特定任务的一个代码块啊,它的基础语法呢,就是下边这一串。 这个方神呢,是关键字用于定义函数的。紧跟的这个中括号呢,这个是函数的输出啊,如果是多种结果的话,那我们就像这样样,用中括号去给它括起来,中间的每一个结果呢,用逗号去给它隔开,然后呢就是一个等号,后边这个就是我们的函数名, 它是用于后续调用的。括号里边的这些呢,就是我们的一个参数了。下边的这些啊,就是我们的一个函数体呢,它就是通过对我们输入的这些变量去进行一系列的操作,然后输出出来。 这个 int 呢,其实就是标志函数定义的一个结束啊,我们直接看这样一个例子啊,这个是计算两个数之合的一个函数啊, function 就是 它的一个关键字,紧接着就是我们输出的一个结果 sum, 然后后边呢就是等号,这块呢就是我们的函数名。括号中间呢就是参数 a 和 b, 它的函数体呢,其实就是把参数 a 和 b 相加,然后复制给 sum, 最后呢用 int 去结束。 我们调用的时候啊,就只需要用到这样一个函数名就可以了,然后在括号当中呢放入参数就可以了,所以这块他应该是输出三加五等于八,对不对?我们运行一下,哎,没有任何问题, 正常我们可以把函数定义直接放到主函数里边,同时呢我们也可以单独的把它放到一个点 m 文件里边,如果是放到点 m 文件里边,就需要把这个文件和主代码放到同一个根目录下边,也就像这个样子一样, 不然你是没有办法调用的。这块还有一个需要注意的就是他的文件名必须跟他的函数名是一致的,不然也是无法调用的。好了,我们回到我们的主函数当中, 这块啊,他是直接调用了这样一个函数,这就是他的一个函数名,他的作用啊是进行正向化,里边呢,输入了三个参数啊,我们看一下这样一个函数, 上边这块讲的是怎么定义函数了,我们刚讲了,也不用再看了,我们直接看它的下边,先是一个 function, 这个 post 杠 x 就是 它输出的一个结果,后边这个呢,就是它的一个函数名了,它呢这块呢,就输入了三个参数, x 就 表示需要正向化处理的指标,它对应的一个原始的列向量,而这个 type 呢,就是我们刚刚输入的每列的指标,它的类型是什么?是极小型的还是中间型还是区间型?而这个 i 呢,表示那些需要处理的指标现在处理到哪了? 下边呢,就利用了一个 if 语句,它是通过 type 来判断这是一个什么类型的,从而进行不同的一个操作,如果是一的话,就表示是极小型指标,我们先看一下它的这个公式啊,极小型指标其实就是用最大值去减去它本身。 好的,我们再回到我们的函数当中,它这句话呢,其实就是输出一个提示句,然后呢又调用了一个 min to max 的 一个函数,这个其实相当于是一个函数套函数的一个形式,我们再看一下它这个 min to max 是 一个什么样的函数啊? 这个呢就简单多了,这个 pos 杠 x 也是它输出的一个结果,这个参数呢只有一个 x, 函数体呢,就是先用 max 去找到 x 里边最大的一个值,那也就是这个 max, 对 不对?然后呢去减去 x, 也就减去它本身, 然后呢再用最大的去减去每一个 x 的 值,把这个结果呢复制给 pos 杠 x, 然后我们再回到我们的一个函数当中, 这个结果其实就是处理好了一个极小型指标,对不对?然后再把它呢复制给这个函数里边, post 杠 x 也就输出的一个结果,对不对?然后再把它再复制给这个函数里边的 post 杠 x, 然后输出出去。 那如果说啊这个 type 呢,它等于二呢,就表示它是一个中间星指标,那这一句呢就是一个提示句,我们就不提了,下边这块需要我们输入我们最佳的一个值,然后把最佳的这个值呢复制给 best, 也就是公式里边的这个值,对不对? 然后呢又调用了一个 min 的 to max 的 一个函数,我们再看一下这样一个函数啊,还是先看一下公式吧,它其实就找着所有值与最佳值差值的最大值啊,对不对?然后呢让它等于一个 m, 然后去求每个元素与最佳值的一个差值,再去除一个 m, 最后呢用一减去它就处理好了,我们看一下我们的代码, 这 max 就是 求最大值的一个函数,这个 abs 呢,是求绝对值的函数,这里是不是就是一个求 m 的 一个公式啊? 就他这样一个式子,对不对?然后下面这个就是用 x 去减去最好那个值,然后求一个绝对值,再除以 m, 再用一减去它,这就得到我们一个结果,把它复制给 post 杠 x。 好 了,我们再回到我们刚刚的一个函数当中, 这样呢,我们就把我们的中间型指标处理好之后呢,把结果复制给 post 杠 x。 那 如果说这个 type 等于三,就表示它是一个区间型指标,对不对?同样的先输入这样一个提示句,然后呢需要我们去输入啊,这个区间的一个下界跟我们的上界,把它复制给 a 和 b, 再往后走了,就是调用了这样一个函数啊。好了,我们再看一下这样一个函数,它里边有三个参数,首先啊,它就是先确定一下 x 列向量有多少行,这个 c 呢,就是求它的一个维度的,对不对?然后把这个函数呢复制给这样一个变量, 下边这块其实就在球门的大 m, 我 们看一下这样一个式子,是不是跟它很像啊,对不对?也就是所有数值这个区间的一个最大值啊,对不对?然后把它复制给 m, 再往下走呢,它就用了一个 zeros 的 一个函数,这个是用来创建一个元素全为零的一个矩阵的, 它有两个参数啊,一个 n, 一个 m, n 表示创建零矩阵的行数, m 呢表示创建零矩阵的一个列数。我们直接看下边这个例子啊, zero 二三表示的就是我要创建一个两行三列的零矩阵,我们运行一下 没有任何问题,对不对?那如果说它只有一个参数呢?就表示啊,它要建一个方阵,那 zero 是 三呢?就表示它要建立一个三乘三的一个方阵,我们输出一下 是不是没有问题,对不对?我们再回到我们刚刚的一个函数当中,这里啊,其实就是先求出 x 的 一个函数,然后用这个函数呢去创建了一个和 x 同维度的一个列向量, 这个是为了后续去存储计算结果用的。下边就是用了一个负循环,从一到这个二杠 x, 也就表示 x 有 多少行,我就运行多少次。如果这个 x 的 第二个元素小于 i, 也就小于最佳区间的一个下限,那是不是就这样一个情况,对不对?那么就要用这样一个式子了,看到没有,他下边这个呢,就是一减去区间的下限,去减去他的一个值,然后再除以一个 m, 那 是不是就是这样一个情况,对不对?那就要用这样一个式子了。我们回到代码当中,他就用区间的一个下限 a 去减去 x 的 值,然后除以一个 m, 最后呢用 e 减去,把这个值复制给 post 杠 x。 如果说它不小于 a, 那 我们就接着判断,看它是不是大于 b 啊,如果大于 b 呢?那就是这样一个式子,对不对?同理呢,就用 x 值去减去 b, 然后除以大 m, 最后呢用 e 减去这样一个值,把它复制给 post 杠 x。 那 么如果说它既不小于 a, 同时呢也不大于 b, 那 就说明它在这个区间里边,对不对?那它的值就等于一把这个一复制给 post 杠 x。 以上呢就是我们中间性指标一个处理过程啊,我们再回到我们刚刚的一个函数当中啊, 这是不是就是把我们的区间性指标给我们处理好了,然后把这样一个结果呢,给它复制给 post 杠 x, 最后呢,这三个类型的指标是不是都处理完成了,对吧?我们回到我们的转入当中, 我们把已经正向化的一个数据啊,给它复制给 x, 再往下边看呢,这下边就输出一下我们正向化之后的一个矩阵 x 好 了,到这里大家应该能跟得上吧。 然后下面的就是对正向变换矩阵的一个标准化,这串代码有点长,我们先从里边去看,这有个 x 点乘 x, 这个就是举针对应元素相乘啊, 在 my lab 当中,它的基础语法呢,是这样一个式子啊,这个 a 跟 b 呢都是矩阵,我们直接看下面这个例子吧。这个 a 呢是一个两行两列的矩阵, b 呢也是一个两行两列的矩阵,然后 c 呢就等于 a 点乘以 b, 然后输出我们的 c, 我 们运行一下, 大家看它这个 c 啊,其实就等于这个一乘以五等于五,二乘以六等于十二,三乘以七等于二十一,四乘以八等于三十二,对不对?就是各个位置的元素啊,去对应相乘,然后就求出我们的一个 c, 那 如果说这个地方只放一个乘号呢,也就是矩阵 a 乘以矩阵 b, 它就是我们现行代数学的一个矩阵乘法呀,第一行元素去乘以后边矩阵第一列的元素,我们运行一下 他这十九怎么来的,其实就是这个一去乘以这个五,加上这个二乘以这个七,也就是五加十四等于十九,对不对?后面就不跟大家算了,这个需要注意的就是呢,这个 a 和这个 b 必须要有相同的维度,也就是他们的行数和列数都要一样才行。 在数学建模当中啊,这个点乘了他用的会比较多一点,那么这块其实就他自身的元素去乘以他自身的元素,也就是给每个元素一个平方啊, 如果说我们不太好理解,我们看这样一个公式啊,对不对?他是不是就是先给各个元素去平方一下,对吧?然后呢用了一个 sum 函数,这个之前讲过求和用的,不知道大家还有没有印象, 他呢有两个参数,也就是一个 a, 一个 dm, 这个 a 呢就是要处理的矩阵, dm 呢就是参数 dm, 它是用来控制求和方向的,如果说 dm 等于一呢,表示按列去求和,但等于二呢,就表按行求和,如果你不填呢,它默认是按列求和了。比如说下边有这样一个矩阵,对不对?我们直接输出我们的 sum a, 它应该是按列求和,它应该是等于五七九的 好,没有问题。那下面这个例子呢,他的后边参数等于二,表示他是按行去求和了,那他应该是等于六十五,对不对?我们运行一下好,没有问题。 所以这块他其实有平方之后呢去按列求和,你看这个公式啊,他是不是就下面这一块呢?也就根号里边的这个东西,对不对?那他下一步是不是该开根号了呀?对吧? 所以呢,他这块就是一个点拐,然后零点五,这个拐我们大家都知道是求密的意思啊,那零点五次方呢,是不是就是开根号啊? 对不对?点拐就表示对,每个值呢都开一下根号,那就这个分母对不对?而外面这个 remap 的 函数呢,这个也讲过,它是用于重复数组的,我们再复习一下, 它里边呢有三个参数,第一个参数呢是我们的原始矩阵,这个 m 呢是行的重复次数, n 呢表示列的重复次数。 只要看这样一个例子,如果说我们的 a 是 一个两行两列的一个矩阵,然后呢用了一个 readme 的 一个函数,它是行方向重复两次,列方向重复三次,那它应该是一个两行六列的, 那这个 b 呢,它应该是一个四行六列的,对不对?行方向呢?重复了两次,列方向呢?重复了三次没有问题吧? 所以它这块其实就是把这样一个矩阵去行方向复制了 n 次,为什么呢?因为这个 sum 求和之后,它是一个横向令了,对不对?它按列求完和之后,它就变成一个横向令了, 而我后续需要点乘它,我是不是需要跟 x 的 维度一致呢?那我就需要在 n 方向去重复 n 次,那他就又变成一个 n 乘 m 的 一个矩阵了,然后呢再用 x 去点出这样一个矩阵,是不是就他这样一个公式啊? 就他自身呢,去除于这样一个值,这就得到我们标准化之后的一个矩阵,然后呢我们输出我们的标准化矩阵,接着看下边这块呢,是我们先输入一下我们的权重啊, 然后呢就是计算我们的距离的 d p 呢,表示与最大值的一个距离, d n 呢表示与最小值的一个距离,这两行代码也很长,我们同样呢先从里边去看,先看这个 max, z, max 呢就是求最大值的意思,如果说它只有一个变量参数,那它默认就是按列去求最大值, 按列去求最大值,那我们是不是就找着所有指标当中最大的呢?我们直接看一下这个 excel 吧, 对不对?它是不是就是去这里边去找最大值,这也是找最大值,我们找到最大值之后,这就是我们的最佳理想解,对不对?下边呢就是找最小值,然后呢给它组成一起,这就是我们最劣的理想解, 所以它这款就实现这样一个意思,它就变成我们一个横向量了,然后呢就用了一下我们 repmat 一个函数呢,就是在行方向呢去重复我们 n 次,变成一个 n 乘 m 的 矩阵啊, 大家在这块要注意啊,一定要看一下这个括号是括的哪一个,大家不要犯一个错误,就是什么呢?大家不要看到这个是先点拐一下这个平方啊, 他其实先用这个 z 去减去这样一个值的,这个括号呢跟这个括号是一对的,所以呢他就先用这个矩阵 z 里边的所有元素呢,再用 z 啊去减去这样一个矩阵, 他是不是就是这个地方,对不对?大家看他是不是就是这块,大家看是不是也就括号里边这一块,再然后呢需要对括号里边去进行平方,对不对? 然后呢他这块就是一个点拐二,就表示呢对这个矩阵里边所有元素呢去平方一下,再然后呢就是点成我们的权重,这个时候有人可能会发现问题了,为什么呢?这个权重他是一个横向量,没错吧?而后边这个呢,他是一个矩阵啊,为什么他能点成呢? 因为在 madlab 当中啊,它有一个广播机制啊,什么意思呢?它是在维度不完全相同的情况下呢?它会自动去扩展比较小的一个矩阵或者向量。那比如说我这里有一个一行两列的横向量,对不对?然后呢还有一个两行两列的一个矩阵, 我们用这样一个点乘,我们运行一下,看他会不会出错,看到没有,他是可以运行的,也就他把这个向量 a 呢,在行方向去复制了两次,大家看这个值啊,这个是一乘以五等于五,二乘以六等于十二,对不对?那这个七呢?其实就是一乘以七等于七, 这个十六呢,就是二乘以八等于十六,对不对?或者说我给他换成一个列向量,我把这个给他换成一个分号,我们再运行一下, 大家看这是一乘以五等于五,二乘以七等于十四,一乘六等于六,二乘以八等于十六,对不对?同样是能运行的,这个就是广播机制,那如果说这个行数跟这个列数都不相同呢?那这个就不会运行成功的。 所以啊,这一块呢,它是没有任何问题的。我们乘完全重之后呢,用了一个 sum 函数去求和,而它后边的参数呢,是一个二,表示的是按行去求和。我们看一下这个 excel 表啊, 大家看一下,它是不是就是用它的权重乘以它的一个值,然后去按行求和呢?对不对? 没有问题的,对吧?最后呢给我们处理好的一个数据,再去开根号,这样呢也就求出我们的一个距离, 同理呢,我们求出我们与最小值的一个距离,最后这个得分呢,就这个与最小值的距离去点除以这个最大值的距离,加上最小值的距离,也就这样一个公式,对不对?最后呢就求出我们一个得分。 至此呢,这样一个代码就讲解结束了。那么你学会了吗?好的,本节课讲到这里呢,就已经结束了,我们下节课再见。拜拜。

罗马数字三怎么打出来?罗马数字三怎么打出来?接下来就教三种方法。第一种方法是右键单机输入法,这里的软键盘选择数字符号,这个就是罗马数字三, 也可以点击插入符号,符号大全,这里的符号序号,这个就是罗马数字三, 也可以点击符号其他符号子集,这里边我们选择数字运算符, 这个就是罗马数字三插入,这样就可以了。这三种方法你学会了吗?记得点赞关注哦!

东风吹,战鼓擂 my love 怕过谁?我们看一下我这个程序啊,打开运行的效果啊,是不是超级玛丽?它还会跳,对吧?但是这个程序呢?不是我写的,是我十年前从网上荡下来的一个大神啊,开源的。