2024年最新Matlab 使用笔记(本人出品,必属精品)_摩天轮社区(1),2024年最新物联网嵌入式开发开发人员不得不收集的代码

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

元胞
元胞数组是对常规的数值数组的扩展, 其每一个元素称为一个元胞(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

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
[外链图片转存中…(img-6UUJWMmf-1715640564252)]
[外链图片转存中…(img-0KRfyU5t-1715640564254)]

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 10
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值