Jet_Li

Jet_Li 查看完整档案

西安编辑南开大学  |  计算机科学与技术 编辑声耕智能科技研究院  |  Python 研发工程师 编辑 programmer996.club 编辑
编辑

Pyer.
Python technology porter ~
Emali: Jwjier@gmail.com

个人动态

Jet_Li 发布了文章 · 2020-09-11

MATLAB最 最最最基础教程

前言:matlab字面意思是矩阵实验室,软件重点是数值变量的运算。所以在符号变量和字符串的运算上,功能并不强大,我用的也不是很多,因此这篇的内容请多多指正。

1.符号变量的基本运算

符号变量的基本运算与数值变量一样,加减乘之类的,比如

syms x y(x)

g=x*y

并没有需要特别说明的。

2.符号变量的特殊运算

符号变量的特殊运算也与数值变量一样,但一般而言,符号变量都是11矩阵,因此特殊运算与基本运算一般都是等效的。比如g=xy和g=x.*y的运算结果完全一样。

3.符号变量的常用函数

数值变量的常用函数,一般都可以直接用在符号变量上,比如三角函数

syms x

y=sin(x)

a=1

b=sin(a)

这些都是可以通用的,而且函数的含义也完全一样。

但偏偏有些函数非常蛋疼,对符号变量与数值变量都可以进行操作,但操作的含义完全不同,比如diff,diff对于一个数值变量的运算结果是差分,而对于一个符号变量的运算结果则是求导

syms x

f=diff(sin(x))

a=[1 2 3]

b=diff(a)

运算出来的f是sin(x)的导数,也就是cos(x),依然是个符号变量,而b运算结果则是一个差分向量。

另外也存在很多函数只能对数值变量操作,比如离散傅里叶变换fft。还有很多函数只能对符号变量操作,比如泰勒展开taylor。因此在matlab使用中,一定要区分变量的类型,其实真的用起来也好区分,因为完成特定的计算任务,要么全部用数值,要么全部用符号,这也符合一般处理问题的原则。

我平时做符号运算比较少,用到的函数,除了exp、sin这类数学运算外,还有:

int 求积分,符号运算特有,可以求定积分,也可以求不定积分,但一般不会写+C

diff 求导数,符号运算特有

limit 求极限,符号运算特有

ezplot 作图,类似数值变量运算时的plot

4.字符串的常用函数

matlab中字符串的常用算符就更少了,但都非常有用,这里介绍几个:

num2str和str2num

可以实现数值变量和字符串变量的转换,比如

a=1

b=num2str(1)

运算结果显示a是一个数值变量,b是一个字符串变量,函数名中的2就是英文中to的意思,也就是把num数值类型转化成str字符类型。str2num就是这个函数的反函数,这两个命令结合,可以实现特定的功能,比如提取一个数字的最高位:

a=123456

b=num2str(a)

c=b(1)

d=str2num(c)

另一个常用函数是eval,其原理是把“字符串”变成“命令”并执行。但使用过程中需要注意的是,这个命令不可以“编译”,也就是只能在matlab内使用,无法移植到C,JAVA等其他语言平台。有需要的可以自行尝试这个命令。

查看原文

赞 0 收藏 0 评论 0

Jet_Li 赞了文章 · 2020-09-11

仅限100 人!思否编程邀你成为「内容合伙人」

招募前言

SegmentFault 思否是国内领先的新一代开发者社区和技术媒体。也是中国领先的黑客马拉松组织者,目前已近覆盖和服务了上千万中国软件开发者和IT信息从业者。

思否编程依托 SegmentFault 思否在开发者行业的多年积淀重点发力IT新职业在线教育,以权威技术专家+优质教学服务打造行业领先课程,帮助更多人走进技术的世界。

现在思否编程公开招募「内容合伙人」,来「思否编程输出课程,与同行思维碰撞,带领开发者一起成长。

成为思否编程讲师你可以收获什么?

1,业内最专业的一对一的讲师辅导,无论你是行业大咖,还是素人小白,只要你技艺在身,辅导完下一个KOL就是你。

2,超精准的超前沿的后期制作,360度全方位制作,,绝对是是整条街最Liang的课程

3,一份持续的可观的收入,要想早日实现财富自由,睡后收入绝对不能少

