MATLAB学习

2019/09/19

Categories: 笔记 Tags: MATLAB

MATLAB的名称源自Matrix Laboratory,它是一种科学计算软件,专门以矩阵的形式处理数据。

大二测绘系开设过matlab课程,除了认真上过第一节课,就再也没学了,哪怕是最后的期末作业,都是抄的。当然也就完全体会不到matlab的用处,对它的认识仅仅停留在“matlab”的六个字母上。三年后(2019-9-19),体验了下数学建模,负责编程任务,又重新学习了一下matlab的基本语法。

基本操作

clear y 将变量y从变量空间中去掉
clear 将所有变量清空
clc 仅仅是清空屏幕
% 注释
ctrl+R 批量注释
ctrl+T 批量取消注释
disp():屏幕打印
input():输入函数
strcat():合并字符串
num2str():数字->字符串
linspace(0,2,5) 产生从02的均匀的5个点
zeros(2,3) 初始化23列全为0的矩阵
ones(2) 初始化全为12阶的矩阵
eye(2) 初始化2阶单位阵
Inf 无穷大
F = A.*B 点乘,对应位置相乘,区别于矩阵乘法
F = A./B 点除,对应位置相除
F = A/B = A * B^-1 ,就是A*B的逆
F = A^2 = A*A
F = A.^2 = A.*A
x = A(1,3) 取A矩阵的第13y = A(2,:) 相当于 y = A(2,1:3) 取第二行
Z = A(1:2,1:3) 前2行前3A([2,5],:) 只取第2和第510👎1101,公差为-1
A(2:end,:) 取第2行到最后一行
A(2:end-1,:) 取第2行到倒数第2A(:) 取全部元素,输出的是一个列向量
A(1,3) = 00赋值给13A(2,:) = [6 5 4] 整行的赋值
size():求矩阵的大小,几行几列
[r,c] = size(A) 将A的行、列数分别赋值给r、c
r = size(A,1) 只返回行数
c = size(A,2) 只返回列数
B = repmat(A,m,n) 将A复制m*n块
inv(B) 求B的逆矩阵
prod(A) 按列相乘
prod(A,2) 按行相乘
E = eig(A) A的全部特征值,组成向量E
[V,D] = eig(A) A的全部特征值,构成对角阵D,且A的特征值构成V的列向量

比较和逻辑运算

>> x = [1 2 3 4 5 6 7 8 9];
>> y = [1 4 3 8 6 5 7 2 9];
>> eq = (x==y)

eq =

  1×9 logical 数组

   1   0   1   0   0   0   1   0   1
>> xy = (x>5)&(y<7)

xy =

  1×9 logical 数组

   0   0   0   0   0   1   0   1   0
>> xoy = (x>5)|(y<7)

xoy =

  1×9 logical 数组

   1   1   1   0   1   1   1   1   1
% 把x里小于0的都改为0,省的写for循环
>> x = [1 -2 3 -4 5 -6 7 -8 9];
>> x(x<0) = 0

x =

     1     0     3     0     5     0     7     0     9
% 第2行赋值为0
y =

     1     2     3
    -4     5     6
     7     8     9

>> y(2,:)=0

y =

     1     2     3
     0     0     0
     7     8     9
% 先找到第一列中小于0的,再把那一行都设为0
>> y = [1 2 3;-4 5 6;7 8 9]

y =

     1     2     3
    -4     5     6
     7     8     9

>> y(y(:,1)<0,:)=0

y =

     1     2     3
     0     0     0
     7     8     9

数组操作函数

flipud():行逆序排列
fliplr():列逆序排列
rot90():逆时针90°旋转
>> A = [1 2 3;4 5 6;7 8 9]

A =

     1     2     3
     4     5     6
     7     8     9

>> B = flipud(A)

B =

     7     8     9
     4     5     6
     1     2     3

>> C = fliplr(A)

C =

     3     2     1
     6     5     4
     9     8     7

>> D = rot90(A)

D =

     3     6     9
     2     5     8
     1     4     7

sum():求和函数
>> A = [1 2 3];
>> sum(A)

ans =

     6
>> B = [1 2 3;4 5 6;7 8 9];
>> sum(B)    % 相当于sum(B,1),每列求和

ans =

    12    15    18
>> sum(B,2)    % 每行求和

ans =

     6
    15
    24
>> sum(B(:))    % 所有总和

ans =

    45
>> C = B(:)    % 将B矩阵拉成1维向量

C =

     1
     4
     7
     2
     5
     8
     3
     6
     9

>> A = [1 2 3];
>> max(A)

ans =

     3
>> max(A,2)    % 跟2比较,取最大

ans =

     2     2     3
>> B = [1 3 9;4 8 6];  % 2维数组取最大,默认取每列最大
>> max(B)

ans =

     4     8     9
>> max(B,[],2) % 按照行取最大值的格式

ans =

     9
     8

常用数学函数

sin,cos,tan,cot,asin,acos,atan,acot
>> x = 0:pi/6:pi

x =

         0    0.5236    1.0472    1.5708    2.0944    2.6180    3.1416

>> y = sin(x)

y =

         0    0.5000    0.8660    1.0000    0.8660    0.5000    0.0000

abs():取绝对值
sqrt():开根号
ceil():向上取整
floor():向下取整
fix():向0靠取整
round():四舍五入取整
mod():取余

简单作图

>> x = -2*pi:0.1:2*pi;
>> y1 = sin(x);
>> y2 = cos(x);
>> plot(x,y1,'-b');    % 蓝色实线
>> hold on;    % 避免下面的图覆盖掉上面的
>> plot(x,y2,'-r');
>> xlabel('x');
>> ylabel('y');
>> text(0,0,'(0,0)');
>> legend('sin x','cos x');

简单作图1.png

>> t = 0:pi/180:4*pi;
x = 16*sin(t).^3;
y = 13*cos(t)-5*cos(2*t)...
-2*cos(3*t)-cos(4*t);
plot(x-3,y,'-r',x+3,y,'-b');
xlabel('x');
ylabel('y');
>> axis([-20,20,-20,15]); % X、Y轴范围分别是[-20,20]、[-20、15]
>> title('Two Heart');;
>> legend('U','I');

简单作图2.png

3维作图

>> t = 0:pi/50:10*pi;
x = sin(t);
y = cos(t);
z = t;
>> plot3(x,y,z); % 3维作图
>> title('Helix');
>> xlabel('sin t');
>> ylabel('cos t');
>> zlabel('t');
>> grid on;    % 加网格线

3维作图.png


meshgrid():生成格网采样点
>> [x,y] = meshgrid(1:3,1:3)

x =

     1     2     3
     1     2     3
     1     2     3


y =

     1     1     1
     2     2     2
     3     3     3

% 下图为此函数生成的格网点

meshgrid格网点.png

>> [x,y] = meshgrid(-pi:0.1:pi);
>> z = sin(x).*cos(y);
>> mesh(x,y,z);    % 绘制3维曲面
>> surf(x,y,z); % 3维着色
>> xlabel('x');
>> ylabel('y');
>> zlabel('z');
>> title('sin x sin y');

结合meshgrid3维作图.png

M函数格式

% 求矩形面积
function area = rectarea(L,W)
area = L.*W
>> Home