一、MATLAB基础

1. 学会完成MATLAB的安装与启动

MATLAB(矩阵实验室)是由美国MathWorks公司出品的商业数学软件,这是一款可专业分析数据的软件,软件的功能性十分强大,新版matlab 2018a增强各项功能的特性,如对图形、数据导入和导出及语言和编程进行了增强,更新了实时编辑器的交互式图形,增强了硬件支持等,让各类数学或者科研人员可以轻松地进行计算和分析等操作。MATLAB安装步骤如下:

1.1 软件包下载

Matlab R2018a(64位)下载链接:

https://pan.baidu.com/s/1nBeHrPZFwyDrtiQGXPR0dA

提取密码:ywge

安装前须知:

  • 安装全程须断开电脑网络,否则安装不成功;

  • Matlab 2018a的安装包必须使用虚拟光驱加载,推荐使用ULtraISO,千万不要解压进行安装;

  • Matlab2018a适用于WIN7/8/10(64位)系统;

  • Matlab 2018a推荐电脑配置:内存4G+,处理器酷睿I5+。

1.2 安装步骤

  1. 使用“百度网盘客户端”下载Matlab 2018a软件安装包和Crack破解文件到电脑磁盘里,注意:Matlab 2018a安装包为两个iso格式文件‘

  2. 安装前先断开电脑网络,然后找到R2018a_win64_dvd1.iso,鼠标右击选择【装载】(WIN10系统自带虚拟光驱,所以可以直接打开.iso文件;WIN7/8系统加载.iso文件需要另外安装虚拟光驱,可安装ULtraISO);

  3. 在弹出的窗口内找到setup.exe,鼠标右击选择【以管理员身份运行】;

  4. 勾选“使用文件安装密钥”,然后点击【下一步】;

  5. 许可协议界面,勾选“是”,然后点击【下一步】;

  6. 输入安装密钥:09806-07443-53955-64350-21751-41297,然后点击【下一步】;

  7. 选择安装文件夹,默认安装在C盘,因软件占用磁盘空间12G+,建议点击【浏览】更改软件安装位置,注意:安装路径文件夹名称均不能出现中文字符!可软件安装在D盘Matlab2018a文件夹下,设置好后点击【下一步】;

  8. 去除第一条产品的勾选,放心,你一般不会用到的!然后点击【下一步】;

  9. 勾选“桌面”和“开始菜单”创建快捷方式,然后点击【下一步】;

  10. 默认,点击【安装】;

  11. 安装进度条达59%时,弹出窗口提示:弹出DVD1并插入DVD2以继续,先不要点击“确定”,也不要关闭,先把它放在一边;

  12. 下面开始装载第二个.iso文件,在装载新的.iso文件一定要先弹出之前加载的.iso文件,否则无法继续安装,双击桌面“此电脑”图标进入文件资源管理界面,找到之前加载的虚拟光驱,鼠标右击选择【弹出】;

  13. 返回初始软件安装包,然后找到R2018a_win64_dvd2.iso,鼠标右击选择【装载】;

  14. 点击安装界面中【确定】继续安装;

  15. 安装完成后弹出产品配置说明界面,默认,点击【下一步】;

  16. 安装完成,点击【完成】,安装结束后请勿直接打开软件,后续还须进行破解;

  17. 下面开始破解,返回初始安装文件夹,将安装包里的R2018a_Win64_Crack.zip解压,打开解压后的文件如图所示:

  18. 在解压后的文件里将License_standalone.lic复制到安装目录中Licenses文件夹里,例如安装路径位是D:\Matlab2018a,所以复制到D:\Matlab2018a\ Licenses\文件夹下;

  19. 打开Crack文件内的R2018a\bin\win64文件夹,将文件夹里面的netapi32.dll文件复制并粘贴到安装目录中win64文件夹下,例如安装路径位是D:\Matlab2018a,所以复制到D:\Matlab2018a\bin\win64文件夹下;

  20. 破解完成,双击桌面Matlab 2018a图标打开软件即可正常使用;

    界面如下图1所示:

