入门
01 向量
声明
a1=[1 2 3];
a1=[1,2,3];
a2=1:1:3;
a3=linspace(1,3,3);
访问
a1(i);
a1(a:b:c)
a为初值,b为步长,c为终值。
运算
a+b
a-b
a*b
02 矩阵
声明
A=[a1,a2,a3;b1,b2,b3;c1,c2,c3;]
空矩阵:
A=[]
零矩阵:
zeros(m,n)
值全为1矩阵:
ones(m,n)
单位矩阵:
eye(m,n)
主对角线元素为a1,a2...an矩阵:
diag([a1 a2 ... an])
n阶魔方矩阵:
magic(n)
0~1间均匀分布的随机矩阵:
rand(m,n)
访问
提取第i行元素:
A(i,:)
提取第j列元素:
A(:,j)
矩阵A按列拉长为一个列向量:
A(:)
提取矩阵A的第i1至i2行、j1至j2列元素构成新矩阵:
A(i1:i2,j1:j2)
删除矩阵A的第i1至i2行构成的新矩阵:
A(i1:i2,:)=[]
删除矩阵A的第j1至j2列构成的新矩阵:
A(:,j1:j2)=[]
拼接矩阵
[A B]或[A;B]
运算
矩阵相乘
A*B
矩阵点乘
A.*B
矩阵除法,A\B表示A(逆)B, A/B表示BA(逆)
A\B or A/B
求逆阵
inv(A)
行列式
det(A)
求秩
rank(A)
求特征值
eig(A)
求阶数
size(A)
求行最简形式
rref(A)
实践
1.给出区间[1,2]上的6个等分点数据
linspace(1,2,6)
ans =
1.0000 1.2000 1.4000 1.6000 1.8000 2.0000
2.生成一个均值为1,标准差为0.1的3*4形式的正态分布的随机矩阵;
B= 1 + 0.1*randn(3,4);
或者 B= 1 + 0.1*randn([3,4])
B =
0.8852 1.2585 0.9918 0.8205
1.0105 0.9333 0.8067 1.0840
1.0722 1.0187 0.9561 0.9112
M文件和程序结构
01 M文件
M文件:命令文件和函数文件
(1)命令文件
仅有命令组成,不带输入输出的参数。步骤:
-
新建脚本文件
-
双击文件编辑命令
如果命令结尾无分号,说明要输出;
如果有分号,说明运行但不输出。
- 调用脚本文件
调用(直接名字调用)并输出如下:
myFun
A =
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
函数文件:建立M函数文件的一般格式为:
function[输出参数表]=函数名(参数形式)
%此处显示函数体
end
实践
1.试建立M函数文件计算矩阵A=[1,2;3,4]的行列式|A|和秩rank(A).
---*myFun.m文件*---
function [d1,d2]=fun(x)
d1=det(x)
d2=rank(x)
end
---*命令行*---
>> A=[1,2;3,4]
A =
1 2
3 4
>> myFun(A)
d1 =
-2
d2 =
2
02 程序结构
程序结构有两种:选择语句和循环语句
选择语句结构
----------------
if 条件表达式
执行语句体
end
----------------
if 条件表达式
执行语句体1
else
执行语句体2
end
----------------
if 条件表达式
执行语句体1
else
执行语句体2
...
end
----------------
switch 开关表达式
case{表达式1}
执行语句体1
case{表达式2}
执行语句体2
...
otherwise
执行语句体n
end
----------------
实践
- 输入三角形的三条边,求面积。
A = input ('请输入三角形的三条边:');
if A(1)+A(2)>A(3) && A(1)+A(3)>A(2) && A(2)+A(3)>A(1)
p=(A(1)+A(2)+A(3))/2;
s = sqrt(p*(p-A(1))*(p-A(2))*(p-A(3))); %计算三角形面积
disp(s) %直接将要显示的字符放入括号中
else
disp('不能构成一个三角形.')
end
运行结果:
>> TriangularArea
请输入三角形的三条边:[3 4 6]
5.3327
>> TriangularArea
请输入三角形的三条边:[1 2 3]
不能构成一个三角形.
- 学生成绩等级转化标准为:考试成绩分数在[90,100)记为优秀,在[80,90)记为良好,在[70,80)记为中等,在[60,70)记为及格,在[0,60)记为不及格。输入某学生成绩,请编程判断该学生的成绩等级。
x=input('请输入成绩:')
switch fix(x/10) %fix()表示朝0方向取整
case{9,10}
f='优秀'
case{8}
f='良好'
case{7}
f='中等'
case{6}
f='及格'
otherwise
f='不及格'
end
运行结果:
>> JudgLevel
请输入成绩:100
f =
'优秀'
>> JudgLevel
请输入成绩:51
f =
'不及格'
>> JudgLevel
请输入成绩:84
f =
'良好'
- 设函数f(x)={x-1,x<0; 0,x=0; x+1,x>0;} 求f(-1)
x=input('x=');
if x<0
f=x-1
else if x==0
f=0
else
f=x+1
end %注意这个end
end
运行结果
>> test
x=-1
f =
-2
>> test
x=0
f =
0
>> test
x=1
f =
2
>>
此外还有一种方法,即使用函数。
function f = test(x)
%注意此处,函数名与脚本文件名应该一致。
%我的脚本文件命名为test,因此函数名也为test。
if x<0
f=x-1 ;
else if x==0
f=0;
else
f=x+1;
end
end
运行结果
>> y=test(1)
y =
2
>> y=test(0)
y =
0
>> y=test(-1)
y =
-2
2.2 循环语句结构
1 for语句,调用格式为
for 循环变量=初值:步长:终值
循环语句体
end
2 While语句,调用格式为:
While 条件表达式
循环语句体
end
实践
1.分别用for和while循环语句计算 ∑ i = 1 100 \sum_{i=1}^{100} ∑i=1100 i i i
%for语句
sum1=0;
for i = 1:1:100
sum1=sum1+i;
end
disp('sum1=')
disp(sum1)
%while语句
sum2=0;
i=1;
while i<=100
sum2=sum2+i;
i=i+1;
end
disp('sum2=')
disp(sum2)
运行结果为:
>> sum1To100
sum1=
5050
sum2=
5050