1. 基础知识
数学运算符号及标点符号
(1)MATLAB的每条命令后,若为逗号或无标点符号,
则显示命令的结果;若命令后为分号,则禁止显示结果。
(2)“%” 后面所有文字为注释。
(3) “…”表示续行。
2. 变 量 与 函 数
2.1 变量
MATLAB中变量的命名规则是:
1)变量名必须是不含空格的单个词;
2)变量名区分大小写;
3)变量名最多不超过19个字符;
4)变量名必须以字母打头,之后可以是
任意字母、数字或下划线,变量名中
不允许使用标点符号。
2. 2特殊变量表
2.3 M文件
1)MATLAB的应用程序文件。
2)函数文件。这类文件的第一行必须是一特殊字符function开始,格式为:
function 因变量名=函数名(自变量名)
函数值的获得必须通过具体的运算实现,并赋给因变量。
M文件建立方法:1. 在MATLAB中,点:File→New → M-file
2. 在编辑窗口中输入程序内容
3. 点File → Save,存盘,M文件名必须
与函数名一致
例:定义函数 f(x)=100(x-1)^2+2(2-x)
(1)建立M文件:fun.m
function f=fun(x)
f=100*(x-1)^2+2*(2-x)
(2)可以直接使用函数fun.m
例如:计算 f(1), 只需在MATLAB命令窗口键入命令:
>>fun(1)
3. 数 组
3.1 创建简单的数组
x=[a b c d e f]创建包含指定元素的行向量。
x=first:last 创建从first开始,加1计数,到last结束的行向量。
x=first:increment:last 创建从first开始,加increment计数,到last结束的行向量。
x=linspace(first,last,n) 创建从first开始,到last结束,有n个元素的行向量。
3.2 数组元素的访问
1)访问一个元素: x(i)表示访问数组x的第i个元素。
2)访问一块元素: x(a :b :c)表示访问数组x的第a个元素开始,以步长b到第c个元素(但不超过c),b可以为负数,b缺省时为1.
3)直接使用元素编址序号. x([a b c d]) 表示提取数组x的第a、b、c、d个元素构成一个新的数组
[x(a) x(b) x(c ) x(d)]
3.3 数组的方向
前面例子中的数组都是一行数列,是行方向分布的. 称之为行向量. 数组也可以是列向量,它的数组操作和运算与行向量是一样的,唯一的区别是结果以列形式显示.
产生列向量有两种方法:
直接产生 例 c=[1;2;3;4]
转置产生 例 b=[1 2 3 4]; c=b′
说明:以空格或逗号分隔的元素指定的是不同列的元素,而以分号分隔的元素指定了不同行的元素.
3.4 数组的运算
1) 标量-数组运算
数组对标量的加、减、乘、除和平方运算,是指数组的每个元素对该标量施加相应的加、减、乘、除、平方运算。
设:a=[a1,a2,…,an], c是标量。
则:a+c=[a1+c,a2+c,…,an+c]
a.c=[a1c,a2c,…,anc]
a./c= [a1/c,a2/c,…,an/c](右除)
a.\c= [c/a1,c/a2,…,c/an] (左除)
a.^c= [a1c,a2c,…,an^c]
c.^a= [ca1,ca2,…,c^an]
2)数组-数组运算
当两个数组有相同维数时,加、减、乘、除、幂运算可按元素对元素方式进行,不同大小或维数的数组是不能进行运算的。
设:a=[a1,a2,…,an], b=[b1,b2,…,bn]
则:a+b= [a1+b1,a2+b2,…,an+bn]
a.b= [a1b1,a2b2,…,anbn]
a./b= [a1/b1,a2/b2,…,an/bn]
a.\b=[b1/a1,b2/a2,…,bn/an]
a.^ b=[a1^ b1,a2^ b2,…,an^bn]
3.5 数组函数
length(z) % z的元素个数
max(z) % z的最大值
min(z) % z的最小值
sort(x): 对向量x的元素进行排序
norm(x): 向量x的欧氏(Euclidean)长度
sum(x): 向量x的元素总和
dot(x, y): 向量x和y的内 积
cross(x, y): 向量x和y的外积
(大部份的向量函数也可适用于矩阵)
4. 矩 阵
4.1 矩阵的建立
逗号或空格用于分隔某一行的元素,分号用于区分不同的行。除了分号,在输入矩阵时,按Enter键也表示开始新一行。输入矩阵时,严格要求所有行有相同的列.
例 m=[1 2 3 4 ;5 6 7 8;9 10 11 12]
p=[1 1 1 1
2 2 2 2
3 3 3 3]
- 特殊矩阵的建立:
a=[] 产生一个空矩阵,当对一项操作无结果时,返回空矩阵,空矩阵的大小为零
b=zeros(m,n) 产生一个m行n列的零矩阵
c=ones(m,n) 产生一个m行n列的元素全为1的矩阵
d=eye(m,n)
产生一个m行n列的单位矩阵
-
矩阵中元素的操作
1)矩阵A的第r行:A(r,:)
2)矩阵A的第r列:A(:,r)
3)取矩阵A的第i1~ i2行、第j1~j2列:A(i1:i2, j1:j2)
4)以逆序提取矩阵A的第i1~i2行: A(i2:-1:i1,:)
5)删除A的第i1~i2行: A(i1:i2,:)=[]
6)将矩阵A和B拼接成新矩阵:[A B];[A;B] -
矩阵的运算
1)标量-矩阵运算
标量-数组运算相同.
2)矩阵-矩阵运算
矩阵加法:A+B
矩阵乘法:AB
矩阵点乘:A.B
矩阵除法:右除 A/B=AB-1 左除A\B=A-1B
矩阵点除:A./B
方阵幂次:A^k -
矩阵函数
det(A) 方阵的行列式
inv(A) 方阵的逆
[V,D]=eig(A) 方阵的特征向量与特征值
size(A) A的大小
max(A) A的每列元素的最大值
min(A) A的每列元素的最小值
sort(A) 对A的每列进行排序
sum(A) A的每列元素的总和
find(A) A 中非零元素的位置
5. 关系与逻辑运算
5.1 关系操作符
5.2 逻辑运算符
6. MATLAB编程
MATLAB提供三种控制结构:
for循环、while循环、
if-else-end结构。
6.1 for循环
允许一组命令以固定的和预定的次数重复
for x=array
{commands}
end
在for和end语句之间的命令串{commands}按数组(array)中的每一列执行一次。在每一次迭代中,x被指定为数组的下一列,即在第n次循环中,x=array(:,n)
6.2 While循环
与for循环以固定次数求一组命令相反,while循环以不定的次数求一组语句的值。
while (expression)
{commands}
end
只要在表达式(expression)里的所有元素为真,就执行while和end语句之间的命令串{commands}.
6.3 if-else-end结构
1)有一个选择的一般形式是:
if (expression)
{commands}
end
如果在表达式(expression)里的所有元素为真,就执行if和end语句之间的命令串{commands}.
- 有三个或更多的选择的一般形式是:
if (expression1)
{commands1}
elseif (expression2)
{commands2}
elseif (expression3)
{commands3}
elseif ……
…………………………………
else
{commands}
end
7. 实验作业
对以下问题,编写M文件:
(1) 有一个矩阵A, 编程求出其最大值及其所处的位置。
参考代码
>>A=[1 2 3 4 5 ;6 7 8 9 10;11 12 13 14 15 ;16 17 18 19 20];
>>b=max(max(A));
>>[c d]=find(A==b)
c =
1x1 double
4
d =
1x1 double
5
>>
(2) 编写函数Fi(n),计算斐波那契数列的第n项。
参考代码
function f=Fi(n)
f1=1;
f2=2;
if n==1||n==2
f=f1;
end
while n>=3
f=f1+f2;
f1=f2;
f2=f;
n=n-1;
end
运行结果
>>Fi(3)
ans =
1x1 double
3
>>
(3) 编程求
参考代码
function f=he(n)
n=20
sum=0;
j = 1;
for i = 1:n
j= j * i;
sum = sum + j;
i = i+1;
end
f = sum;
end
运行结果
>>he
n =
1x1 double
20
ans =
1x1 double
2.5613e+18
>>
(4)一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下. 求它在第10次落地时,共经过多少米?第10次反弹有多高?
参考代码
function [s,x]=xialuo(n)
j=0;
h=100;
s=100;
n=10;
for i=1:n
x=h/2^(i-1);
s=s+x;
i=i+1;
end
x=x/2;
fprintf('十次落地时共经过 %f 米\n',s);
fprintf('第十次反弹 %f 米\n',x);
运行结果
>>xialuo
十次落地时共经过 299.804688 米
第十次反弹 0.097656 米
ans =
1x1 double
299.8047
>>
(5)有一函数
写一程序,输入自变量的值,输出函数值。
参考代码
function z= f(x,y)
z = x^2 + sin(x*y) + 2*y;