2. 矩阵的基本操作与运算

2.1 矩阵的简单输入与操作

  • MATLAB以m×n的形式保存矩阵,其中m是行数,n是列数,特别地,一个1×1矩阵是一个标量;1×n矩阵是一个行向量,m×1矩阵是一个列向量;矩阵的全部元素可以是实数,也可以是复数;方括号“[]”表示一个矩阵,空格或逗号把相邻列元素分开,分号把相邻行分开;大矩阵可用多行语句输入,用回车符代替分号来区分矩阵的行。

例如输入:


%行向量的输入一种方式,空格隔开

a = [1 2 3 4]

%行向量的输入另一种方式,逗号隔开(行向量=数组)

a1 = [1,2,3,4]

%列向量的输入

b = [1;2;3;4]

%矩阵的输入

c = [1 2 3;2 3 4;3 4 5]


结果如下:

  • 数组一般包括向量和矩阵,一维数组即向量(vector),二维数组即矩阵(matrix)。冒号是MATLAB中的一个重要字符,其基本使用格式为:s1:s2:s3,其中,s1为起始值,s2为步长,s3为终止值。若s2的指为负数,则要求s1大于s3,否则结果为空向量;若s2不写,则取默认值1。

例如:


  • 二维数组子数组进行标识和寻访的最常见格式如下:

全下标法:

​ A(r,c):它由A的“r指定行和c指定列”的元素组成;

​ A(r,:):它由A的“r指定行”和“全部列”上的元素组成;

​ A(:,c) 它由A的“全部行”和“c指定列”上的元素组成;

单下标法:

​ A( :“单下标全元素”寻访由A各列按自左到右的次序,首位相接的一维列数组;

​ A(s):单下标寻访,生成s指定的一维数组;

例如输入:



结果如下:

  • 常用产生特殊矩阵的如下函数:
输入 生成形式
rand(m n) 随机矩阵,元素都是0到1之间
randn(m n) 正态分布的随机矩阵
zeros(m n) 零矩阵
ones(m,n) 全部元素都为1的矩阵
compan(A) 矩阵A的伴随矩阵
bankel(m,n) Hankel矩阵
invhilb(n) n维逆Hilbert矩阵
magic(n) n维Magic矩阵
toeplitz(m,n) Toeplitz矩阵
wilkinson(n) n维wilkinscn特征值测试矩阵
handamard(n) n维Handamard矩阵
hilb(n) n维Hilbert矩阵
kron(A,B) Kronecker 张量积
pascal(n) n维Pascal矩阵
vander(A) 由矩阵A产生vandermonde矩阵

例如输入:


a = eye(3,3)

b = rand(3,3)

c = ones(3,3)

d = zeros(3,3)


结果如下:

操作矩阵的常用函数如下:

输入 作用
size(x) 用于求矩阵x的大小
sort(x) 可对x进行升序排序,x为向量、数组、矩阵等等
find(x) 用来返回向量或者矩阵中不为0的元素的索引
numl(A) 返回数组A中元素的个数
ismember(A,B) 集合成员判断B中成员和A成员是否相等,相等的位置用1,否则用0
findstr(A,B),strfind(A,B) 在A,B中较长的字符串中查找较短的字符串出现的次数
setdiff(A,B) 返回在数组A中有B中没有的值,并将其结果向量以升序排序返回
intersect(A,B) 返回A和B共有的数据,不包含重复项,将其结果按升序排序
unique(x) 去掉矩阵x中重复的值并按升序排序

例如输入:


>> A = rand(3,4)

A =

0.0344 0.7655 0.4898 0.7094

0.4387 0.7952 0.4456 0.7547

0.3816 0.1869 0.6463 0.2760


结果如下:

2.2 矩阵的基本运算

2.2.1 算术运算

MATLAB的基本算术运算有:+(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘方)、’(转置)。运算是在矩阵意义下进行的,单个数据的算术运算只是一种特例。

矩阵加减运算:假定有两个矩阵A和B,则可以由A+B和A-B实现矩阵的加减运算。运算规则是:若A和B矩阵的维数相同,则可以执行矩阵的加减运算,A和B矩阵的相应元素相加减。如果A与B的维数不相同,则MATLAB将给出错误信息,提示用户两个矩阵的维数不匹配。

例如输入:



结果如下:

矩阵乘法运算:假定有两个矩阵A和B,若A为m*n矩阵,B为n*p矩阵,则C=A*B为m*p矩阵。

例如输入:



结果如下:

矩阵除法运算:在MATLAB中,有两种矩阵除法运算:\和/,分别表示左除和右除。如果A矩阵是非奇异方阵,则A\B和B/A运算可以实现。A\B等效于A的逆左乘B矩阵,也就是inv(A)*B,而B/A等效于A矩阵的逆右乘B矩阵,也就是B*inv(A)。对于含有标量的运算,两种除法运算的结果相同。对于矩阵来说,左除和右除表示两种不同的除数矩阵和被除数矩阵的关系,一般A\B≠B/A。

例如输入:


A = [1:3;4:6;7:9]

B = [2:4;6:8;10:12]

C = A\B

D = B/A


结果如下:

矩阵的乘方运算:一个矩阵的乘方运算可以表示成A^x,要求A为方阵,x为标量。

例如输入:



结果如下:

矩阵的点运算:在MATLAB中 有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算。点运算符有.*、./、.\和.^。两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同。

例如输入:



结果如下:

2.2.2 关系运算

MATLAB提供了6种关系运算符:<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)、~=(不等于)。关系运算符的运算法则为:

(1) 当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式结果为1,否则为0;

(2) 当参与比较的量是两个维数相同的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,并给出元素比较结果。最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成;

(3) 当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,并给出元素比较结果。最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。

例如输入:


>> A = [1:3;4:6;7:9]

B = [2:4;6:8;10:12]


结果如下:

2.2.3 逻辑运算:

MATLAB提供了3种逻辑运算符:&(与)、|(或)和~(非)。

逻辑运算的运算法则为:

(1) 在逻辑运算中,确认非零元素为真,用1表示,零元素为假,用0表示;

(2) 设参与逻辑运算的是两个标量a和b,那么,a&b,a,b全为非零时,运算结果为1,否则为0;a|b,a,b中只要有一个非零,运算结果为1;~a,当a是零时,运算结果为,;当a非零时,运算结果为0。

(3) 若参与逻辑运算的是两个同维矩阵,那么运算将对矩阵相同位置上的元素按标量规则逐个进行。最终运算结果是一个与原矩阵同维的矩阵,其元素由1或0组成;

(4) 若参与逻辑运算的一个是标量,一个是矩阵,那么运算将在标量与矩阵中的每个元素之间按标量规则逐个进行。最终运算结果是一个与矩阵同维的矩阵,其元素由1或0组成;

(5) 逻辑非是单目运算符,也服从矩阵运算规则;

(6) 在算术、关系、逻辑运算中,算术运算优先级最高,逻辑运算优先级最低。

例如输入:



结果如下:

2.3 矩阵分析

2.3.1 矩阵的转置与旋转

矩阵的转置:转置运算符是单撇号(’)。例如:



2.3.2 矩阵的翻转

MATLAB提供了一些矩阵翻转的特殊命令,如rot90(A)表示将矩阵A逆时针旋转90度,flipud(A)表示将A矩阵上下翻转,fliplr(A)表示将A矩阵左右翻转等。例如:


2.3.3 三角阵提取

三角阵分为上三角阵和下三角阵,所谓上三角阵,即矩阵的对角线以下的元素全为0的一种矩阵,而下三角阵则是对角线以上的元素全为0的一种矩阵。