4,思否编程认证讲师,你与日活几百万的平台还差一个证书

5,思否媒体专访机会(专属福利),听说被思否专访过的人都升职加薪啦

成为思否编程讲师应具备什么?

1,热爱分享,愿意帮助更多的开发者,思否社区高声望值用户,知名技术博主/图书作者

2,擅长某一技术方向感,一线研发/研发管理经验5年以上,具备突出项目经验者可适当放宽条件

3,每周2-3小时的空闲时间

4,如您此前有过授课经验,可在申请时提供相关课程链接

Q&A

Q:我没有高大上的学历和大厂背景,可以申请吗?

A:英雄不问出处,只要你有吸引人的且深度的内容,就大胆的报名吧。

Q:我没有讲过课可以报名吗?

A:如果你在某项技能上有自己的独到见解,热爱分享,就快来报名吧,我们有热门的选题,专业的课程策划团队,优质的课程后期,助你完成人生中的第一门课程。

Q:怎么录制呢,需要真人出镜吗?

A:远程在家录制就可以,不需要真人出镜。

Q:录用后的流程是什么样的呢?

A:策划选题、策划大纲、提交试录、签约录制、课程上线。

扫描下方二维码即可申请:

image

此招募贴长期有效,如需咨询,请添加小姐姐,暗号“讲师报名”

image

查看原文

赞 12 收藏 1 评论 10

Jet_Li 发布了文章 · 2020-09-11

MATLAB最最最最基础教程

前言:上一篇说了变量的类型和赋值,这里接着说这些变量的基本运算,捎带一些常用的系统自带的函数,通过这些运算和函数,已经可以完成一些简单的计算了。

1.数值变量的基本运算

数值变量都是矩阵,矩阵之间最基本的运算有加、减、乘(方)、转置,运算符分别是+-*',与数学中的一般表示无异,但仍有一些地方需要注意,以下结合代码进行说明。

1)矩阵加减法只有维度相同的矩阵才能进行,例如

a=[1 2]

b=[1 3]

c=[1;2]

则d=a+b和d=a-b都是可以进行的,因为a和b都是1行2列,但d=a+c则无法进行,因为数学上,不同维度的矩阵加减法并没有定义。

2)矩阵乘法只有第一个矩阵的列数等于第二个矩阵的行数时,才能进行,例如上段代码中的abc,则d=ac是可以进行的,但d=ab则不能进行,原因同样是因为这种计算在数学上没有定义。还有一种特殊的乘法,也就是乘方,例如A=[1 2;3 4]情况下B=A*A这样的矩阵乘法可以写成B=A^2,当然,数学上规定,只有方阵才能进行乘方。

3)矩阵与数乘除,由于数也可以看做11的矩阵,因此这是一种特殊的矩阵乘除法,和数学上定义一样,比如d=a2和d=a/2,这些都能进行。

4)转置,任何维度的矩阵都可以进行转置,例如d=a'就会将a这个行向量转置,得到一个列向量d。需要注意的是,这种运算更准确的说法是共轭,对实数矩阵而言,这两种说法并没有什么区别,但对复数矩阵而言,共轭的意思,不仅是把a(i,j)和a(j,i)交换位置,更要把所有元素的虚数部分乘以-1。

2.数值变量的特殊运算

和其他软件不同,matlab里提供了一些很有意思的运算符,有点乘.、点除./和点方.^,这些运算符在本身的运算符前加一个点,可以实现很强大的功能,但由于和一般的运算符太像,也造成了很多人混淆。这些运算符有很多叫法,比如.,一般称为点乘、元素乘、数乘,这些叫法都是为了让这个运算符区别于普通的乘,有时为了强调这种区别,也把通常的乘叫矩阵乘。

简单而言,这些运算的含义是将矩阵作为一般的数来进行运算,比如

[1 2 3].[4 5 6]=[14  25  36]

[1 2 3]./[4 5 6]=[1/4  2/5  3/6]

[1 2 3].^3=[1^3  2^3  3^3]

所以这里点乘和点除需要注意,只有同样维度的矩阵才能进行这种特殊运算。另外点除还要注意不要除以零,虽然matlab并不会报错,但除以零在数学上没有定义,所以这种除法其实已经失去了意义。

