本文内容摘自UESTC邓良剑老师ppt
老师个人主页:https://liangjiandeng.github.io/Teaching.html
基本语法
赋值语句
①变量名 =表达式
②变量名=函数名(输入参数列表)
③[变量名列表]=函数名(输入参数列表)
a=[2 5 6];
a(2)=10 %为向量a的第二个赋值,无分号会直接显示结果
[V1,V2,V3]=myfun(M1,M2)
表达式语句
只有表达式,没有赋值时,自动赋给ans
>> a=fix(10*rand(1,5)) %赋值语句, 赋值给变量a
a =
9 8 1 4 8
>> a-0.5 %表达式语句,结果赋值给ans
ans =
8.50000 7.50000 0.50000 3.50000 7.50000
注释
Y=fix(X) 删除X中每个数的小数部分
rand函数 (自动返回double型)
①X=rand 返回在(0,1)内均匀分布的随机数
②X=rand(n) 返回一个nxn的随机数矩阵
③X=rand(sz1,…szN) 返回由随机数组成的sz1x…xszN数组,szn为维度大小
**④X= n+(m-n)*rand(a,b)**返回axb矩阵,其中n为随机数的下限,m为随机数的上限,m-n为随机数的区间大小
randi函数 (自动返回区间整数)
X=randi([m n],a,b) m,n为区间,a,b为矩阵维度
常用命令、快捷键
clear 清除变量
→直接clear,清除全部的
→clear A B,清除A,B变量
clc 清除命令窗口内容
who 列出变量名称
→直接who,列出全部的
→who A B,列出A,B的信息
whos 列出变量更多信息
数组操作
创建数组
①使用方括号直接赋值,X=[];
x=[1 3 5 6 4]
y=[1, 3, 5, 6, 4] %同行用“ ”或者“,”分隔
A=[1 2 3; 4 5 6; 7 8 9];
B=[ 1 2 3
4 5 6
7 8 9];%不同行换行或“;”分隔
②冒号操作符 X=起始:步长:终点;
a=10:-3:2;
>>a=10 7 4 %4-3=1<2所以不再进行
b=10:1:0; b=空的 1×0double行矢量
③linspace(a,b,n) n-1等分从a到b(a可<或>b)的区间
1.如果可均分无小数,则返回整型,否则返回浮点型。
2.不指定n,则默认100等分。
linspace(1,3,3)
ans = 1 2 3
>> linspace(1,3,4)
ans =1.0000 1.6667 2.3333 3.0000
④数组拼接
[A B]横向拼接(行数相同)
[A;B]纵向拼接(列数相同)
⑤空矩阵[]
⑥zeros/one/eyes(m,n)
生成mxn的0矩阵/元素全为1/单位矩阵
提取和修改数组元素
①访问单个元素 a=A(m,n)
②访问行/列的全部元素
使用“:”代指全部,“,”间隔行列,[]将多个行/列统一
例如v1=(:,3)→获取第3列
v2=(3,:)→获取第3行
v3=([1 2],: )→获取第1、2行组成的子矩阵
③X=A(: ) 取A中所有元素组成列向量
④修改元素,要求维数要相同
A=randi([1 10],3,3)
A =
5 8 7
5 8 7
7 3 2
>> a=A(1,2)
a =8
V1=A(:,[1,2])
V1 =
5 8
5 8
7 3
⑤删除数组利用空矩阵赋值
A(i1:i2,:) = [ ] %删除A由i1:i2指定的行
A(:,j1:j2) = [ ] %删除A由j1:j2指定的列
end表示最后一个下标值(向量:元素个数)
可用如end-1,[2:end]之类的表达式
x=[1 5 9; 2 6 10; 3 7 11; 4 8 12];
x(end,2)= 0; x%将矩阵x的最后一行第2列元素赋值为0
算术运算符
运算 | 表达式 |
---|---|
矩阵转置 | B ’ |
矩阵加减、相乘 | A+B,A-B,A*B,A与B维数相同或其中之一为标量 |
矩阵左除 | A\B, 当A为方阵表示: A-1B |
矩阵右除 | A/B, 当B为方阵表示 AB-1,或B为标量 |
矩阵幂 | A^n, A为方阵 |
若需要对应元素运算,则在运算符前加上“.”,要求运算的两个矩阵同维数 |
关系、逻辑运算符
x =[4 9 1 2 1];
y =[1 8 5 5 1];
t1=x>=2 %向量/矩阵比较要求维度要相同,对应位置返回真/假值
u=x-y
t2=x-y>=1
t1 = 1 1 0 1 0
u = 3 1 -4 -3 0
t2 = 1 1 0 0 0
与&,或|,非~
cell数组
特点:元素类型可以互不相同
>>
a=cell(2,3)
a{1,1}='abc';a{1,2}=rand(3);a{1,3}=cell(1,2);
%注意使用{}表示元素位置,对比前面%
>> a
a =
'abc' [3x3 double] {1x2 cell}
[] [] []
元胞数组操作类似但和其赋值一样有区别,区别就在于{}和()
a={1,2,3};
a{1}=[];%并不能删除第一个cell单元,只是变成空值
a(1)=[];%删除第一个单元
即X= C(s)使用这种"()"形式的返回的是cell类(单元)
X = C{s}使用这种"{}"形式的返回的是cell中的内容
输入输出函数
input函数
g=input('输入您的成绩:')
%‘’内为显示提示信息,同时将一般类型数值存放
name=input('输入您的姓名: ', 's')
%后加's'用于输入字符型数组
disp(变量名)
用于显示数组内容,不输出变量名
a=rand(1,3);
disp(a)
a
%运行输出%
0.6441 0.6872 0.7481
a =
0.6441 0.6872 0.7481
%显示、拼接字符串
>>str = ‘Hello’;
>>disp(str)
Hello
>>disp(‘World’);
World!
disp([str,'World]) % 横向拼接字符数组(纵向:;)
sprintf
将数据格式化输出为字符串
str = sprintf(formatSpec,A1,A2,…,An)
①formatSpec:同C(%d,%f,%c,%s)
②可加整数限制长度,如%5d
a =[pi,sqrt(2)];
name='Li San';
grade=[86 95 89];
s1= sprintf('%0.5f',pi)%将该实数化为5个小数
位字符串
s2= sprintf('%10.6f', a)%将a化为10个字符长,
含6个小数位的字符串
s3=sprintf('%8s%3d%3d%3d',name,grade)
%结果%(输出格式限制基本同C)
s1 = 3.14159
s2 = 3.141593 1.414214
s3 = Li San 86 95 89
注意sprintf仍需需要赋值给一个变量显示
c=1;
s1=sprintf(‘Hello,%d’,c);
或display(sprintf(‘Hello,%d’,c))
如果只是sprintf(…);不会显示任何东西
常用函数
求和函数sum
①s=sum(v),求向量v中元素的和
②s=sum(A,1)或s=sum(A),求矩阵A中每一列的和,返回成一个行向量。
③s=sum(A,2),求每行的和,返回成一个列向量。
求平均值mean
①s=mean(v),求向量v中元素的和
②s=mean(A,1)或s=mean(A),求矩阵A中每一列的和,返回成一个行向量。
③s=mean(A,2),求每行的和,返回成一个列向量。
求最大max最小min
[v, I]=max/min(x)
①如果x为向量,v为向量中的最大(小)元素;I为最大
元素在x中的下标。
②如果x为矩阵,v为每列的最大元素组成的行向
量,I则为每列最大元素的行下标组成的向量。
**v=max/min(A)**直接返回每列最大成行向量
A=fix(20*rand(4,4))
[v1,I1]=max(A)
[v2,I2]=min(A)
A = 5 13 8 3
0 6 7 9
1 19 15 8
16 0 15 12
v1 = 16 19 15 12
I1 = 4 3 3 4
v2 = 0 0 7 3
I2 = 2 4 2 1
length和size
length(x)
①如果x为向量,则返回x的元素个数;
②如果x为矩阵,则返回矩阵x行数和列数的最大值
size(x)
2x8矩阵 length(A)=8
s=size(A)或s=size(A,1),返回值2(返回行数)
s=size(A,2),返回值8(返回列数)
排序函数sort
[B, I]=sort(v) 对向量v中元素升序排序
①B为排序后数组
②I为排序后数组B中的元素在原数组v中的位置下标.
v=sort(a,‘ascend’/‘descend’)
>> A=[1 8 21 6 8 9];
>> v1=sort(A)
v1 =1 6 8 8 9 21
>> v1=sort(A,'descend')
v1 = 21 9 8 8 6 1
>> [v3,v4]=sort(A)
v3 = 1 6 8 8 9 21
v4 = 1 4 2 5 6 3
查找函数find
返回符合查找条件的元素下标
x =[1 9 0 7 8];y =[8 0 3 2 8];
idx=find((x>=y-2) & (x<=y+2))
s=length(idx)
idx = 5 s = 1
>> idx=find(A>=6)
idx =
1
2
4
5
8
9
10
11
>> A =
14 13 2 6
15 13 9 11
5 3 19 4
在矩阵中,第一列开始,自上而下,依次为1,2,3...,
然后再从第二列,第三列依次往后数