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

12 篇文章 21 订阅


在这里插入图片描述
小姐姐来源于网络
听说,在博客中挂小姐姐会增加访问量😳😳😳

Part.I Introduction

Chap.I 日志

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

Chap.II 基础传送门


绘图大军集结


Chap.III 实用传送门

Chap.IV 一些轮子

下面是其他大佬或者笔者造的轮子,可直接使用

Part.II 基础知识

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.III 杂记 / 临时笔记

Chap.I 把一个字符串当作一个指令运行

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

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

没错,就是如此简单,上述代码的运行结果就是在工作空间多了俩变量,一个变量叫s1='aa',另一个变量叫aa=3。注意使用eval时,传入变量的字符串最后一位一定要是;,不是也没关系,就是会输出运算结果。

Chap.X 杂记

// 判断一个矩阵是否所有元素都是nan
all(isnan(tmp))
// 分割字符串,分割之后是元胞,并去掉首尾空格(空元胞)
tmp = strsplit(strtrim(lin),{' '});
// 类似于C语言的格式化输出
fprintf('我是%s\n',name);
// 将数值转换为字符串且保留小数点后四位
num2str(roundn(mupd,-4));
// 统计时间 
头:tic;尾:toc

Reference

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

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

  • 138
    点赞
  • 1061
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
学习MATLAB时,编写学习笔记是一种很好的方法,可以帮助您记录重要的概念、语法和技巧,以及解决问题的步骤。以下是一些关于编写MATLAB学习笔记的建议: 1. 组织结构:使用清晰的标题和分节来组织您的学习笔记。将不同的主题分成单独的部分,并使用子标题来进一步细分内容。 2. 内容概要:在每个部分或子标题下,写下该主题的概要。这样可以帮助您回顾和理解该主题的关键点。 3. 示例代码和输出:对于每个主题,包括一些示例代码和相应的输出结果。这有助于您理解和演示具体的MATLAB语法和功能。 4. 问题与解答:如果您在学习过程中遇到了一些困惑或问题,将其记录下来,并在笔记中提出并解答这些问题。这样可以帮助您深入思考并加深对该主题的理解。 5. 笔记补充:除了基本概念和语法外,您还可以添加一些额外的笔记,如最佳实践、编程技巧、常见错误等。这些额外的笔记可以提供更多的实用信息和提示。 6. 参考资料:在您的学习笔记中,包括引用的参考资料,如教程、文档、书籍或网站链接。这样,您可以随时回顾并深入研究相关的主题。 7. 总结和复习:在学习笔记的结尾,添加一个总结部分,回顾和总结您学到的重点和关键概念。此外,定期复习您的学习笔记也是加深理解和记忆的好方法。 以上是关于编写MATLAB学习笔记的一些建议。希望这对您有所帮助,并祝您在MATLAB学习过程中取得成功!如果有任何其他问题,请随时提问。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流浪猪头拯救地球

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值