【编程学习】MATLAB
一、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 安装步骤
使用“百度网盘客户端”下载Matlab 2018a软件安装包和Crack破解文件到电脑磁盘里,注意:Matlab 2018a安装包为两个iso格式文件‘
安装前先断开电脑网络,然后找到R2018a_win64_dvd1.iso,鼠标右击选择【装载】(WIN10系统自带虚拟光驱,所以可以直接打开.iso文件;WIN7/8系统加载.iso文件需要另外安装虚拟光驱,可安装ULtraISO);
在弹出的窗口内找到setup.exe,鼠标右击选择【以管理员身份运行】;
勾选“使用文件安装密钥”,然后点击【下一步】;
许可协议界面,勾选“是”,然后点击【下一步】;
输入安装密钥:09806-07443-53955-64350-21751-41297,然后点击【下一步】;
选择安装文件夹,默认安装在C盘,因软件占用磁盘空间12G+,建议点击【浏览】更改软件安装位置,注意:安装路径文件夹名称均不能出现中文字符!可软件安装在D盘Matlab2018a文件夹下,设置好后点击【下一步】;
去除第一条产品的勾选,放心,你一般不会用到的!然后点击【下一步】;
勾选“桌面”和“开始菜单”创建快捷方式,然后点击【下一步】;
默认,点击【安装】;
安装进度条达59%时,弹出窗口提示:弹出DVD1并插入DVD2以继续,先不要点击“确定”,也不要关闭,先把它放在一边;
下面开始装载第二个.iso文件,在装载新的.iso文件一定要先弹出之前加载的.iso文件,否则无法继续安装,双击桌面“此电脑”图标进入文件资源管理界面,找到之前加载的虚拟光驱,鼠标右击选择【弹出】;
返回初始软件安装包,然后找到R2018a_win64_dvd2.iso,鼠标右击选择【装载】;
点击安装界面中【确定】继续安装;
安装完成后弹出产品配置说明界面,默认,点击【下一步】;
安装完成,点击【完成】,安装结束后请勿直接打开软件,后续还须进行破解;
下面开始破解,返回初始安装文件夹,将安装包里的R2018a_Win64_Crack.zip解压,打开解压后的文件如图所示:
在解压后的文件里将License_standalone.lic复制到安装目录中Licenses文件夹里,例如安装路径位是D:\Matlab2018a,所以复制到D:\Matlab2018a\ Licenses\文件夹下;
打开Crack文件内的R2018a\bin\win64文件夹,将文件夹里面的netapi32.dll文件复制并粘贴到安装目录中win64文件夹下,例如安装路径位是D:\Matlab2018a,所以复制到D:\Matlab2018a\bin\win64文件夹下;
破解完成,双击桌面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的更多相关文章
- ☆☆如何学习MATLAB☆☆
大多数朋友第一次接触MATLAB一般都是在大学里面开设的MATLAB课程,第一次真正使用MATLAB是在自己的毕业论文中用到.所以对于MATLAB可以说是既爱又恨.爱,是因为使用MATLAB几乎可以实 ...
- 现代3D图形编程学习-基础简介(3)-什么是opengl (译)
本书系列 现代3D图形编程学习 OpenGL是什么 在我们编写openGL程序之前,我们首先需要知道什么是OpenGL. 将OpenGL作为一个API OpenGL 通常被认为是应用程序接口(API) ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- 现代3D图形编程学习-基础简介(2) (译)
本书系列 现代3D图形编程学习 基础简介(2) 图形和渲染 接下去的内容对渲染的过程进行粗略介绍.遇到的部分内容不是很明白也没有关系,在接下去的章节中,会被具体阐述. 你在电脑屏幕上看到的任何东西,包 ...
- 现代3D图形编程学习-基础简介(1) (译)
本书系列 现代3D图形编程学习 基础简介 并不像本书的其他章节,这章内容没有相关的源代码或是项目.本章,我们将讨论向量,图形渲染理论,以及OpenGL. 向量 在阅读这本书的时候,你需要熟悉代数和几何 ...
- 现代3D图形编程学习-环境设置
本书系列 现代3D图形编程学习 环境设置 由于本书中的例子,均是基于OpenGL实现的,因此你的工作环境需要能够运行OpenGL,为了读者能够更好的运行原文中的示例,此处简单地介绍了linux和win ...
- 现代3D图形编程学习-关于本书(译)
本书系列 现代3D图形编程学习 关于这本书 三维图像处理硬件很快成为了必不可少的组件.很多操作系统能够直接使用三维图像硬件,有些甚至要求需要有3D渲染能力的硬件.同时对于日益增加的手机系统,3D图像硬 ...
- 推荐一个算法编程学习中文社区-51NOD【算法分级,支持多语言,可在线编译】
最近偶尔发现一个算法编程学习的论坛,刚开始有点好奇,也只是注册了一下.最近有时间好好研究了一下,的确非常赞,所以推荐给大家.功能和介绍看下面介绍吧.首页的标题很给劲,很纯粹的Coding社区....虽 ...
- [转]Windows网络编程学习-面向连接的编程方式
直接附上原文链接:windows 网络编程学习-面向连接的编程方式
- Linux Shell编程学习笔记——目录(附笔记资源下载)
LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...
随机推荐
- 小白之Python基础(三)
列表和元组 1.列表:最常用的 Python 数据类型(可变的数据类型) 1)列表是一个值,它包含多个值构成的序列: 2)通过[ ]或list()创建的有序元素的集合: 3)表项(列表中的值,也可以叫 ...
- 英特尔CPU系列
1.酷睿(Core)系列,主要应用于管理 3D.高级视频和照片编辑,玩复杂游戏,享受高分辨率 4K 显示. 2.奔腾(PenTIum)系列,主要应用于借助功能丰富的处理器,加快便携式 2 合 1 电脑 ...
- SDK和API的直接区别
狭义的说法,在实际工作中, 如果对方需要你提供一个api,是指一个工程提供给另外一个工程的接口(一般是基于http协议). 如果对方需要你提供一个sdk,是指基于对方工程的编程语言,提供一个代码包.在 ...
- GreatSQL季报(2021.12.26)
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 自从GreatSQL 8.0.25 于 2021.8.26发布以来,针对MGR的 ...
- Floyd算法详解
Floyd本质上使用了DP思想,我们定义\(d[k][x][y]\)为允许经过前k个节点时,节点x与节点y之间的最短路径长度,显然初始值应该为\(d[k][x][y] = +\infin (k, x, ...
- Python自学笔记6-列表有哪些常用操作
列表是Python中最重要的数据类型,它使用的频率非常非常的高,最大程度的发挥Python的灵活性. 和字符串一样,列表的操作方法也有很多.如果说一头钻进去,可能会导致学习没有重点.在这篇文章当中,首 ...
- 小A的树 - 树形DP
题面 1 9 4 4 1 1 5 1 2 3 2 3 6 6 7 6 8 9 6 0 1 0 1 0 0 1 0 1 3 2 7 3 4 0 9 5 YES YES NO NO 题解 n <= ...
- 【Java】学习路径47-线程锁synchronized
线程安全问题: 简单来说,就是多个线程在操作同一个变量时引起的问题. 这里是用一个简单的例子说明一下: 以Runnable创建的线程为例:一个售票系统,count代表当前票数,卖出一张count--. ...
- QPainter. QpaintDevice 绘图设备
QPaintDevice 绘图设备 1 QPixmap QImage Qbitmap(黑白色) QPicture QWidget 2 QPixmap 对不同平台做了显示优化 fill(填充颜色) Q ...
- 超详细 VS Code 配置C/C++教程
写在前面 如果您使用的电脑内存 \(\leq 4 \texttt{GB}\),建议您使用Dev-C++,否则会到时内存占用爆满,体验感不佳. 网上的很多教程都不够详细,这里我把每一步.每一个操作都详细 ...