于是,什么时候用矩阵乘,什么时候用点乘,其实是看计算的目的,但有些时候,这两种运算符的确是等效的:

1)数字的乘除,11和1.1,当然结果相同

2)矩阵与数字的乘除,1a和1.a,结果也是一样的

3.数值变量的常用函数

这里的函数都可以通过doc+函数名查到更详细的帮助,因此仅列出典型用法。

a=ones(3)或者a=ones(1,5)生成指定大小的全1矩阵

a=zeros(3)或者a=zeros(1,5)生成指定大小的全0矩阵

a=eye(3)生成指定大小的单位方阵

inv([1 2;3 4])矩阵求逆,只能对方阵操作。matlab有左除法,通常更高效,如有需要也可尝试

size([1 2;3 4])获得矩阵的行数和列数,也可以通过size([1 2;3 4],1)单独获得行数或者列数

length([1 2 3])获得向量的长度,这个命令也可以对矩阵操作,当然一般只对向量操作

max([1 2 3])和min([1 2 3])获得向量的最大和最小值,也可以对矩阵操作

sort([2 1 3])按大小对向量进行排序,也可以对矩阵操作

sum([1 2 3])求和,也可以对矩阵操作

cumsum([1 2 3])累积求和,类似求定积分,一般只对向量操作,需要注意的是,累积求和后,结果和原向量长度一样

diff([1 2 5 6])差分运算,类似于求导,一般只对向量操作,需要注意的是,差分操作后,结果的长度比原向量少一

plot([1 2.5 3],[5 6 4])画图,需要注意的是,两个向量的长度要相等才能画图

exp([1 2])指数函数,类似的数学函数还有三角函数(sin,cos,tan,asin,acos,atan),对数函数(log),这些函数在对矩阵操作时,相当于对矩阵中的每个元素进行操作,类似点乘这样的运算符。

查看原文

赞 0 收藏 0 评论 0

Jet_Li 发布了文章 · 2020-09-09

MATLAB 最最最最基础教程

matlab最基础教程(二):变量类型与赋值

前言:matlab解决问题的最基本思路是建立脚本文件,那么脚本文件的第一段就是定义一些变量,这和C语言等编程思想是一样的。matlab提供的变量类型很多,最基础的是三种:数值变量、符号变量、字符串,其他的类型还有cell、table等。这里仅说明最基础的变量类型。

1.数值变量
    matlab中所有的数值变量都是矩阵,赋值时,以方括号作为开头和结尾,以英文逗号或空格分割同行元素,以英文分号分割各列。例如在Command Window里输入

a=[1 2;3 4]

可以看到运算结果,a是一个数值变量。同时workspace里出现一个田字形的变量a,说明变量a的类型是数值型。

    向量和数字可以视为特殊的矩阵,例如

a=[1 2]

a=[1;2]

分别是行向量和列向量,

a=[1]

可以简写为

a=1

复制代码

是数字。
数值变量的命名要求是英文字母开头,不能包含特殊符号,大小写敏感。这里推荐采用下划线来进行分割,例如value_of_A,这和其他编程语言的命名规则大体相当。
赋值中,有时需要用到等差数列,例如定义一个向量a=[1 2 3],如果比较长,赋值很麻烦,所以matlab提供了一个简单的方法

a=[1:1:3]

这里两个冒号的意思是起始值:步长:终值。采用这种赋值方式时可以获得一个等差数列行向量,并可以省略两侧的方括号。当步长为1时,可以省略步长和一个冒号,于是可以简写为

a=1:3

另一种灵活的赋值方法是分块矩阵,其方法是变量名后面加圆括号,圆括号中加序号。例如

a=[1 2;3 4]

定义变量a之后,

b=a(1,2)

就可以把a的第一行第二列元素赋值给b,当然也可以用

a(1,2)=1

来修改矩阵中部分元素的值。这里需要注意,序号必须是自然数,且不能是零。当矩阵中有多个元素需要赋值时,可以将序号部分改成向量,例如

a([1 2],[1 2])=[1 2;3 4]

中把行数和列数都用向量表示,就是说对矩阵a的第1和2行,第1和2列,总共4个元素赋值。更进一步,也可以有a([1 2],1)表示a的第一列,也可以写成

a(1:end,1)

