Matlab 使用笔记(本人出品,必属精品)

30 篇文章 26 订阅

更新时间: 2020/8/20
在这里插入图片描述
小姐姐来源于网络
听说,在博客中挂小姐姐会增加访问量😳😳😳

【日志】
2020/5/13
原谅我将CSDN 作为笔记本使用,关键是它太方便了,只要有网就可以在终端上查看,而且还可以更改,可以贴代码,插图片。今天先把框架做好,内容什么的咱们来日方长。话不多说,直接开整 >>
CSDN 上带的makedown 编辑器为啥没有matlab ,注释只好用//了,matlab 实际注释标识符为 %
2020/5/20
突然发现之前的课件都是精华啊!只是当时没有好好总结,不然现在也不用如此费力写总结辽。
不想把文章搞得太长,所以后面将 实用操作 部分和 常用功能 部分划到子博客中,本篇博客之介绍基础知识部分。

PART I 基础知识

1.HELP

像MATLAB 如此高质量的软件,自己的帮助系统已经十分完备详细了,想要玩转MATLAB 就要首先学会如何获取帮助:

1.help
help  //显示help 主题一览表
help plot //显示有关三维做图指令
help [ //显示特殊字符与符号帮助
help help //显示help 的帮助信息

2.lookfor
lookfor  //它可提供通过一般的关键词,搜索出一组与之相关的命令
lookfor fourier  //eg. 寻找含有傅立叶变换的相关指令

3.demo  //打开帮助文档,会有许多函数等的使用示例
4.helpwin  //ATLAB file help displayed in a window
5.helpdesk  //omprehensive hypertext documentation and troubleshooting.

数据类型小总结
在这里插入图片描述

2.文件路径

关于文件路径,好像所有的软件或是语言都是通用的,也许是大家约定俗成的,反正用起来很相似。
文件分为相对路径(= 当前工作路径 + filename)和绝对路径(以盘符开头的)

1.获取当前工作路径
cd

2.更改当前工作路径,filepath 为要设置的工作路径
cd('filepath')
pathtool //弹出设置路径的窗口
//或者可以在编辑界面上方直接修改

3.返回上一文件路径
cd('..\')
//目前就会这几招,以后用到其他的再来补充

3.常用符号/ 操作命令/ 键盘操作和快捷键/ 预定义变量

1.常用符号的含义

符号含义符号含义
;区分行,取消运行显示等.小数点以及域访问等
,区分列,函数参数分隔符等连接语句(续行符)
:在数组中应用较多’ ’字符串的标识符号
( )指定运算优先级等=赋值符号
[ ]矩阵定义的标志等!调用操作系统命令
{ }用于构成元胞数组等%注释语句的标识
共轭转置符号.’非共轭转置

2.常用操作命令

命令功能命令功能
hold图形保持命令disp显示变量或文字内容
clc清除工作窗load加载指定文件的变量
clear清除内存变量cd显示或改变工作目录
clf清除图形窗口echo工作窗信息显示开关
diary日志文件命令quit退出MATLAB
path显示搜索目录save保存内存变量到指定文件
type显示文件内容dir显示当前目录下文件
pack整理内存碎片who/whos返回工作空间中都有哪些变量/size

3.键盘操作和快捷键

按钮和快捷键功能按钮和快捷键功能
↑(Ctrl+ p)调用上一行Home(Ctrl+ a)光标置于当前行开头
↓(Ctrl+ n)调用下一行End(Ctrl+ e)光标置于当前行结尾
←(Ctrl+ b)光标左移一字符Esc(Ctrl+ u)清除当前输入行
→(Ctrl+ f)光标右移一字符Del(Ctrl+ d)删除光标处字符
Ctrl+←光标左移一单词Backspace(Ctrl +h)删除光标前字符
Ctrl+→光标右移一单词Ctrl+ z恢复上一次删除
Ctrl+R快速注释Ctrl+ T取消注释
Ctrl+C中止程序F12设置/清除断点
F5执行F10单步执行
F11单步执行,入函数
Ctrl+=全部折叠Ctrl+shift + =全部展开

更多快捷键:

https://wenku.baidu.com/view/351cd91c7f1922791688e8c8?ivk_sa=1023194j

4.预先定义其数值的变量

名称说明名称说明
pi圆周率常数eps浮点数的相对误差
INF无穷大i (或j)虚数单位
NaN(或nan)不定值nargin函数实际输入参数个数
realmax最大的正实数nargout函数实际输出参数个数
realmin最小的正实数ANS(或ans)默认变量名,存储最近一次运算结果

5.数学函数

函数名含义函数名含义
sin( )正弦函数cos( )余弦函数
tan( )正切函数cot( )余切函数
asin( )反正弦函数acos( )反余弦函数
atan( )反正切函数acot( )反余切函数
sec( )正割函数csc( )余割函数
asec( )反正割函数acsc( )反余割函数
sinh( )双曲正弦函数tanh( )双曲正切函数
asinh( )反双曲正弦函数acosh( )反双曲余弦函数
atanh( )反双曲正切函数exp( )以e为底的指数函数
sqrt( )平方根函数log( )自然对数函数
log10( )常数对数函数(这里以10为底)fix( )向零取整方向
ceil( )向上取整floor( )向下取整
round( )四舍五入取整rem(a,b)a除以b取余
sign( )符号函数abs( )绝对值函数
factor( )质数分解函数factorial( )阶乘函数

4.数组/矩阵

关于这块,内容有很强的可扩充性,所以又开了篇博客。目前内容有:对数组的创建、数学上常用的求特征值、求卷积、判断数组是否相等(2020.10.30)传送门参上:
https://blog.csdn.net/Gou_Hailong/article/details/109362945

5.字符串 /元胞 /结构体

转换:https://blog.csdn.net/qq_43157190/article/details/107692624

在这里插入图片描述

字符串

1.创建
a='You '; //单引号赋值
[a b c];  //方括号合并多个字符串
s=strcat(a,b,c); //strcat函数横向连接多个字符串,去空格
//多行字符串-
S=['abc'; 'd f'] //直接输入创建: (需保证每行等长,各行用分号隔开)
s1=char('This string array','has two rows.')
s2=str2mat('这','是',' ','字符串' )

2.转换
int2str() //把整数数组转换成串数组(非整数将被四舍五入)
num2str() //把非整型数数组转换成串数组(常用于图形中,数据点的标识)
mat2str() //把数值数值转换成输入形态的串数组(常与eval命令配合使用) [1 2 3;4 5 6]
num2str(j,'%02d'); //数字转字符串,位数不够前补0. 
char(cell1(i,j));  //元胞转字符串
---------
str2num();    //字符串转数字
cellstr(str); //字符串转元胞

3.操作
字符串比较: strcmp、 strncmp、 strcmpi
字符串的替换和查找: strrep、 strfind、findstr、 strmatch, …
字符串与数值数值的转换: num2str、str2num、 mat2str、 str2num,…
空格处理函数: blanks、 deblank、 strtrim
字符串的输入输出: sprintf、 sscanf
disp(str); %输出到屏幕上
sprintf('%d',a);  %返回一个字符串,有;就不会输出,而是把结果给ans
disp(sprintf('%d',a));  %可以这样综合使用。

元胞
元胞数组是对常规的数值数组的扩展, 其每一个元素称为一个元胞(cell), 每一个元胞中可以存储任意类型、任意尺寸的数据。与数值数组一样, 元胞数组维数不受限制, 可以是一维、 二维或更高维。元胞数组对元胞的索引方法也分单下标和全下标两种。对于元胞数组,元胞和元胞里的内容是两个不同范畴(或者说不同层次)的概念。
如果把元胞数组比着一个柜子,那么,元胞就是柜子上的抽屉,元胞里的内容则是抽屉里存放的东西。

1.元胞的创建
A(2,3) //寻访元胞(cell indexing)
A{2, 3} //寻访元胞中的内容(context addressing)
A(1)={[1 2 3]};  A(2)={'second cell'}  //直接赋值法
cell(m,n)  //创建m x n的元胞数组,每个元胞内容为空数组,n - n x n

2.一些函数
deal  //将输入变量对应赋值给输出变量
cell  //创建指定大小的元胞数组
celldisp  //逐个显示元胞单元的数据
cellplot  //用图形方式显示元胞数组的结构
num2cell  //把数值数组转化为元胞数组
cell2struct  //把元胞数组转换为结构体
iscell  //测试某个对象是否为元胞数组

使用示例:

a=reshape(1:9, 3, 3);
b=sym('sin(3*x)*exp(-x)');
c='string';
d=10;
A=cell(2);
A(1,1)={a};
A{1,2}=b;
A{2,1}=c;
A(2,2)={d};
cellplot(A,'legend');
A_A=[A cell(2)]; %元胞数组扩展
A_A(:,4)=[]; %删除第四列,成为2x3的元胞数组

结果:
在这里插入图片描述
结构体
结构体就不用赘述了,其他编程语言中经常用到。

student=struct('name','张三','age','matrix',[1 2]); //构造单个结构体
student=struct('name',{'张三','Tom'},'age',{20,19},'matrix', {[1 2],[1 3;4 6]}) //构造结构体数组
//对于结构体数组,可以通过括号、下标索引来访问其内部数据,结构体与字段之间用点(.)连接。
student(1)
student(1).name
s='name';
student(1).(s)
//结构体的字段中也能存储结构体类型的数据,eg.
A=struct('location', 'Wuhan', 'time',struct('hour', '2', 'minute', 30, 'second',0))

6.绘图

这块内容请移驾:https://blog.csdn.net/Gou_Hailong/article/details/107619919

7.m文件

M文件是包含 MATLAB 代码的文件。 M文件按其内容和功能可分为脚本M文件和函数M文件这两大类。

脚本M文件是许多 MATLAB 代码按顺序组成的命令集合,不接受参数的输入和输出,与MATLAB工作区共享变量空间。脚本文件
一般用来实现一个相对独立的功能,比如对某个数据集进行某种分析、绘图,求解方程等等。

MATLAB的M-函数是由function语句引导的,其基本格式如下:

function [输出形参列表] = 函数名 (输入形参列表)
注释说明语句段,由%引导;
函数体语句

函数文件需要在 M-文件编辑器中编写。写完以后,按照当前的搜索路径保存。以后就可以随时调用这个函数了。好像函数名要和文件名一致。

  • 一个 M 文件可以包含一个以上的函数
    • 一个主函数( Primary Function)
    • 其它则为子函数( Subfunctions)
    • 子函数只能被同文件中的函数(主函数或子函数)调用,但不可被不同文件的其它函数调用
  • 主函数与子函数的位置
    • 主函数必需出现在最上方
    • 其后接上任意数目的子函数
    • 子函数的次序并无任何限制

8.Matlab控制流

  • 顺序结构:按照程序中语句的排列顺序依次执行,直到程序最后一个语句
  • 选择结构:根据给定的条件成立与否,分别执行不同的语句
  • 循环结构:按照给定的条件,重复执行指定的语句

8.1 顺序结构

很简单,直接跳过。

8.2 选择结构

  • if-else- end分支结构
  • switch- case- end 结构
  • try- catch- end结构
//选择结构-多分支
if expression1
	commands1
elseif expression2
	commands2
else
	commands3
end

//switch根据表达式的取值不同,分别执行不同的语句
switch ex
	case test1
		Commands 1
	case test2
		Commands 2
	case testk
		Commands k
	otherwise
		Commands
	end

//try是一种试探性执行语句
try
	commands1
catch
	command s2
end

eg:

//1.if
clear
n=input('输入n= )
if n>=90
	chji='优秀’
elseif n>=80
	chji='良好'
elseif n>=70
	chji='中等’
elseif n>=60
	chji='及格’
else
	chji='不及格’
end

//2.switch
for month= 1:12
	switch month
		case {3,4,5}
			season = 'Spring';
		case {6,7,8}
			season = 'Summer';
		case {9,10,11}
			season = "Autumn';
		case {12,1.2}
			season = Winter';
	end
	fprintf('Month %d ===> %s \n', month,season);
end

//3.try
a=[1 2 3 4];
i=5;
try
	X = a(i);
catch
	X = a(end);
end
	lasterr

8.3 循环结构

  • while - end循环结构
  • for - end循环结构
//1.while - end
while expression
	commands
end

//2.for
for x = array
	commands(循环体)
end

eg

//1.while
sum_j= 0;
i=1;
while i <=10; .
	sum_ i= sum_ i +i;
	i= i+1;
end;

//2.for
sum i = 0;
for i= 1:10;
	sum_i=sum_i+i;
end

注意:

  • (1)for循环不能用for循环内重新赋值循环变量n来终止,只能使用break语句。
  • (2)在for循环内接受任何有效的MATLAB数组。
  • (3)for循环可按需要嵌套。与其它的编程语言类似,for语句可以嵌套使用。
  • (4)当有一个等效的数组方法来解给定的问题时,应避免用For循环。
  • (5)为了提高处理的速度,在for循环(while循环)被执行之前,应预先分配数组。

说明:

  • ① for循环与while循环的区别是,for语句的循环次数是确定的,而while语句的循环次数是不确定的。
  • ② 一定要注意在循环结构体内设置“修改条件表达式的语句”,以免进入“死循环”
  • ③ 一旦出现死循环,在命令窗用ctrl+C可使程序中止。
  • ④ 注意程序的可读性。

其他命令:

命令描述
return●用于函数中,函数将在此处跳出,并返回该语句指定的值 ●用于 keyboard 状态下返回被 keyboard 中断的指令处继续向后执行程序
input●用于程序执行过程中要求用户想程序中输入数据
keyboard●这个命令在调试程序时非常有用,当执行到此命令, matlab将中断正在执行的程序,进入’用户控制状态’,可以在command window 中执行用户操作
pause● 程序执行途中暂停
break●直接跳出该层循环
continue●直接进入该层循环的下一-次迭代
error, warning,lasterr, lastwarn

9.变量和函数

9.1 局部变量与全局变量

局部变量(Local Variables)

  • 每一个函数在运算时,均占用个别的内存
  • 此工作空间和MATLAB的基本工作空间或是其它函数的工作空间是互相独立的
  • 不同空间的变量是完全独立,不会相互影响
  • 不同工作空间的变量,称为「局部变量」 ( LocalVariables )

全局变量(Global Variables)

  • 减少变数的传递,可用「全局变量」(Global Variables)
  • 使用全局变量前,需先进行变量定义
function func
global X %全局变量定义
X=2
X=X+2;
fprintf('The value of X in "func" is %g.\n', X);

全局变量使用规则:

  • 尽量少用全局变量:全局变量使程序的流程不透明,造成程序除错或维护的困难.
  • 使用全局变量,请遵循下列两原则:使用前一定要定义;
    使用全部大写或较长的变量名称,以资区别
  • 检查工作空间的变量,输入whos global
  • 清除所有工作空间的全局变量X,需使用 clear global X

9.2 函数文件

函数文件也是M文件的一种。可接受输入变量,并将结果送至输出变量;运算过程产生的变量都存放在函数本身的工作空间;不会和MATLAB基本工作空间的变量相互覆盖;函数适用于大型程序代码;使程序代码模块化( Modularized )并易于维护与改进。

//函数文件由function语句引导,其格式为:
function 输出形参表 = 函数名(输入形参表)
注释说明部分
函数体
end
/*注:其中函数名的命名规则与变量名相同。输
入形参为函数的输入参数,输出形参为函数的
输出参数。当输出形参多于1个时,则应该用
方括号括起来。*/

命名限制

  • 函数名称和变量名称有相同的限制:只接受前31个字母( MATLAB 5.x)或前63个字母( MATLAB 6.x和7.x );以英文字母作为开头。
  • 函数名称和文件名称不同:仍可依文件名称调用文件;函数名称将被忽略。建议函数名与文件名同名。

函数调用

//函数调用的一般格式是:
[输出实参表]=函数名(输入实参表)
调用以上函数,可输入:
>> vec= [15 3];
>> ave = func1(vec)
ave =
3

函数嵌套调用(递归调用)

eg:

//利用函数的递归调用,求n!
function f=factor(n)
	if n<=1
		f=1;
	else
		f=factor(n- 1)*n;
	end
	return f;%返回
end

9.3 子函数

一个M文件可以包含一个以上的函数

  • 一个主函数( Primary Function )
  • 其它则为子函数( Subfunctions )
  • 子函数只能被同文件中的函数(主函数或子函数)调用,但不可被不同文件的其它函数调用

主函数与子函数的位置

  • 主函数必需出现在最上方
  • 其后接上任意数目的子函数
  • 子函数的次序并无任何限制

eg

//func5.m包含一个主函数及一个子函数
//子函数的功能是计算倒数向量
function out = func5(x)
	recip = reciproc(x);
	out = sum(recip);
% Definition for subfunctions
function output = reciproc(input)
output = 1./input;
调用此函数
>> func5([12 3])
ans =
1. 8333  ( 0.4167)

9.4 输入、输出变量

输入、输出变量是函数与主程序之间数据传递的载体。

function varargout = func(varargin)
/*varargout 是输出变量-输出参数
func 是函数名
varargin 是输入变量-输入参数*/

nargin             //榆入变量个数,用于函数体内
nargout            //榆入变量个数,用于函数体内
nargin('func')     //荻取函数func所需的输入变量个数
nargout(' 'func')  //获取函数func所 需的输出变量个数
varargin           //可变长的输入变量列表(元胞数组)
varargout          //可变长的输出变量列表(元胞数组)

nargin、nargout 决定函数实际输入输出变量的个数。与程序流控制指令配合,针对不同输入输出变量个数完成不同的任务。不能对nargin、nargout赋值。

eg

function [ave1, ave2] = func4(vector1, vector2)
if nargin == 1, %只有一个输入变量
	ave1= sum(vector1)/length(vector1);
end
if nargin == 2, %有两个输出变数
	ave1 = sum(vector1)/length(vector1);
	ave2 = sum(vector2)/length(vector2);
end

可变长输入参数

function ave = func4(varargin) %计算向量的平均值
if nargin >0
	for i= 1:nargin
		ave(i)=mean(varargin{});
	end
else
	ave= NaN;
	disp '没有输入参数'
end

function varargout = func4(varargin)%计算向量的平均值、标准偏差
if nargin < 1
	disp '没有输入参数'
	return
end
for i = 1:nargin
	varargout{1}(i)=mean(varargin{i});
	if nargout==2
		varargout{2}(i)= std(varargin{i});
	end
end

//函数调用:
a=[1 2 3];b=[4 5 6 7 8];
[ave, stdv]=func4(a,b);
[ave,stdv]=func4(a)
ave=func4(a);
ave=func4(a,b);

调试指令与图标:在这里插入图片描述

PART II 实用操作

1.mat 文件的加载与创建

https://blog.csdn.net/Gou_Hailong/article/details/106242250

2.用MATLAB 读写各种文件

https://blog.csdn.net/Gou_Hailong/article/details/106770672

3.求矩阵数据的均值和协方差

https://blog.csdn.net/Gou_Hailong/article/details/106788580

4.Matlab各种画图

https://blog.csdn.net/Gou_Hailong/article/details/107619919

5.Matlab画地图系列

Matlab 画地图之 m_map:
https://blog.csdn.net/Gou_Hailong/article/details/108147268
缩放:https://blog.csdn.net/Gou_Hailong/article/details/108206521
内切圆外接圆:https://blog.csdn.net/Gou_Hailong/article/details/108206335
注释:https://blog.csdn.net/Gou_Hailong/article/details/108208442
扣shp:https://blog.csdn.net/Gou_Hailong/article/details/108209395
基于shp裁剪图像:https://blog.csdn.net/Gou_Hailong/article/details/108209764

6.把一个字符串搞成一个变量名

这个真的超级np!!(get于2020.10.30

s1='aa';  
eval([s1,'=3;']);

没错,就是如此简单,上述代码的运行结果就是在工作空间多了俩变量,一个变量叫s1='aa',另一个变量叫aa=3

PART III 常用功能实现

1.感知器算法/LMSE算法

https://blog.csdn.net/Gou_Hailong/article/details/106025411

2.聚类算法(K-均值/ISODATA)

https://blog.csdn.net/Gou_Hailong/article/details/106027047

3.双线性内插缩放图像

https://blog.csdn.net/Gou_Hailong/article/details/108206521

4.求不规则图形的内切圆外接圆

https://blog.csdn.net/Gou_Hailong/article/details/108206335

参考/引用文章

[1] xuxinrk-CSDN博主:https://blog.csdn.net/xuxinrk/article/details/82883078
[2] 百度文库:https://wenku.baidu.com/view/351cd91c7f1922791688e8c8?ivk_sa=1023194j

在这里插入图片描述
偷偷拿老姐拍的照片做底图,:)

  • 129
    点赞
  • 1012
    收藏
  • 打赏
    打赏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:技术黑板 设计师:CSDN官方博客 返回首页
评论 17

打赏作者

Gou_Hailong

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值