MATLAB程序设计基础I
写在前面:笔者对matlab的基础使用还是有一定“功底”的,所以这里只记录一些较为关键的点。
2.1基本语法
2.1.1语法基础
赋值语句
基本语法:变量名=表达式
示例:
a=[2 5 6 7 9];
a(2)=10
其他赋值语句, 如:
变量名=函数名(输入参数列表)
[变量名列表]=函数名(输入参数列表)
示例:
[V1,V2,V3]=myfun(M1,M2)
常用命令、快捷键
clear 清除工作空间中的变量
clear 变量名列表
示例: clear A B 清除变量A, B
clc 清除命令窗口内容
who 列出当前工作空间所有变量名称
whos 列出当前工作空间变量更多信息( 维数, 占用内存字节数等)
whos 变量名列表
示例: whos v1 v2 列出变量v1, v2的更多信息
快捷键: 向上方向键、 向下方向键,用于浏览命令窗口历史命令、 语句
2.1.2数组创建与应用
end在存取数组元素方面的特殊用法
用法: end在下标表达式中表示最后一个下标值
如果end出现在一个向量的下标中,则表示向量的元素个数。
如果end出现在一个矩阵的行下标位置,则表示矩阵的行数。
如果end出现在一个矩阵的列下标位置,则表示矩阵的列数。
示例:
x=[1 5 9; 2 6 10; 3 7 11; 4 8 12];
x(end,2)= 0; x%将矩阵x的最后一行第2列元素赋值为0
运行结果:
x =1 5 9
2 6 10
3 7 11
4 0 12
其他例子:
– 操作向量示例
t = rand(1,10);
x1 = t(1:end-1) %取第1个-倒数第2个
x2 = t(end-2:end) %取倒数第3个-倒数第1个
– 操作矩阵示例
A = rand(3)
B = A(1:end-1, : ) %取A的第1行-倒数第2行
C = A(:, [2:end]) %取A的第2列-倒数第1列
2.1.3MATLAB运算符
矩阵操作运算符
矩阵左除: A\B, 当A为方阵表示: A-1B
矩阵右除: A/B, 当B为方阵表示 AB-1,或B为标量
矩阵幂: A^n, A为方阵
数组对应元素操作运算符 .* ./ .\ .^
数组对应元素计算:
数组相乘: C=A.*B
数组右除: C=A./B;
数组左除: C=A.\B
数组幂: C=A.^B
要求: A, B同维数或其中之一为标量
示例:
A=rand(3,4);
B=rand(3,4);
A.*B, A./B, A.\B, A.^B
T1=A.*2; %以A的每个元素与2相乘构造数组
T2=A.^2; % 以A的每个元素2次方构造数组
T3=2./A ; % 以A的每个元素的倒数乘以2构造数组
T4=2.\A ; % 以2的倒数乘以A的每个元素构造数组
标量之间的运算符
3/6 % 3除以6,表达式的值为0.5
3\6 % 3的倒数乘以6,表达式的值为2
2.1.4数据类型
主要的数据类型包括: double char sym struct cell
实例:
>> a=rand(3); b='Li San';%a为double型, b为char型
>> syms x, y=1 + x^2 %x,y为sym类型;对y赋值的语句含符号对象
>> F.name='li San', F.birth=1999, F.src=rand(3)%F为struct型
>> whos a b x y F
Name Size Bytes Class Attributes
F 1x1 620 struct
a 3x3 72 double
b 1x6 12 char
x 1x1 112 sym
y 1x1 112 sym
查看变量类型
使用函数class
用法: class(变量名)
该函数返回变量的数组类型的char型数组,如’double’, ‘char’。
示例:
a=rand(3); b=’abc’
class(a), class(b)
运行结果:
ans = double
ans = char
cell数组基本用法
创建数组用法:
a=cell(m,n)
存取cell数组用法示例:
a{i} i为下标
a{i,j} i,j分别为行、列下标
特点: 一个cell数组中的元素的类型可以互不相同
运行示例:
>> a=cell(2,3)
a =
[] [] []
[] [] []
>> a{1,1}='abc';a{1,2}=rand(3);a{1,3}=cell(1,2);
>> a
a =
'abc' [3x3 double] {1x2 cell}
[] [] []
2.1.5基本输入与格式化输出操作函数
基本输入与格式化输出操作函数
三个函数:
input 输入函数
disp 显示数组内容函数
sprintf 将数组内容格式化为字符串
示例:
>>g=input('输入您的成绩: ')
>> 输入您的成绩: 95
g = 95
数组显示函数disp
特点: 显示数组内容,但不输出变量名– 多用于调试程序时显示数组内容
示例:
>>a=rand(1,3);
>>a
a =
0.6441 0.6872 0.7481
>>disp(a)
0.6441 0.6872 0.7481
格式化输出函数sprintf
功能: 将数据格式化输出为字符串
用法: str = sprintf(formatSpec,A1,A2,…,An)
将数组A1,A2,…,An按照参数formatSpec格式化为字符串赋给str.
%d 格式化整数 %f 格式化浮点数
%c 格式化单个字符 %s 格式化字符数组
百分号符号字符后可以加个整数, 用以限定输出化为字符串的长度,
例如: %5d, %5s。
示例:
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)
运行结果:
s1 = 3.141593
s2 = 3.141593 1.414214
s3 = Li San 86 95 89
2.2常用函数
一、求和函数sum
用法:
s=sum(v) 求向量v中元素的和
s=sum(A,1) 或s=sum(A) 求矩阵A中每列的和,返回成1个行向量
s=sum(A,2) 求矩阵A中每行的和,返回成1个列向量
示例:
>>a= fix(1000*rand(3,5))/1000;
>>s=sum(a), s2=sum(a,1) % s, s2完全相同
s =
1.00700 0.34800 2.46700 0.87400 1.97500
s2 =
1.00700 0.34800 2.46700 0.87400 1.97500
>>t =sum(a’,1)
t =
1.8430 2.2620 2.5660
>>t2= sum(a,2) % t,t2元素值相同,差别是什么?
t2 =
1.8430
2.2620
2.5660
二、求平均值mean
用法:
s=mean(v) 求向量v中元素的平均值
s=mean(A,1) 或s=mean(A) 求矩阵A中每列的平均值,返回成1个行向量
s=mean(A,2) 求矩阵A中每行的平均值,返回成1个列向量
示例:
>>X = [1 2 3; 3 3 6; 4 6 8; 4 7 7]
X =
1 2 3
>>v1=mean(X,1)
v1=
3 3 6
4 6 8
4 7 7
>>v2=mean(X,2)
v2 =
2 4 6 6
三、求最大值max,求最小值min
用法:
[v, I]=max(x)
如果x为向量, v为向量中的最大元素; I为最大元素在x中的下标。
如果x为矩阵, v为每列的最大元素组成的行向量, I则为每列最大元
素的行下标组成的向量。
[v, I]=min(x)
如果x为向量, v为向量中的最小元素; I为最小元素在x中的下标。
如果x为矩阵, v为每列的最小元素组成的行向量, I则为每列最小元
素的行下标组成的向量。
运行示例:
>> x=[5 1 4 7 3]
x =
5 1 4 7 3
>> [v,I]=max(x)
v =
7
I =
4
>> [v,I]=min(x)
v =
1
I =
2
四、 length和size
length(x)
如果x为向量,则返回x的元素个数;
如果x为矩阵,则返回矩阵x行数和列数的最大值.
size(x)
如果x为向量、矩阵,则返回行数、列数组成的行向量。
运行示例:
>> x=[3 2 4 5 1]
x =
3 2 4 5 1
>> t1=length(x), t2=size(x)
t1 =
5
t2 =
1 5
五、排序函数sort
用法:
[B, I]=sort(v) 对向量v中元素排序, B为按递增排序后的元素; I为排
序后数组B中的元素在原数组v中的位置下标.
运行示例:
>> a=[1 5 6 7 4 9]
v=sort(a)
[v2,idx2]=sort(a)%默认升序排序 同sort(a, ‘descend’)
v_byidx = a(idx2)
a =
1 5 6 7 4 9
v =
1 4 5 6 7 9
v2 =
1 4 5 6 7 9
idx2 =
1 5 2 3 4 6
v_byidx =
1 4 5 6 7 9
按降序排列:
>> a=[1 5 6 7 4 9]
v=sort(a, 'descend') %降序排列
a =
1 5 6 7 4 9
v =
9 7 6 5 4 1
六、查找函数find
用途:
find函数用于查找数组中的非零元素位置、元素值.
结合逻辑表达式可以返回所需要元素的位置下标
例1:
>> a=[1 5 6 7 4 9];
idx=find(a>=6)
idx =
3 4 6
例2:
已知两个数组。 请找出数组x与y相同位置的元素值之差不超过2的元素对的个数。 例如: x =[1 9 0 7 8], y =[8 0 3 2 8]。
>> 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
也可以使用sum函数:
>> s = sum((x>=y-2) & (x<=y+2) )
s =
1