这里的end表示终点,即a的行数2,也可以更进一步简写成

a(:,1)

这里的冒号表示从头至尾。这类赋值方法最为常用,但基本的语法非常简单,方括号表示矩阵开头和结尾,圆括号表示从矩阵中选取部分,把握这个原则,有利于读懂程序。
当然分块矩阵也可以

b=[a a]

这样的赋值方法,但需要注意的是,方括号中的元素必须满足矩阵的行列数要求,例如

a=[1 1]

b=[1;1]

c=[a b]

就会引起错误,因为此时matlab无法确定c的行列数。
2.符号变量
总体而言,符号变量比数值变量简单得多,因为变化非常少,常用的赋值命令是

syms a b

这里syms表示这里要定义一些符号变量,a和b是变量名,符号变量的命名规则和数值变量一样。有时候也采用

syms a real

来强调a是实数变量,具体可以doc syms来获得帮助。
有些变量之间存在依赖关系,此时可以定义

syms x y(x)

这里声明x是一个符号变量,又声明y是一个符号变量,且y的值由x决定,这相当于数学中函数的概念。当然具体的函数关系并没有明确规定。也可以

syms x y z(x,y)

来定义符号变量z,z依赖x和y。这相当于二元函数的概念。这里的圆括号显然和数值变量中的圆括号含义完全不同,这也是学习matlab最不习惯的地方,同一个符号,由于变量类型不同会有完全不同的含义。所以在学习matlab的过程中,一定要区分数值变量和符号变量。
上述方法定义的符号变量是一个数,或者1*1矩阵,matlab中也可以定义符号矩阵,例如

syms a11 a12 a21 a22
A=[a11 a12;a21 a22]

就可以获得一个矩阵符号变量A。
定义符号变量后,workspace中出现相应的变量名,图形不是数值变量的田字形,而是方框里有个立方体,双击后可以看到行列数。

3.字符串
比数值、符号更为简单的就是字符串了,其定义方法是以单引号开头和结尾,例如

a='hello world'

就定义了一个字符串a,其值为你好世界。matlab中较为特殊的是,字符串可视为行向量,例如

b='hello '

c='world'

a=[b c]

也可以获得字符串a,其值为你好世界。另外,有时也可以将字符串视为矩阵,例如

a=['ab';'cd']

但这种用法很罕见,同时要求各行字符串长度一样,否则将违反矩阵行列数规定。
当然字符串的值也可以是特殊符号,比如

','

就定义了逗号,而最特殊的就是定义单引号,因为单引号会和字符串定义中的单引号混淆,因此matlab中用两个单引号表示一个单引号,也就是

