Matlab笔记---matlab入门知识整理
Matlab是matrix&laboratory两个词的组合(矩阵实验室)
- 左上角,home标签下,找到layout进行设置/复位,可以设置各板块的显示与隐藏。其中有几个部分,请务必要显示。
- Current Folder:中文一般翻译成工作路径,一般设置成一个自己建立的、有读写权限的文件夹,例如我的文档下建立一个matlab文件夹。
matlab的当前工作路径只有选中才能调用其中的文件: 在MATLAB界面的地址栏中的地址,就是代表当前的运行工作目录,在命令行窗口中输入cd,敲击回车也可以查到当前的工作路径,是和地址栏中的 路径一致的。 修改工作路径的格式命令如下cd('需要设定为工作路径的地址'),敲击回车就会生效。例如文中将C:\Users\A\Documents\MATLAB设为工作路径。 或者在命令行窗口中输入pathtool,敲击回车,接着会弹出设置路径的窗口。点击添加文件夹或者添加包含子文件夹的文件,可以通过左侧的按钮移动位置(上移、下移动、移动至底端)。保存生效。
- Command Window:字面意思是命令窗口,用来运行代码,所有的代码都是在这里输入Workspace:字面意思是工作空间,其实就是暂存所有运行结果的地方,“暂”的具体含义是:关闭matlab后丢失。
W3School学习传送门:https://www.w3cschool.cn/matlab/matlab-o7xk28j0.html
一、软件中的基本概念
1 .1 函数
matlab之所以强大,就是因为提供大量的函数,你也可以建立自定义函数,方法是:Home->New->function。自定义函数一般保存在工作路径下。函数文件的特征是:扩展名m,内容的第一行以function开头,后续内容是“输出变量=函数名(输入变量)”。且函数名和文件名相同。
每个函数在Command Window中运行,用来完成特定的计算任务,运行方式是输入“输出变量=函数名(输入变量)”,然后按回车。例如有个系统自带的函数是用来求绝对值的,函数名abs,所以在Command Window里输入“a=abs(-1)”,就会显示运算结果为“a=1”。且运算结果会在Workspace里出现一个变量a,双击后可看到a的值是1。
定义函数:
function [输出参数] = 函数名(输入参数)
函数体
end
例子:
function d =myfunc(a,b,c) %实现abc的计算 d=(a^2+b)/c; end
注意事项:函数名和文件名一样,函数只能被调用,不能被直接执行,因为没有输出参数。
grid on //打开图像的网格
-----------------------------------------------批量读取文件------------------------------------------------------ clear;clc;close all jpgimages=dir('myfolder\*.jpg'); % 读取指定文件夹下所有.jpg文件的信息 N=length(jpgimages); % .jpg文件的个数 Names={}; % 用于存放.jpg文件的文件名 IMs={}; % 用于存放每个.jpg文件的图像矩阵 for k=1:N Names{k}=jpgimages(k).name; % 依次得到.jpg的文件名,存放在Names元胞数组里 IMs{k}=imread(['myfolder\' Names{k}]); % 依次得到.jpg的图像矩阵,存放在IMs元胞数组里 figure(k); imshow(IMs{k}); end
1.2 脚本
可以理解为特殊的函数,这种函数内容的开头没有function那行,因此没有输入、输出变量,也没有函数名。文件扩展名和函数一样是m,也需要在Command Window里运行。脚本都是用户建立的,方法是:Home->New Script。一般保存在工作路径下。脚本的功能就是完成用户需要的、复杂的计算任务,通常脚本里会调用很多函数
1.3 GUI
一般翻译为界面,就是人机交互界面的意思。写脚本处理问题的方法有点麻烦,让人看起来更像是码农,所以现在很多问题可以通过界面点点鼠标解决。这时候就需要打开界面,打开方法是:在APPS标签里可以找到所有已安装的GUI工具,单击即可。注意右边有个小三角可以点开。和函数一样,用户也可以自己建立自定义GUI。
1.4 toolbox
一般翻译成工具箱,matlab将功能相近或者应用上自成体系的一组函数和GUI打包成一个toolbox。正版的matlab在购买时,几乎每一个toolbox都是要单独收费的,所以toolbox也可以理解为matlab产品的模块,一个工具箱就是一个产品/商品。
1.5 simulink
一般用matlab解决问题的过程是:用户自定义脚本,在Command Window里运行脚本。而脚本的运行逻辑是顺序执行,和一般的编程一样。simulink则提供另一种思路,图形化编程,有点像labview,这种方法很适合于物理模型的仿真,因此有时用“matlab编程”和“simulink仿真”强调。使用方法是在home标签下点击simulink。
1.6 获得帮助
- cn.mathworks.com官网上找到支持,然后可以获得教程。
- 在Command Window里输入 doc+函数名 来获得帮助。比如输入"doc fft"可以获得离散傅里叶变换函数fft的帮助和范例。这种方法获得的文档是前两种方法文档中的部分。当然,前提是你要知道函数名,才能找到帮助。这种方法适合于获得系统自带函数的使用说明。
- 使用GUI时,通常界面的角落里有Help,点开可以获得帮助。这种方法获得的文档是第一和第二种方法文档中的部分。这种方法适合于获得系统自带GUI的使用说明。
这几种方法中,最常用的是第二种,只要知道自己需要的函数名,就可以用这种方式获得说明和范例。而实际使用中,一般常用的系统自带函数,也并不是非常多,大概几十个?真正需要牢记使用方法的可能就几个,通常都是知道函数名,要用的时候doc一下。
二、命令窗口的基本配置
2.1 format命令
进行数据类型转换,行间距调节等功能时,用
format + 关键词 回车
eg:format long 回车 //将数据变为长整型
format compat/loose 回车 //调节行间距紧密/松散
2.2 clc命令
清屏。即清理当前屏幕上的内容,屏幕上没有了,但保留在内存中了
2.3 clear命令
删除某一变量,或清空工作区
clear + 变量名 回车
eg:clear a 回车 //删除工作区中的a变量
clear或者clear all //清空工作区。建议在刚打开matlab窗口时先清空一下工作区。
2.4 whos命令
查看某变量详细信息
whos 回车 //查看所有变量信息
whos + 变量名 回车 // 查看该变量详细信息
2.5 x/ylable命令 //给xy轴加横纵坐标说明
2.6 disp() //屏幕输出函数,类似于c语言中的printf()函数
disp函数直接将内容输出在Matlab命令窗口中,关键是看disp函数怎么把字符和数字在一起进行显示。
disp(X)函数只有一个输入,当你有多个字符串作为输入时就会报错。
例如:
disp('Alice is ' , num2str(12) , ' years old!' );
就会报错--输入参数过多。但是将里边的内容用中括号一括就成了一个字符串,
例如:
str=['Alice is ' num2str(12) ' years old!'];
disp(str);
上边这句话也就等价于:
disp=(['Alice is ' num2str(12) ' years old!']);
这就是加中括号的原因,而不是因为num2str(),因为disp(num2str(12));也是正确的,因为里边就只有一个字符串。
2.7 zeros函数 %创建一个全为零元素的数组
-
B = zeros(n) 返回一个n x n的零矩阵.如果n不是一个标量,将抛出错误。
-
B = zeros(m,n) or B = zeros([m n]) 返回一个m x n的零矩阵。
-
B = zeros(d1,d2,d3...) or B = zeros([d1 d2 d3...]) 返回一个d1-by-d2-by-d3-by-... .的零元素数组。
-
B = zeros(size(A)) 返回一个和A一样大小的零数组。
-
zeros(m, n,...,classname) or zeros([m,n,...] 返回一个类型为classname的m x n x...零数组。classname可以是下面一些值:double', 'single', 'int8', 'uint8', 'int16', 'uint16', 'int32', or 'uint32'
-
示例
-
x = zeros(2,3,'int8');
-
备注
-
MATLAB语言 没有一个 维度 声明 ; MATLAB 自动为矩阵分配存储空间。 然而,对于大型矩阵 , MATLAB程序可能会执行得更快 ,如果零函数用于设置一个矩阵,其元素将产生一次 , 或行或列的时间预留存储空间。
三、matlab定义和初始化变量:一般形式: 变量 = 表达式(数)
在MATLAB中,变量名是以字母开头,后接字母、数字或下划线的字符序列,最多63个字符。
在MATLAB中,变量名区分字母的大小写。
直接输入,类似:
x=2
x=[1,2,3] %或者 x=[1 2 3]
y=[1 2 3;4 5 6]
A=[1 2;3 4]
B=[3 4;5 6]
a = [1 2 3 ; 4 5 6 ; 7 8 9 ] %矩阵形式赋值. a = 1:2:10 %固定步长的矩阵. zeros(3,2) %三行两列的全零矩阵. who % 检查工作空间的变量 whos % 检查存于工作空间变量的详细资料 a = 1 2 3 4 5 6 7 8 9 a = 1 3 5 7 9 ans = 0 0 0 0 0 0 Your variables are: A B C X Y Z a ans b f1 f2 fs i num t x y y1 y2 yy Name Size Bytes Class Attributes A 3x3 72 double B 3x3 72 double C 3x3 72 double X 21x21 3528 double Y 21x21 3528 double Z 21x21 3528 double a 1x5 40 double ans 3x2 48 double b 1x32 256 double f1 1x1 8 double f2 1x1 8 double fs 1x1 8 double i 1x1 8 double num 1x1 8 double t 1x221 1768 double x 1x21 168 double y 1x21 168 double y1 1x126 1008 double y2 1x126 1008 double yy 1x221 1768 double
四、基本运算:
除常用的加减乘除运算外,还包括矩阵运算。
例如:
1.自增:x=1
x=x+1
2.矩阵相加:
A+B=[4 6;8 10]
注意事项:A*B 表示数学中的矩阵乘法,A.*B表示矩阵对应位置数据相乘。
-
A( i , : ) 表示 A矩阵的第 i 行所有元素
-
A( : , j ) 表示 A矩阵的第 j 列所有元素
-
A( : , : ) 表示 A矩阵的 所有元素
- A(:) // 是将A矩阵按列排成一列
- 定义函数时,函数中有嵌套函数需要在结束时加end;其他情况可加可不加
- length(A):求矩阵A的所有维度中的最大值
- pause(a)表示程序暂停a秒后继续执行;只有pause;并没有参数a,这样的意思是程序暂停,按任意键程序继续执行。
- ones()返回元素全为1的矩阵
- zeros()返回元素全为1 的矩阵
- size(A,1)返回矩阵A的行数
- size(A,2)返回矩阵A的列数
- surf(x,y,z)绘制曲面图
- contour()绘制等高线图
3.常用函数:
%* norm 范数
% * det 行列式
% * inv 方阵的逆矩阵
% * size 矩阵的阶数
% * rank 秩
% * trace 迹
% * eig 特征值和特征向量
% * ^ 乘方运算
% * sqrtm 开方运算
% * expm 指数运算
% * logm 对数运算
A = [6 7 5 ; 3 6 9 ; 4 1 5 ] B = 20 + A C = inv (A) * B eig(C) %求矩阵的特征根 % 矩阵的乘方运算和开方运算 A = [6 7 5 ; 3 6 9 ; 4 1 5 ] B = A^2 C = sqrtm(B) A = 6 7 5 3 6 9 4 1 5 B = 26 27 25 23 26 29 24 21 25 C = 3.8571 2.8571 2.8571 -0.9524 0.0476 -0.9524 1.9048 1.9048 2.9048 ans = 4.8095 1.0000 1.0000 A = 6 7 5 3 6 9 4 1 5 B = 77 89 118 72 66 114 47 39 54 C = 6.0000 7.0000 5.0000 3.0000 6.0000 9.0000 4.0000 1.0000 5.0000
五、 程序控制语句
- if语句
- 循环语句
5.1 if语句
x = 32 ; y = 86; if x > y 'x 大于 y' elseif x < y 'x 小于 y' elseif x == y ' x 等于y' else 'error' end ans = x 小于 y
5.2 循环语句:for 循环的基本格式为:
for 循环变量 = 起始值 : 步长 : 终止值 循环体 end
% for循环使用示例 a = 0; for i = 1:1:10 a = a + i ; end a a = 55
-
while循环语句基本格式为
while 表达式 循环体 end
% while循环使用示例
num = 0; a = 5; while a >1 a = a/2; num = num + 1; end num num = 3
六、基本绘图方法
- plot 二维线性图
- subplot 绘制子图
- figure() 创建一个图的窗口
- titel 图的标题
- xlabel x坐标
- ylabel y坐标
- grid 图显示网格
- hold 保持当前图形
- clf 清除图形和属性
- mesh 三维网线图
- plot3 三维图形
- surf 三维表面图
- 绘图的基本步骤
- 三维图形的绘制
- 空间曲面的绘制
6.1 绘图的基本步骤:
x = -pi:.1:pi; y1 = sin(x); y2 = cos(x); %准备绘图数据 figure(1) %打开图形窗口 subplot(2,1,1) %确定第一幅图绘图窗口 plot(x,y1) %以x,y1绘图 title('绘图的基本步骤') %为第一幅图设置标题:"绘图的基本步骤" grid on %显示网格线 subplot(2,1,2) %确定第二幅图绘图窗口 plot(x,y2) %以x,y2绘图 xlabel('time') %为第二幅设置x坐标名'time' ylabel('y') %为第二幅设置y坐标名'y' figure(2) %打开图形窗口 subplot(1,2,1),stem(x,y1,'r') %绘制红色的脉冲图 subplot(1,2,2),errorbar(x,y1,'g') %绘制绿色的误差条形图
6.2 三维图形的绘制
figure(3) x = 0:0.1:4*pi; y1 = sin(x); y2 = cos(x); plot3(y1,y2,x) title('绘图的三维图形') grid on
6.3 空间曲面的绘制
x = [-2:0.2:2]; y = x; [X,Y] = meshgrid(x,y); Z = X.*exp(-X.^2-Y.^2); subplot(2,2,1) % 绘制子图第一幅 surf(Z); shading flat subplot(2,2,2) % 绘制子图第二幅 mesh(Z); subplot(2,2,3) % 绘制子图第三幅 meshc(Z) subplot(2,2,4) % 绘制子图第四幅 surfl(Z) view(20,7)
参考博客:
https://www.cnblogs.com/xilifeng/archive/2012/09/01/2666484.html#1
https://blog.csdn.net/qq_37764129/article/details/80070794
https://blog.csdn.net/C1664510416/article/details/81749870