变量和数组
MATLAB程序的基本数据单元是数组,标量在MATLAB中也被当做数组来处理
数组可以定义为向量(一般描述为一维数组)或矩阵(一般描述为二维或多维)
访问数组中的元素:数组名+()
MATLAB变量名的命名:以字母开头,可跟字母、数字、下划线,只有前31个字符有效
区分字母的大小写
强类型语言
像C语言一样:
int a;
double b;
弱类型语言
像Matlab、Python一样:
c = 'l am a student'
% 不需要给变量设定一个变量类型
% 而只需通过复制形式创建类型,且变量类型取决于创建时的类型
变量的初始化
赋值语句初始化
input函数从键盘输入初始化变量
ans=0 说明输入的不是一个整形
从文件读取一个数据
赋值输入
一个数组的每行元素的个数必须完全相同,每一列元素的个数也必须完全相同
对数组中元素的访问,采用 数组名 (number)的形式,number是从1开始。
a1=[0,2,4];
b=[a1(2) a1];
b
b =
2 0 2 4
定义数组的时候不是每个元素都要定义
c(2,3)=5
c =
0 0 0
0 0 5
指定数组中的一个元素赋值,其余默认为零
如果给一个数组赋值的元素超出了数组的大小的话,会新创一个数组(语文水平不高,还是matlab菜鸟,见谅,不懂看一下代码就晓得了)
d=[1,4]
d =
1 4
d(3)=8
d =
1 4 8
每个语句的末尾分号用来紧致变量值在命令窗口的重复
表达式赋值
matlab中的克隆运算符为:first:incr:last(起始位置,步长,终止位置)
x=1:2:10
x =
1 3 5 7 9
类似于Python中的切片
a = [1,2,3,4,5,6,7,8]
for i in a[::-1]:
print(i)
结果为:8 7 6 5 4 3 2 1
但是Python中的第一个是起始位置,第二个是终止位置,最后一个是步长
matlab中的0.01表示注意
x=(.01:.01:.1)*pi
% 该式子的起始是0.01 步长为0.01,终止位置为0.1
x =
1 至 8 列
0.0314 0.0628 0.0942 0.1257 0.1571 0.1885 0.2199 0.2513
9 至 10 列
0.2827 0.3142
转置运算符 '(英文单引号)
d=[1:5]
d =
1 2 3 4 5
h=[d’]
h =
1
2
3
4
5
zeros函数(全零矩阵)
a=zeros(2)
a =
0 0
0 0
% 如果只有一个参数则生成n阶矩阵,如果给了m,n两个参数则生成mXn矩阵
b=zeros(2,4)
b =
0 0 0 0
0 0 0 0
ones(n) and one(m,n)
一个参数,生成n阶一矩阵
两个参数,生成mXn矩阵,eye函数相同
创建一个全1矩阵
a=ones(3)
a =
1 1 1
1 1 1
1 1 1
a=ones(3,4)
a =
1 1 1 1
1 1 1 1
1 1 1 1
b=eye(2)
eye(n) and eye(m,n)
生成单位矩阵
b =
1 0
0 1
b=eye(2,3)
b =
1 0 0
0 1 0
向量或数组的长度(取最大值)
length(b)
ans =
3
size(矩阵的大小)
size(b)
ans =
2 3
矩阵、数组、向量
A=[1,2;3,4;5,6]
A =
1 2
3 4
5 6
B=[1,2,3,4]
B =
1 2 3 4
C=[B’]
C =
1
2
3
4
A是2X3的矩阵,B是一个一维行向量,C是一个一维行向量
多维数组
c(:,:,1)=[1,2,3;4,5,6]
c1(:,:,2)=[1,2,3;4,5,6]
c =
1 2 3
4 5 6
whos c
Name Size Bytes Class Attributes
c 2x3 48 double
c1(:,:,2) =
1 2 3
4 5 6
whos c1
Name Size Bytes Class Attributes
c1 2x3x2 96 double
MATLAB中以列主导顺序分类数组中的元素
a=[1,2,3;4,5,6;7,8,9;10,11,12]
a =
1 2 3
4 5 6
7 8 9
10 11 12
a(4)
ans =
10
a(2)
ans =
4
a(5)
ans =
2
a(1,2)
ans =
2
a(4,1)
ans =
10
数组名(object),object可以是一个数字(第几个),也可以是两个数字(几行几列)
子数组
使用克隆运算符
a(:,1:1:3)
ans =
1 2 3
4 5 6
7 8 9
10 11 12
a(:,1:2:3)
ans =
1 3
4 6
7 9
10 12
a(:,1:3:3)
ans =
1
4
7
10
a(1,:)
ans =
1 2 3
a(2,:)
ans =
4 5 6
a(3,:)
ans =
7 8 9
a(4,:)
ans =
10 11 12
a(5,:)
索引超出矩阵维度。a(:,1)
ans =
1
4
7
10
a(:,2)
ans =
2
5
8
11
a(:,3)
ans =
3
6
9
12
a(:,4)
索引超出矩阵维度。
end函数
a
a =
1 2 3
4 5 6
7 8 9
10 11 12
a(3:end,3:end)
ans =
9
12
这里的a(行,列),类似于Python中的索引(切片)
x=[1,2,3,4,5,6,7,8]
print(x[3:])
将会从下标为3的元素开始直到结束
更改数组元素的值
子数组赋值只会改变部分值,如果直接赋值则会先把该数组原有内容删除,再赋新值
a
a =
1 2 3
4 5 6
7 8 9
10 11 12
a(1:3,[2,3])=[22,33;55,66;88,99]
% 1:3 表示1到3行,[2,3]表示2到3列剩下的为更换的值,更换的值也可以用一个数字表示,则所要更改的元素都为该数字
a =
1 22 33
4 55 66
7 88 99
10 11 12