上三角矩阵 求矩阵A的上三角阵的MATLAB函数是triu(A)。triu(A)函数也有另一种形式triu(A,k),其功能是求矩阵A的第k条对角线以上的元素。

下三角矩阵在MATLAB中,提取矩阵A的下三角矩阵的函数是tril(A)和tril(A,k),其用法与提取上三角矩阵的函数triu(A)和triu(A,k)完全相同。例如:


2.3.4 矩阵的逆与伪逆

矩阵的逆:对于一个方阵A,如果存在一个与其同阶的方阵B,使得:AB=BA=I(I为单位矩阵),则称B为A的逆矩阵,当然,A也是B的逆矩阵。求方阵A的逆矩阵可调用函数inv(A)。

矩阵的伪逆:如果矩阵A不是一个方阵,或者A是一个非满秩的方阵时,矩阵A没有逆矩阵,但可以找到一个与A的转置矩阵A’同型的矩阵B,使得:ABA=A,BAB=B 此时称矩阵B为矩阵A的伪逆,也称为广义逆矩阵。在MATLAB中,求一个矩阵伪逆的函数是pinv(A)。

例如:


2.3.5 方阵的行列式

把一个方阵看作一个行列式,并对其按行列式的规则求值,这个值就称为矩阵所对应的行列式的值。在MATLAB中,求方阵A所对应的行列式的值的函数是det(A)。

例如:


2.3.6 矩阵的秩与迹

矩阵的秩 矩阵线性无关的行数与列数称为矩阵的秩。在MATLAB中,求矩阵秩的函数是rank(A)。

矩阵的迹矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和。在MATLAB中,求矩阵的迹的函数是trace(A)。

例如:


2.3.7 矩阵的特征值与特征向量

在MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有3种:

  • E=eig(A):求矩阵A的全部特征值,构成向量E。

  • [V,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。

  • [V,D]=eig(A,’nobalance’):与第2种格式类似,但第2种格式中先对A作相似变换后求矩阵A的特征值和特征向量,而格式3直接求矩阵A的特征值和特征向量。

例如:


2.3.8 实例求解

(1)求矩阵A的特征值与特征向量

以《矩阵分析》教材P54,题1-23(1)为例,结果如下:


二、MATLAB开头命令

命令 作用
clc 清除命令窗口的内容,对工作环境中的全部变量无任何影响
clear 清除工作空间的所有变量
clear all 清除工作空间的所有变量,函数,和MEX文件
close 闭当前的Figure窗口
close all 关闭所有的Figure窗口
tic 用来保存当前时间,而后使用toc来记录程序完成时间

常规开头:

clc

clear all

close all

三、linspace函数的用法

语法

y = linspace(x1,x2)

y = linspace(x1,x2,n)


说明

  • y = linspace(x1,x2) 返回包含 x1 和 x2 之间的 100 个等间距点的行向量。

  • y = linspace(x1,x2,n) 生成 n 个点。这些点的间距为 (x2-x1)/(n-1)。

= linspace 类似于冒号运算符“:”,但可以直接控制点数并始终包括端点。

  • “linspace”名称中的“lin”指示生成线性间距值而不是同级函数 logspace,后者会生成对数间距值。

创建一个由区间 [-5,5] 中的 100 个等距点组成的向量。

y = linspace(-5,5);


包含指定数量的值的向量

创建一个由区间 [-5,5] 中的 7 个等距点组成的向量。


由均匀分布的复数组成的向量

创建一个复数向量,包含介于1+2i和10+10i之间的8个等距点。


输入参数

点区间,指定为数值标量对组。

x1和x2定义linspace生成点的区间。x1和x2可以是实数或复数x2可以大于或小于x1。如果x2比x1小,则向量包含递减的值。

n——点的数目,指定为实数标量。

如果n为1,则linspace返回x2。

如果n为零或负数,则linspace返回1×0空矩阵。

如果 n 不是整数,则 linspace 向下舍入并返回 floor(n) 个点。

四、continue、break和return语句

continue 将控制权传递到 for 或 while 循环的下一迭代。它跳过当前迭代的循环体中剩余的任何语句。程序继续从下一迭代执行。

continue 仅在调用它的循环的主体中起作用。在嵌套循环中,continue 仅跳过循环所发生的循环体内的剩余语句。

**


五、随机数产生函数用法

Matlab随机数生成函数:

函数 生成类型
betarnd 贝塔分布的随机数生成器
binornd 二项分布的随机数生成器
chi2rnd 卡方分布的随机数生成器
exprnd 指数分布的随机数生成器
frnd f分布的随机数生成器
gamrnd 伽玛分布的随机数生成器
geornd 几何分布的随机数生成器
hygernd 超几何分布的随机数生成器
lognrnd 对数正态分布的随机数生成器
nbinrnd 负二项分布的随机数生成器
ncfrnd 非中心f分布的随机数生成器
nctrnd 非中心t分布的随机数生成器
ncx2rnd 非中心卡方分布的随机数生成器
normrnd 正态(高斯)分布的随机数生成器
poissrnd 泊松分布的随机数生成器
raylrnd 瑞利分布的随机数生成器
trnd 学生氏t分布的随机数生成器
unidrnd 离散均匀分布的随机数生成器
unifrnd 连续均匀分布的随机数生成器
weibrnd 威布尔分布的随机数生成器

六、min()和max()

七、sum()用法

八、fmincon()

x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon)

