【Matlab个人笔记】基本语法,矩阵建立修改

本文内容摘自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...,
然后再从第二列,第三列依次往后数
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值