MATLAB软件版本:MATLAB R2019b
本文是博主从零开始学Matlab的记录,适合第一次接触Matlab的同学阅读。
因为CSDN没有Matlab语言的代码块格式,所以本文代码块均按C++语法高亮显示,为了方便显示,注释用//
标注(实际上Matlab注释用%
标注)。
>> eps // 计算机的最小数
ans =
2.2204e-16
>> pi // 圆周率
ans =
3.1416
>> i // sprt(-1)
ans =
0.0000 + 1.0000i
>> j // sprt(-1)
ans =
0.0000 + 1.0000i
x=0:1:5 // [0,5]区间产生行向量,间隔为1
x=0:5 // [0,5]区间产生行向量,默认间隔为1
>> t=[0:0.2:0.6] // [0,0.6]区间产生行向量,间隔为0.2
// 写成 t=0:0.2:0.6 效果也一样
t =
0 0.2000 0.4000 0.6000
>> t=[0:0.2:0.7]
t =
0 0.2000 0.4000 0.6000
>> t=linspace(1,2,3) // [1,2]区间按线性(等差数列)产生行向量,个数为3
t =
1.0000 1.5000 2.0000
>> t=linspace(1,2,4)
t =
1.0000 1.3333 1.6667 2.0000
>> t=logspace(1,2,2) // [10^1,10^2]区间按等比数列产生行向量,个数为2
t =
10 100
>> t=logspace(1,2,3)
t =
10.0000 31.6228 100.0000
>> who
您的变量为:
ans t
>> whos
Name Size Bytes Class Attributes
ans 1x1 8 double
t 1x3 24 double
>> size(t) // 列出n,m
ans =
1 3
>> length(t) // 列出max(n,m)
ans =
3
冒号表示按列堆叠成向量。
>> A=[1,2;3,4]
A =
1 2
3 4
>> A(:) // 按列取出所有元素
ans =
1
3
2
4
>> A(:,2) // 取出第2列
ans =
2
4
>> A(2,:) // 取出第2行
ans =
3 4
>> A=[1,2,3;4,5,6;7,8,9]
A =
1 2 3
4 5 6
7 8 9
>> A(2:3,1:2) // 取出第2行到第3行,第1列到第2列的所有元素
ans =
4 5
7 8
>> A=[1,2;3,4]
A =
1 2
3 4
>> A(:,1)=[] // 删去第一列,即把第一列变成空矩阵[]
>> B=[4,5;6,7]
B =
4 5
6 7
>> B(1,:)=[] // 删去第一行
B =
6 7
>> A=[1,2,3]
A =
1 2 3
>> B=[4,5,6]
B =
4 5 6
>> C=[A,B] // 按行合并矩阵
C =
1 2 3 4 5 6
>> C=[A;B] // 按列合并矩阵
C =
1 2 3
4 5 6
(1)转置
>> A=[1+i,2+i;3-i,4+i]
A =
1.0000 + 1.0000i 2.0000 + 1.0000i
3.0000 - 1.0000i 4.0000 + 1.0000i
>> A' // 共轭转置,转置后,虚部变为相反数
ans =
1.0000 - 1.0000i 3.0000 + 1.0000i
2.0000 - 1.0000i 4.0000 - 1.0000i
>> A.' // 非共轭转置,转置后,虚部不变
ans =
1.0000 + 1.0000i 3.0000 - 1.0000i
2.0000 + 1.0000i 4.0000 + 1.0000i
另外,对于实数矩阵的转置来说,A'
与A.'
没有区别。
(2)重塑
>> A=[1,2,3;4,5,6]
A =
1 2 3
4 5 6
>> reshape(A,3,2) // 按列顺序重塑矩阵A为3*2
ans =
1 5
4 3
2 6
(3)逆时针旋转90度
>> A
A =
1 2 3
4 5 6
>> rot90(A)
ans =
3 6
2 5
1 4
>> eye(3) // 单位矩阵
ans =
1 0 0
0 1 0
0 0 1
>> eye(3,4)
ans =
1 0 0 0
0 1 0 0
0 0 1 0
>> ones(2) // 全为1的矩阵
ans =
1 1
1 1
>> ones(2,3)
ans =
1 1 1
1 1 1
>> zeros(2) // 全为0的矩阵
ans =
0 0
0 0
>> zeros(2,3)
ans =
0 0 0
0 0 0
>> diag([1,2,3]) // 产生对角矩阵
ans =
1 0 0
0 2 0
0 0 3
>> rand(2) // 创建随机矩阵,服从均匀分布
ans =
0.2785 0.9575
0.5469 0.9649
>> rand(2,1)
ans =
0.1576
0.9706
>> randn(2) // 创建随机矩阵,服从正态分布
ans =
0.5377 -2.2588
1.8339 0.8622
>> randn(2,1)
ans =
0.3188
-1.3077
>> randperm(5) // 产生随机排列
ans =
5 3 1 2 4
s=input('please input a string: ','s');
>> x=rand(1,3)
x =
0.9134 0.6324 0.0975
>> fprintf("x=%.3f\n",x) // 输出x的所有元素,保留3位小数
x=0.913
x=0.632
x=0.098
>> fprintf("x=%.3f\n",x(2)) // 输出x[2](可省略第1行的行下标)
x=0.632
>> fprintf("x=%.3f\n",x(1,2)) // 输出x[1][2]
x=0.632
>> y=[1,2;3,4]
y =
1 2
3 4
>> fprintf("y=%.3f\n",y) // 按列输出y的所有元素
y=1.000
y=3.000
y=2.000
y=4.000
>> fprintf("y=%.3f\n",y(2,1)) // 输出y[2][1]
y=3.000
>> fprintf("y=%.3f\n",y(1)) // 输出y[1][1](可省略第1列的列下标)
y=1.000
>> fprintf("y=%.3f\n",y(2)) // 输出y[2][1](可省略第1列的列下标)
y=3.000
编写函数,存于文件ave.m中,代码如下:
% You can get the average of a vector.
% Just input "ave;" to run this function.
function y = ave(x)
x = input('input a vector x=');
[m,n] = size(x);
if ~(m==1|n==1)
error('please input a vector which is m=1 or n=1')
end
y = sum(x)/length(x);
fprintf("y=%.2f\n",y);