求解标准型:

function f = myfun(x);

f = 优化目标函数;

function [c,ceq] = nonlcon(x)

c = 非线性不等式约束

ceq = 非线性等式约束

x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@nonlcon)

x0为优化初值

例:

function f = myfun(x);

f=x(1).^2+x(2).^2+x(3).^2+8;

function [c,ceq]= mycon(x);

c=[-x(1).^2+x(2)-x(3).^2 %标准型是≤,本例是≥,所以对变量取反

x(1)+x(2).^2+x(3).^3-20];

ceq=[-x(1)-x(2).^2+2

x(2)+2*x(3).^2-3];

[x,result]=fmincon(@myfun,rand(3,1),[ ],[ ],[ ],[ ],zeros(3,1),[ ],' mycon ')

输出结果:x1=0.5522,x2=1.2033,x3=0.9478

result = 10.651

【编程学习】MATLAB的更多相关文章

  1. ☆☆如何学习MATLAB☆☆

    大多数朋友第一次接触MATLAB一般都是在大学里面开设的MATLAB课程,第一次真正使用MATLAB是在自己的毕业论文中用到.所以对于MATLAB可以说是既爱又恨.爱,是因为使用MATLAB几乎可以实 ...

  2. 现代3D图形编程学习-基础简介(3)-什么是opengl (译)

    本书系列 现代3D图形编程学习 OpenGL是什么 在我们编写openGL程序之前,我们首先需要知道什么是OpenGL. 将OpenGL作为一个API OpenGL 通常被认为是应用程序接口(API) ...

  3. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  4. 现代3D图形编程学习-基础简介(2) (译)

    本书系列 现代3D图形编程学习 基础简介(2) 图形和渲染 接下去的内容对渲染的过程进行粗略介绍.遇到的部分内容不是很明白也没有关系,在接下去的章节中,会被具体阐述. 你在电脑屏幕上看到的任何东西,包 ...

  5. 现代3D图形编程学习-基础简介(1) (译)

    本书系列 现代3D图形编程学习 基础简介 并不像本书的其他章节,这章内容没有相关的源代码或是项目.本章,我们将讨论向量,图形渲染理论,以及OpenGL. 向量 在阅读这本书的时候,你需要熟悉代数和几何 ...

  6. 现代3D图形编程学习-环境设置

    本书系列 现代3D图形编程学习 环境设置 由于本书中的例子,均是基于OpenGL实现的,因此你的工作环境需要能够运行OpenGL,为了读者能够更好的运行原文中的示例,此处简单地介绍了linux和win ...

  7. 现代3D图形编程学习-关于本书(译)

    本书系列 现代3D图形编程学习 关于这本书 三维图像处理硬件很快成为了必不可少的组件.很多操作系统能够直接使用三维图像硬件,有些甚至要求需要有3D渲染能力的硬件.同时对于日益增加的手机系统,3D图像硬 ...

  8. 推荐一个算法编程学习中文社区-51NOD【算法分级,支持多语言,可在线编译】

    最近偶尔发现一个算法编程学习的论坛,刚开始有点好奇,也只是注册了一下.最近有时间好好研究了一下,的确非常赞,所以推荐给大家.功能和介绍看下面介绍吧.首页的标题很给劲,很纯粹的Coding社区....虽 ...

  9. [转]Windows网络编程学习-面向连接的编程方式

    直接附上原文链接:windows 网络编程学习-面向连接的编程方式

  10. Linux Shell编程学习笔记——目录(附笔记资源下载)

    LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...

