MATLAB 基本操作

创建数组

基于方括号创建

此时要注意的是,同行元素用“空格或者逗号”分割,不同行元素用分号“;”或者换行分隔。

 x=[1 2 3 ] %行向量
 x=[1 3;4 5;7 8]%矩阵

冒号创建行向量

基本格式:
起始:步长:终点
特别的:a:b相当于a:1:b

	x=1:5
	x=1:2:9	%[1 3 5 7 9]
	x=10:-2:1	%[10 8 6 4 2]

函数创建

  1. linespace(a,b,n) 含义是将区间[a,b]用n个数均匀等分成n-1份
    例如
x=linespace(0,10,5) %x=[0 2.5 5 7.5 10]
  1. 空矩阵 a=[]
  2. rand(a,b)产生a行b列的随机矩阵
  3. zeros(m,n)产生m行n列的零矩阵
  4. ones(m,n)产生m行n列的全为1矩阵
  5. eye(m,n)产生m行n列单位阵

基于数组的拼接

  1. [A B] 横向拼接 要求A,B行数相同
  2. [A;B] 纵向拼接 要求A,B列数相同

数组数据提取

访问数组使用圆括号

	x(i) %访问x第i个元素
	x(a:b:c) %相当于从第a个元素开始 到第c个元素,均匀的访问5个元素
	x(i,j) %访问第i行j列元素
	x(r,:) %获取第r行
	x(:,c) %获取第c列
	x(行下标集,列下标集) %获取对应子阵
	x(:) %将数组排成列向量

数组数据的相互赋值

确保赋值语句左右维数相同
如:

A(i,:)=B(k,:) %讲B的第k行赋值给A的第i行
A([1 2],:)=V %将矩阵V赋值给A的1 2 行
%用空矩阵复制可以起到删除的作用
A(i1:i2,:)=[];
A(:,j1:j2)=[];

end的使用用法:end再下标表达式当中表示最后一个下标值

1.如果end出现在一个向量的下标中,则表示向量的元素个数(最后一个元素)
2.如果end出现在一个矩阵的行下标位置,则表示矩阵的行数
3.如果end出现在一个矩阵的列下标位置,则表示矩阵的列数
例如:

A=rand(1,10)
A(end)%取第十个元素 

相关运算

算术运算符

对象运算符
矩阵+ - * / \ ^ ’
数组.* ./ .\ .^
标量+ - * / ^ \

\ /的区别是左除与右除的区别
点乘,点除等运算是矩阵对应位置元素进行对应操作
矩阵乘除遵循矩阵乘法法则
指的是矩阵的转置

关系运算符

符号名称
<小于
<=小于等于
>大于
>=大于等于
==等于
~=不等于

逻辑运算符

逻辑运算符是逻辑logic数据 0假1真

符号名称
&
竖线(打不出来)
~

数据类型

常用数据类型 double char sym struct cell
当然还有很多其他的不常用数据类型,例如 tree 。
使用whos+变量名 命令
使用class+变量名命令
不过最常使用的还是看内存窗口来看变量类型以及占用内存情况

cell数据类型

%%创建一个cell
A=cell(m,n);%创建了m行n列的cell
%%提取数据采用大括号
A{i};
A{i,j};

例如:

>>a=cell(2,3)
a=
	[] [] []
	[] [] []
>>a[1,1]='abc' ; a[1,2]=rand(3);a(1,3)=cell(1,2);
>>a
a=
	'abc' [3×3 double] [1×2 cell]
   	  [] 		[]		   []

cell与数组最大的不同就是cell中可以含有不同数据类型的元素,这就极大简化了数据的存储

IO操作

三个IO函数

input 输入函数
disp 显示数组内容函数
sprintf 将数组内容格式化字符串进行显示

input(提示信息字符数组)

g=input('please input your grade');%引号内为提示信息,输入信息赋值给g
%%input 可以有两个参数
g=input('what is your name','s');%'s'表示g是一个字符数组。其余参数可以使用help查询文档