a=''''

表示a是一个字符变量,值是一个单引号。语句中第一和第四个单引号是字符串类型的开头和结尾,中间两个单引号用来表示一个单引号。
定义字符串变量后,workspace中出现相应的变量名,图像是方框里写了ch,双击后可以看到行列数。

查看原文

赞 0 收藏 0 评论 0

Jet_Li 发布了文章 · 2020-09-09

MATLAB最最最最基础教程

matlab最基础教程(一):软件基本概念
前言:①如果你是第一次使用matlab,建议阅读本教程。,水平有限,欢迎指正。
1.matlab的界面
左上角,home标签下,找到layout进行设置/复位,可以设置各板块的显示与隐藏。其中有几个部分,请务必要显示
①Current Folder:中文一般翻译成工作路径,一般设置成一个自己建立的、有读写权限的文件夹,例如我的文档下建立一个matlab文件夹
②Command Window:字面意思是命令窗口,用来运行代码,所有的代码都是在这里输入
③Workspace:字面意思是工作空间,其实就是暂存所有运行结果的地方,“暂”的具体含义是:关闭matlab后丢失
2.软件中的基本概念
2.1 函数
matlab之所以强大,就是因为提供大量的函数,你也可以建立自定义函数,方法是:Home->New->function。自定义函数一般保存在工作路径下。函数文件的特征是:扩展名m,内容的第一行以function开头,后续内容是“输出变量=函数名(输入变量)”。且函数名和文件名相同。
每个函数在Command Window中运行,用来完成特定的计算任务,运行方式是输入“输出变量=函数名(输入变量)”,然后按回车。例如有个系统自带的函数是用来求绝对值的,函数名abs,所以在Command Window里输入“a=abs(-1)”,就会显示运算结果为“a=1”。且运算结果会在Workspace里出现一个变量a,双击后可看到a的值是1。
2.2 脚本
可以理解为特殊的函数,这种函数内容的开头没有function那行,因此没有输入、输出变量,也没有函数名。文件扩展名和函数一样是m,也需要在Command Window里运行。脚本都是用户建立的,方法是:Home->New Script。一般保存在工作路径下。脚本的功能就是完成用户需要的、复杂的计算任务,通常脚本里会调用很多函数。
2.3 GUI
一般翻译为界面,就是人机交互界面的意思。写脚本处理问题的方法有点麻烦,让人看起来更像是码农,所以现在很多问题可以通过界面点点鼠标解决。这时候就需要打开界面,打开方法是:在APPS标签里可以找到所有已安装的GUI工具,单击即可。注意右边有个小三角可以点开。和函数一样,用户也可以自己建立自定义GUI,这部分较为复杂,对新手而言有点遥远。
2.4 toolbox
一般翻译成工具箱,matlab将功能相近或者应用上自成体系的一组函数和GUI打包成一个toolbox。正版的matlab在购买时,几乎每一个toolbox都是要单独收费的,所以toolbox也可以理解为matlab产品的模块,一个工具箱就是一个产品/商品。
2.5 simulink
一般用matlab解决问题的过程是:用户自定义脚本,在Command Window里运行脚本。而脚本的运行逻辑是顺序执行,和一般的编程一样。simulink则提供另一种思路,图形化编程,有点像labview,这种方法很适合于物理模型的仿真,因此有时用“matlab编程”和“simulink仿真”强调。使用方法是在home标签下点击simulink。
3.获得帮助
常用的获得帮助有四种方法
①home标签里,有个Help标志,点开后可以获得各工具箱/产品的完整帮助文档。新版本中默认使用在线,改用本地帮助的办法是在home标签里,Preferences下的matlab/Help里选择installed locally
②cn.mathworks.com官网上找到支持,然后可以获得教程。这种方法获得的帮助文档和第一种方法一样。
③在Command Window里输入 doc+函数名 来获得帮助。比如输入"doc fft"可以获得离散傅里叶变换函数fft的帮助和范例。这种方法获得的文档是前两种方法文档中的部分。当然,前提是你要知道函数名,才能找到帮助。这种方法适合于获得系统自带函数的使用说明。
④使用GUI时,通常界面的角落里有Help,点开可以获得帮助。这种方法获得的文档是第一和第二种方法文档中的部分。这种方法适合于获得系统自带GUI的使用说明。
这几种方法中,最常用的是第三种,只要知道自己需要的函数名,就可以用这种方式获得说明和范例。而实际使用中,一般常用的系统自带函数,也并不是非常多,大概几十个?真正需要牢记使用方法的可能就几个,通常都是知道函数名,要用的时候doc一下。

查看原文

赞 0 收藏 0 评论 0

Jet_Li 发布了文章 · 2020-09-09

MATLAB最最最最基础教程

MATLAB最基础教程(零):基本数学概念
前言:matlab只是个软件,用来完成机械的计算,而如何安排这些计算,需要用户掌握最基本的数学概念。这篇将介绍工程数学中常用的数学概念,与matlab似乎并不相关,但实则是matlab的基础。
1.数值与符号
如果给工程数学问题分类,最大的两类肯定是数值问题和符号问题,对应matlab的数值运算和符号运算。简而言之,数值运算就是所有的变量的值已知,求解的也是一些具体的值;符号运算则刚好相反,不要求所有的变量都已知,求解的结果也不是变量具体的值,而是变量之间的关系。一个简单的例子是
①数值问题:求解一元二次方程,ax2+bx+c=0,其中a=b=c=1,所求得的结果一定是x=几点几+几点几i,是个复数,是个具体的数值。
②符号问题:求解一元二次方程,ax2+bx+c=0,所求的的结果一定是x=求根公式,是abc的函数,是个关系
可见,一个问题是数值问题还是符号问题,很大程度上决定于结果需要求解的是数值还是关系。当然两个问题也可以相互转化,比如数值问题的一元二次方程,我们一般会先转化成符号问题,把abc代入求根公式,求出来变量x的具体数值。但实际中,一般我们并不推荐这样做,原因是matlab的数值和符号是完全不同的两套系统,相互转化不仅需要多余的数值符号转换语言,更可能带来查错的不便。
2.典型数值问题
以下是常见的数值问题,文中提到的解法均可在数值计算、科学计算、数值算法这类书中找到。
2.1代数方程
代数方程又分为线性方程和非线性方程,线性方程一般可以转化为矩阵形式AX=b,对A求逆即可。求逆的数值解法一般有高斯赛德尔迭代,超松弛迭代等。非线性方程一般转化为f(x)=zeros其中x是个向量,右侧的zeros表示f是个多输出函数,数值解法一般是迭代,常见的有牛顿迭代,最速梯度,点斜式等。
2.2常微分方程
常微分方程一般转化为Dy=f(y,t),且y(0)=y0是初始条件,其中y和Dy都是向量,f也是个多输出函数,数值解法有欧拉法,龙格库塔法。
2.3偏微分方程
偏微分方程比较复杂,matlab处理偏微分方程也不专业,我也几乎不用matlab处理这类问题。但工程数学上,偏微分方程的解法有两类,差分法和有限元法。差分法需要采用中心差分,迎风差分等。有限元需要计算刚度矩阵等。
2.4插值和拟合
插值和拟合是完全不同的两个数学概念,虽然很多时候很多人都混淆了。两者的描述都可以归结为:已知函数上的点(x1,y1),(x2,y2)...(xn,yn),求一个已知的x,对应的y的数值。插值常用的多项式插值,三次样条插值。拟合的本质是一个最优化问题,其中最常用的一种拟合是线性拟合,求解方法是最小二乘法。
2.5离散周期傅里叶变换
严格说来,这并不能算一个数学问题,只是一种运算方式,就好像加减乘除一样。特殊性在于这种变换是对于一个向量进行,且运算后的结果依然是个向量。这里提出来是为了强调这种傅里叶变换的限定,要求是离散周期,这也是数值方法能处理的唯一一种傅里叶变换。
2.6最优化问题
最优化问题比较宽泛,一般可以归结为求目标函数f(x)的最大或者最小值,其中f是一个单输出的函数,x是一个向量。其中x需要满足线性约束条件、非线性约束条件、上下界。具体的解法有最速梯度,遗传,蚁群,退火等算法。
2.7数值积分
已知函数上的点(x1,y1),(x2,y2),...(xn,yn),求函数在x1到xn的定积分。常见算法有矩形公式,梯形公式,辛普森公式。类似的问题还有数值求导。
3.典型符号问题
以下是常见的符号问题,需要特别指出的是,无解问题。数值问题中也有一部分无解问题,但大多数工程中是碰不到的。而符号问题恰好相反,绝大部分我们遇到的符号问题都是没有解的,或者准确的说,没有解析解。比如求一元五次方程,我们知道x和这些系数存在关系,但无法写出显式的表达式,也就是说没有解析解。
3.1递推转通项
这个问题可以归结为:已知xn+1=f(xn),求xn,常见于数列的推导。
3.2代数方程
区别于数值问题中的代数方程, 这里的代数方程问题可以描述为:f(x,c)=0,求x=x(c),这里需要求解的其实是x和c的关系。
3.3常微分方程
区别于数值问题中的常微分数方程, 这里的代数方程问题可以描述为:Dy=f(y,t,c),求y=x(t,c),一般无需初值条件。
3.4符号积分
区别于数值问题中的数值积分,这里的符号积分可以描述为:已知函数关系y=f(x),求y的不定积分。同样的问题还有符号求导。

查看原文

赞 0 收藏 0 评论 0

Jet_Li 发布了文章 · 2020-08-28

Join "think No" today.

  • Join "think No" today.
*    I am a developer with three years of working experience, and the main area I am currently involved in is Python. In the future R & D life, I will upload some technical documents at a specific time (135) to provide you with learning, communication and so on.Thank you. Thank you, my friends. We grew up together.

查看原文

赞 0 收藏 0 评论 0

认证与成就

  • 获得 0 次点赞
  • 获得 2 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 2 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

注册于 2020-08-28
个人主页被 238 人浏览