随机推荐

  1. net core天马行空系列-各大数据库快速批量插入数据方法汇总

    1.前言 hi,大家好,我是三合.我是怎么想起写一篇关于数据库快速批量插入的博客的呢?事情起源于我们工作中的一个需求,简单来说,就是有一个定时任务,从数据库里获取大量数据,在应用层面经过处理后再把结果 ...

  2. YII模块化处理

    config.php $config = [ 'modules' => [ 'comment' => [ 'class' => 'frontend\modules\comment\C ...

  3. Spring 常见面试题总结 | JavaGuide

    首发于 JavaGuide 在线网站:Spring 常见面试题总结 最近在对 JavaGuide 的内容进行重构完善,同步一下最新更新,希望能够帮助你. Spring 基础 什么是 Spring 框架 ...

  4. 基于Python3(Autosub)以及Ffmpeg配合GoogleTranslation(谷歌)为你的影片实现双语版字幕(逐字稿)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_169 为影片加字幕其实是一件非常耗费时间的事情,尤其是对于打字慢的朋友来说.当然不光为影片加字幕,在其他领域,类似的逐字稿也是工作 ...

  5. 并发刺客(False Sharing)——并发程序的隐藏杀手

    并发刺客(False Sharing)--并发程序的隐藏杀手 前言 前段时间在各种社交平台"雪糕刺客"这个词比较火,简单的来说就是雪糕的价格非常高!其实在并发程序当中也有一个刺客, ...

  6. JavaScript 里三个点 ...,可不是省略号啊···

    摘要:Three dots ( - ) in JavaScript. 本文分享自华为云社区<JavaScript 里三个点 ... 的用法>,作者: Jerry Wang . Rest P ...

  7. MySQL的三值逻辑

    MySQL 采用三值逻辑 SELECT 1 = 1; SELECT 1 = 2; SELECT 1 = NULL; SELECT 1 != NULL; 上面四条语句的结果分别为: 可见MySQL采用三 ...

  8. Linux系列之链接

    前言 在类Unix系统中,一个文件有可能被多个名字引用.我们使用链接来实现这一点,链接共有两种类型:硬链接和软链接,本文分别来介绍它们. 硬链接 硬链接也允许指向文件,但与符号链接的方式不同.它们是U ...

  9. EMAS Serverless到底有多便利?

    EMAS Serverless 简介 EMAS Serverless 是阿里云提供的基于Serverless技术的一站式后端开发平台,为开发者提供高可用.弹性伸缩的云开发服务,包含云函数.云数据库.云 ...

  10. metasploit进行局域网远控

    用metasploit进行局域网远程控制 Metasploit是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,提供真正的安全 ...