disp(变量名)

disp用于展示变量名中的内容不输出变量名,例如
>>a=[1 2 3 4 5];
>>disp(a)
1 2 3 4 5
>> a
a=
1 2 3 4 5

格式输出函数sprintf
str=sprintf(formatSpec,A1,A2,······An)
将A1······An按照formatSpec格式化为字符串赋值给str
%d %f %c %s 与C语言中的格式含义相同
%5d中的数字表示字符串的长度

常用函数

sum

  1. sum(v) 求向量v中各个元素的和
  2. sum(A,1) 求矩阵A中每列的和,将每列和构成一个行向量返回
  3. sum(A,2) 求矩阵A中每行的和,将每行和构成一个列向量返回

注意 sum(A)相当于sum(A,1)

mean

  1. mean(v) 求向量v中元素的平均值
  2. mean(A,1) 求矩阵A中每列的平均值,将每列平均值构成一个行向量返回
  3. mean(A,2) 求矩阵A中每行的平均值,将每行平均值构成一个列向量返回

注意 mean(A)相当于mean(A,1)

max min

[V,I]=max(x)

  • x为向量,则v为向量中的最大元素;I为最大元素在x中的下标
  • x为矩阵,则v为每列最大元素组成的行向量,I则为每列最大元素行下标组成的向量。

[V,I]=min(x)

  • x为向量,则v为向量中的最小元素;I为最小元素在x中的下标
  • x为矩阵,则v为每列最小元素组成的行向量,I则为每列最小元素行下标组成的向量。

length size

length(x)

  • 如果x为向量,则返回x的元素个数
  • 如果x为矩阵,则返回矩阵行数与列数中较大的

size(x)

  • 如果x为向量,矩阵则返回由行数,列数组成的向量,返回的第一个元素为行数,第二个元素为列数

sort

[B,I]=sort(v)
对向量v中的元素排序,B为递增排序v后的元素,I为排序后数组B的元素在原数组V中位置下标

sort中引入第二个参数
sort(v,‘ascend’)%升序
sort(v,‘descend’)%降序

find

find用于查找数组中非零元素的位置
find结合逻辑运算,可以查找所需元素的下标

>>a=[1 2 3 4 5 6 7];
>>idx=find(a>=3)
idx=
	3 4 5 6 7

注意 idx只是下标,要获取相应元素值需要代码 values=a(idx)

fix 取整函数

结构化编程

分支结构

if

用法:

	%一个分支
	if 逻辑表达式
		语句块
	end
	
	%两个及更多的分支
	
	if 逻辑表达式1
		语句块1
	elseif 逻辑表达式2
		语句块2
	elseif ·····
	······
	else
		语句块
	end

注意,逻辑表达式1 逻辑表达式2 逻辑表达式3······依次判定
若语句块n+1执行,则必须有逻辑表达式1····n全部为0。
elseif 与else if二者含义完全不同,前者在一个判断内,后者为重新写了一个if
前者结尾需要一个end 后者需要两个end

switch

switch switch_expr  %设定分支变量,对switch_expr进行分支讨论
case case_expr
	语句块1
case case_expr0
	语句块2
case {case_expr1,case_expr2,······}%使用花括号
	语句块3
otherwise,
	语句块4
end

分支变量一般为标量或者字符串

循环结构

for循环结构

语法:
for x=array
语句块
end
在for和end之间的 语句块 an数组(array)中的每一列执行一次,在每一次迭代中,x被指定为数组的下一列 也就是说,在第n次循环中
x=array(:,n)

常用格式:
for 变量=初始值:步长:终值
语句块
end

%x是行向量
for i=1:length(x)
	%循环体
end

for i=x
	%循环体
end
%上述两个循环结构执行次数相同,但是i的赋值不一定相同

while循环结构

语法:

while 逻辑表达式
	循环语句块
end

当逻辑表达式中的所有元素为真,就执行循环语句块

	i=1;
	while i<=50
		disp(sprintf('interation %d',i))
		i=i+1;
	end

