Matlab数学建模工具
调整界面字体大小
在最初的界面,所有的字体偏小。看起来不是很明确,可以调整互交区域或者编辑区域的字体大小。
具体位置如下。
- 新建一个空的脚本
- 主页
- 预设
- 字体
- 调整数值(通常来说,十八太大,我们使用十四号字体即可)
- 字体
- 预设
- 主页
注释
在matlab种,注释通常使用 % 来表示
% 我是一行注释,我是单行注释,在我后面的一行字符,统统不算数
什么是互交命令行
在我们的matlab中,存在一个窗口界面,也就是互交命令行。他的作用很大,通常来说。没有很多行测试脚本的情况下,我们直接使用互交命令行即可,在你敲出第一个代码/指令的时候,他就会立马给你一个回馈。
互交命令行窗口
互交命令行发出一行指令后,立马回馈的信息
如果我们感觉互交命令行太乱,即可在指令处输入这一个指令,来清除所有的文本文字。
clc
呢么对应的效果就是如下
空空如也。
我刚刚有提及过工作区的变量,如果工作区变量不需要,或者过多,想要删除部分变量或者删除全部的变量。也是有对应的操作。
% 删除指定的变量, 假设此时我们拥有变量a,和变量b
clear a
% 删除全部的变量
clear all
什么是编辑脚本区域(编辑器)
我们如果有很多行代码,来运行一个很大的数值运算(二分查找,冒泡排序,优先选择法等等)一些算法排序。我们肯定不能依靠单一的一行互交来完成任务。呢么我们就存在了一个功能,Script (脚本). 还记得我跟你讲过的Java吗。面向过程编程。由上到下去执行得到最终的结果值。是的,他也是这样的理念。在一个以 .m 结尾的文件里,来书写代码,最后执行得到最终的结果值。
呢么如果我们想要去编辑脚本,就需要先创建脚本,于是乎
如何去创建一个脚本
创建脚本有两种方式,就目前编辑器里最直观的方式来看。
第一种是直接点击新建脚本。但是有几点是需要注意的.
我们会直接得到一个如图所示的 Untitled,在这个时候就可以开始桥写你的代码了,如图。
好,但是或许你留意到了文件名字后面的 * 号。这是什么意思,其实他的意思很简单,不光是这个 * 号,包括你以后在所有代码里遇到文件头部带有 *的,都表示了一个意义,呢就是 文件已经发生变动,但是该文件并没有保存。 我们只需要按住 Ctrl + s 键 进行保存即可。所有的文件保存基本上全是这一个操作。在我们按住ctrl + s键保存后,会弹出一个要保存在哪里的提示。
此时我们可以在bin目录下新建文件夹,然后保存到里面即可,文件名称可以进行更改,在下方蓝色处位置。
数据类型
他也是拥有数据类型的,就跟任何一个语言一样。呢么他的数据类型分为以下几种。
- 数字
- 字符与字符串
- 矩阵
- 元胞数组
- 结构体
数字
数字这个概念其实很好理解,也就是我们所用到的所有和 “数” 有关的东西。 浮点数,整数。呢么对应的操作,肯定是离不开最基本的四则运算。也就是我们所说的 + - * / (加减乘除)
他们也是很好理解的。
% 加法
10 + 20
20 + 30
a = 50;
b = 100;
a + b;
% 减法
20 - 10
10 - 20
a = 10;
b = 5;
a - b;
% 乘法
10 * 2
20 * 1
a = 9;
b = 3;
a * b;
% 除法
20 / 2
30 / 3
a = 9;
b = 3;
a / b;
字符与字符串
字符是不是对应char类型啊?单个字符存在。我也不是很理解。我刚看文档一小会。
java
Char c = new Char('a');
matlab
a = 'a'
用最通俗易懂的话来说,字符串就是 Java 的String类的使用而已。此处str为变量。
String str = "我是一个字符串";
matlab也是这样的。只不过没有这个类的定义,符号使用单引号。
str = '我是一个字符串,Hello,World!';
当然了,我去测试了一下,双引号也是可以储存的,但是他们的区别好像是,使用单引号存储的变量,和双引号存储的变量不一样在 包括他们的符号和你书写时使用的单双引号一致。
str = '我是一个字符串。';
存储结果 ----> '我是一个字符串'
str2 = "我是一个字符串";
存储结果 ----> "我是一个字符串"
对应图解应该更好理解一些
使用它们输出也是这样的一个区别,暂时先放置。等我了解后在回补。
好了,经过我的一些测试,我发现了一些端倪。
如果我们学过Java,是否还记得,字符对应的数字编码。 ASCII 码。 a对应的数字,是否是97. 没错吧,呢么是什么类型才会有这种情况呢,字符类型。 也就是说上面我们猜对了,他就是和Java的char类型一样。甚至可以进行运算。
ASCII编码
为了证实,我收集了ASCII编码集
Char("32") 空格 SPACE
Char("33") !
Char("34") "
Char("35") #
Char("36") $
Char("37") %
Char("38") &
Char("39") ’
Char("40") (
Char("41") )
Char("42") *
Char("43") +
Char("44") ,
Char("45") -
Char("46") .
Char("47") /
Char("48") 0
Char("49") 1
Char("50") 2
Char("51") 3
Char("52") 4
Char("53") 5
Char("54") 6
Char("55") 7
Char("56") 8
Char("57") 9
Char("58") :
Char("59") ;
Char("60") <
Char("61") =
Char("62") >
Char("63") ?
Char("64") @
Char("65") A
Char("66") B
Char("67") C
Char("68") D
Char("69") E
Char("70") F
Char("71") G
Char("72") H
Char("73") I
Char("74") J
Char("75") K
Char("76") L
Char("77") M
Char("78") N
Char("79") O
Char("80") P
Char("81") Q
Char("82") R
Char("83") S
Char("84") T
Char("85") U
Char("86") V
Char("87") W
Char("88") X
Char("89") Y
Char("90") Z
Char("91") [
Char("92") \
Char("92") \
Char("93") ]
Char("94") ^
Char("95") _
Char("96") `
Char("97") a
Char("98") b
Char("99") c
Char("100") d
Char("101") e
Char("102") f
Char("103") g
Char("104") h
Char("105") i
Char("106") j
Char("107") k
Char("108") l
Char("109") m
Char("110") n
Char("111") o
Char("112") p
Char("113") q
Char("114") r
Char("115") s
Char("116") t
Char("117") u
Char("118") v
Char("119") w
Char("120") x
Char("121") y
Char("122") z
Char("123") {
Char("124") |
Char("125") }
Char("126") ~
Char("127")
Char("128") €
Char("129")
Char("130") ‚
Char("131") ƒ
Char("132") „
Char("133") …
于是我使用了 在单引号内加入多个字符字母
str = 'aasssa';
abs(str);
最终结果 -> ans
-> 97 97 115 115 115 97
已经到这一步了,呢么不妨做一个大胆的猜想。是否是在单引号内,所有包裹起来的数据都是属于字符类型的。全部可以转换为对应的 ASCII字符编码。
呢么上面有说过,我们也可以使用双引号包裹,呢么是否双引号包裹起来的,才是字符串呢?(理论上来说字符串就是一堆char类型拼接成的数组而已。). 实践永远是证实的标准。
于是我们使用了第三组数据。
很惊讶,它并不能转换为对应是ASCII编码。呢么基本上也就坐实了,使用单引号包裹起来的,就是我们的字符类型,但是他跟我们学过的Java的char类型不一样,它可以在一个引号内包裹多个字符,但是Java只允许一个包裹一个。
使用双引号包裹起来的,也就是我们所了解的字符串。对应Java的String类型。 字符和字符串还是有很大区别的。可以根据按需使用。
通常使用单引号,有的参数需要使用双引号的时候在考虑使用。
abs()函数
于是在这里,我们先暂定做一个小猜想,错了在改就是。abs() 函数,呢么他的作用是什么,就是把对应的字符,转换为对应的计算机编码(ASCII) 的数值。
char()函数
呢么上面提到过。我们可以把字符转换为数字,呢么我们是否可以把对应ASCII编码的数字转换为字符呢?也是可以的,就是我们的标题,char函数。
用法也是很简单,只需要把字符对应的ASCII编码输入进去,就可以转换为对应的字符。
num2str()函数
他的作用也很简单,其实是做了一个互相转化,把数字,转换为字符类型。
但是需要注意的是,虽然变量a被转换为字符类型,但是实际上存储的依然是,数字类型,这个我们可以在方法区或者直接调用变量 a 来得到证实。
str2num() 函数
通过这个函数,可以把字符包裹的数字,转换为,真实的数字。如
str = '20';
a = str2num(str);
--> 20
--> a = 20
length()函数
这个函数也很好理解,返回对应字符的长度,单位是字符。
注意,返回的是字符字符串的长度,也就是使用单引号包裹的字符。才可以完全返回。而使用双引号包裹的,是属于一个整体。(测试所得,可能有误。 我刚刚接触,不理解。只能猜测。)
因为使用双引号包裹是有特殊意义的存在,有的函数参数要加单引号,有的要加双引号是因为:
不能使用数组将字符串与“”连接起来。
s1="12",s2="34",s3="45"
s1 =
"12"
s2 =
"34"
s3 =
"45"
>> str=[s1,s2,s3]
str =
1×3 string 数组
"12" "34" "45"
>> s1='12',s2='34',s3='45'
s1 =
'12'
s2 =
'34'
s3 =
'45'
>> [s1,s2,s3]
ans =
'123445'
矩阵
所有的东西都可以归结于矩阵的一个运算。矩阵是很强的,也是我们这个软件的运算核心。比如神经网络啊,无人驾驶啊等等。
矩阵的定义
如何去定义一个矩阵。
% 最简单的一个矩阵
a = [1, 2, 3; 4, 5, 6; 7, 8, 9];
a = [1 2 3; 4 5 6; 7 8 9];
% 我们会得到一个结果
a =
1 2 3
4 5 6
7 8 9
我们可以看到,上面列举了两种矩阵的方式,数组。但是在数组里面,有什么规律。
第一种 [1, 2, 3; 4, 5, 6; 7, 8, 9]
我们可以看见。每一行的结尾,都会有一个 ; 结尾,中间连接是使用 , 来连接。这是一个三维矩阵。
第二种 [1 2 3; 4 5 6; 7 8 9]
结尾依然是 ; 分号结尾,但是连接点变成了空格,根据个人喜好来使用即可。
两种方式都可以。
矩阵的转置 a(T)
在数学中,矩阵转置的表现方式是 t。 也就是转置的首字母缩写。Transpose;
呃。等一下。我去给你写一个去。字不好,凑合看。几个月没握笔了。
呢么在我们在我们的矩阵中,如何完成一个矩阵的转置呢。其实也是很简单的!
% 进行矩阵转置。
a = [1 2 3; 4 5 6; 7 8 9; 9 6 3]
%结果为:
a =
1 2 3
4 5 6
7 8 9
9 6 3
% 开始转换
b = a'
% 结果为
b =
1 4 7 9
2 5 8 6
3 6 9 3
于是我们把上面的结果使用图像的形式来展示,可能会更容易看懂一点。毕竟有图,谁愿意看一堆垃圾数据呢。
不难发现,我们把a 赋值给了b,原本这个操作是没有问题的。但是问题在哪里呀。我们加上了一个单引号。而这个单引号,所做到的操作是什么,就是 矩阵转置! 由原来的 横向矩阵,转换为了纵向矩阵。 也就是相当于。
[1, 2, 3; 4, 5, 6; 7, 8, 9]T
这样的一个表达形式。
矩阵向量? 我数学知识不行,不大行,猜测
首先我们写一个基础矩阵。
a = [1, 2, 3; 4, 5, 6; 7, 8, 9];
% 得到如下结果
a =
1 2 3
4 5 6
7 8 9
8 5 2
呢么我们如何把他变成一个向量。
a = [1, 2, 3; 4, 5, 6; 7, 8, 9];
b = a(:);
可以看到,我们的矩阵变由 4 * 3 double 变成了 12 * 1 double。
我只是猜测啊。我只是猜测。只是猜测啊!不确定是向量。 呢么矩阵向量的加减乘除。其实也很好理解。
我的文化知识不够,对不起大哥们。
好了。先不管,先看看运行结果和规律。
呢么可以看到我们的运行结果为。
>> a = [1, 2, 3; 4, 5, 6; 7, 8, 9; 8, 5, 2]
a =
1 2 3
4 5 6
7 8 9
8 5 2
>> b = a(:)
b =
1
4
7
8
2
5
8
5
3
6
9
2
把他拉扯成向量,可以发现什么。 他并不是横向拉扯,而是做一个纵向的拉扯,从第一列第一个,也就是 A(ij) ,A1,1
到A2,1 到A3,1 然后是A4,1 第一行拉完之后,就是第二行,A2,2 以此类推。