当两个元素类型一致是可以使用数组拼接进行连接
两个元素类型不一致时使用sprinf进行格式字符串拼接

控制语句

continue break

continue break常常用于for while 循环语句中,与if语句一起使用
continue 跳过本次循环,进行下一次循环
break 跳出循环,接着执行之后的语句

	for x=array
		语句块1
		if 逻辑表达式1,
			continue,
		end
		语句块2
	end
	
	for x=array
		语句块1
		if 逻辑表达式1,
			break,
		end
		语句块2
	end

模块化编程

程 序 文 件 { 脚 本 文 件 函 数 文 件 程序文件\left\{ \begin{aligned} 脚本文件 \\ 函数文件 \end{aligned} \right. {
程序文件储存格式:纯文本文件–Matlab程序编译器,记事本,写字板编辑

脚本文件

  • 脚本程序变量在脚本执行完之后任然保留在工作空间中,并且可以被其他脚本文件调用。直到用clear将变量空间清除
  • 脚本程序可以调用系统空间中的变量

调用方式:

  1. 直接输入文件名,不加扩展名
  2. 在文件中调用
	······
	myprog
	······
  1. 在编译器中按F5键运行

函数文件

  • 与脚本文件两点一致
  • 需要设置函数的输入参数,输出参数

函数的编写规范:

  • 有输入参数,输出参数,并且完成一定功能
  • 变量命名规范
    • 必须以字母开头
    • 区分大小写
    • 由字母数字下划线组成

函数语法

%函数第一行为 function [输出参数列表] = 函数名(输入参数列表)
%参数由逗号分隔
function[r1,r2,r3,r4] = MyFunc(a1,a2,a3,a4)
 %标明4个输入参数,3个输出参数
%函数文件名与定义的函数名一般情况下要一致,否则,调用文件名作为函数名
%函数名要有实际意义,避免与内部函数冲突,通过help检查是否为系统函数
%若无输入参数
function[r1,r2,r3,r4] = MyFunc
%若无输出参数
function MyFunc(a1,a2,a3,a4)
%既无输出也无输入
function MyFunc

函数书写时可以使用两个系统变量:nargin nargout
nargin:函数调用时输入参数个数
nargout:函数调用时输出参数个数

两个常用语句 return pause
return 返回调用函数
pause 暂停运行,任意键执行
pause(n) 暂停n秒

主函数与子函数

一个函数文件可以定义一个或者一个以上函数
一个函数文件中第一个函数是主函数,后面定义的是子函数
注意:

  • 函数文件名一般与主函数名相同
  • 子函数只能被所在的函数程序文件中其他函数调用
  • 调用含有子函数的函数文件时,只执行主函数的语句块
    • 主函数的语句块包含了调用某些子函数的语句

函数文件调用规则

  • 主函数可以调用子函数
  • 子函数可以调用子函数
  • 子函数不能调用主函数
  • 子函数可以调用其他程序文件
  • 程序文件可以使脚本程序文件,也可以是函数程序文件

定义简单函数

inline函数

inline(expr) 根据expr建立内联函数,函数自变量符号根据表达式自动确定
inline(expr,arg1,arg2,···) 定义时候指定自变量符号
inline(expr,N) 自变量符号为x,P1,P2,······PN
例如:

f=inline('2*x.*x-+sin(exp(x))');
x = linspace(-10,10,100);
plot(x,f(x))

用inline函数创建初等函数十分简洁
计算多个点是,注意数组运算符的使用

匿名函数@定义方法
基本用法:@(参数列表)(函数表达式)
例如

>>f=@(x)(x.^2)
f=
	@(x)(x.^2)
>> val=f(1:5)
val=
	1 4 9 16 25

模块化设计

子模块1
功能
子模块2
子模块3
子模块n

将要实现的功能分割为几个不同的模块并且:

  • 将功能划分为多个模块
  • 每个模块编写一个函数文件
  • 整个功能实现编写一个程序(可以是函数文件,也可以是脚本文件)
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页