零基础学习Matlab(2小时完成)

该文详细介绍了MATLAB的基本概念,包括界面、变量命名规则、数据类型(如数字、字符和字符串)、矩阵操作以及矩阵运算符。此外,还涵盖了MATLAB程序设计基础和基础绘图操作,如二维和三维绘图,是MATLAB初学者的入门教程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

零基础入门matlab

前言

1.界面认识

2.变量命名

3.数据类型

4.操作符与运算符

5.数组与矩阵

6.MATLAB程序设计基础

7.基础绘图操作

(1)二维绘图

(2)三维作图

图形修饰辅助操作


零基础入门matlab

前言

这篇文章很适合MATLAB的入门学习,这也是我在入门时学习的笔记。

虽然说是”零基础“入门matlab,但是如果有其它编程语言基础的话,学起来自然会更轻松。

1.界面认识

2.变量命名

Matlab中的注释

1.%% 独占一行的注释(有上下横线分割)

2.% 普通注释

 

 清空环境变量及命令

clear all %清除Workspace中的所有变量(右侧工作区)

clc %清除Command Window中的所有命令(命令行窗口)

变量命名规则

①变量名区分大小写

②变量名长度不超过63位(hhh,不会有人把变量名弄这么长吧~)

③变量名简洁明了,尽量做到见名知意

系统保留的变量

在这里插入图片描述

3.数据类型

(1)数字

2 + 4

10-7

3*5

8/2

(2)字符和字符串

s = ‘a’ (单引号表示字符串)

abs(s) %ASCII码

char(97) %输出 a (ASCII码转字符串)

num2str(65) %输出数字65

str=‘I love MATLAB & Machine Learning’

length(str) %字符串长度

doc num2str

(3)矩阵(重点)

定义一个矩阵:

A = [1 2 3; 4 5 2; 3 2 7]

A = [1,2,3,4,5,6,5,4,6]
B = 1:2:9 %第二个参数为步长,不可缺省
B = 1:3:9
C = repmat(B,3,2) %重复执行3行2列
D = ones(2,4) %生成一个2行4列的全1矩阵

在这里插入图片描述

4.操作符与运算符

(1)操作符

在这里插入图片描述

 (2)运算符

在这里插入图片描述

(3)矩阵运算符

在这里插入图片描述

5.数组与矩阵

MATLAB语言中只有一种对象类型:MATLAB数组。所有的MATLAB变量,包括标量、向量、矩阵、字符串、单元数组、结构和对象都是以数组的形式加以保存。

(1)数组的创建
指定元素数组构造法 :数组输入用方括号“[ ]”,元素之间用空格或逗号间隔。

等间隔数组的冒号构造法:
输入格式:x=初值:步长:终值
若步长省略,默认步长为1.冒号构造法适用于步长已知的情况。

随机元素数组的构造法:

调用函数格式:x=rand(n,m)
说明:n为行数, m为列数,随机数为0到1之间. 需要注意的是这是生成的随机数,因此每执行一次生成的数据是不相同的.

矩阵的四则运算

A = [1 2 3 4; 5 6 7 8]
B = [1 1 2 2; 2 2 1 1]
C = A + B
D = A - B
E = A * B'
F = A .* B % .*表示对应项相乘
G = A / B %相当于A*B的逆 G*B = A  G*B*pinv(B) = A*pinv(B)  G = A*pinv(B),相当于A乘B
H = A ./ B % ./表示对应项相除

在这里插入图片描述 在这里插入图片描述

矩阵下标 

矩阵单下标:矩阵下标排列是按照列进行排列的 ,

一般,设A是一个m×n的矩阵,位于第 i 行、第 j 列的元素 A(i,j) 的单一下标为 A((j-1)·m+i)

矩阵 双下标:行下标和列下标。如A(3,5)表示二维矩阵A的第3行第5列

 双下标,单下标转换函数:

IND = sub2ind(size(Matrix), i, j)  %双转单
[I J] = ind2sub(size(Matrix), ind) %单转双
A = magic(5)%5维魔方矩阵
B = A(2,3)  %取二行三列元素
C = A(3,:) % :为取全部,那么这条语句表示取第三行
D = A(:,4) %取第四列
[m,n] = find(A > 20) %找到大于20的序号值/矩阵
%取的是索引值

 在这里插入图片描述在这里插入图片描述

矩阵函数

%对角阵:只有对角线上有非0元素的矩阵称为对角矩阵,
%对角线上的元素相等的对角矩阵称为数量矩阵,
%对角线上的元素都为1的对角矩阵称为单位矩阵。
1.diag(A)  %提取主对角线元素
  diag(A,k)%其功能是提取第k条对角线的元素。

2.triu(A),tril(A)%求上下三角矩阵

3.B=A'    %转至(行列交换)

4.B=inv(A)%求逆矩阵

5.det(A)    %求行列式

6.rot90(A,k) %旋转90°的k倍

7.fliplr(A)%左右翻转,第一列和最后一列调换对矩阵A实施上下翻转的函数是flipud(A)。

8.E=eig(A):求矩阵A的全部特征值,构成向量E

矩阵函数生成特殊矩阵

在这里插入图片描述

6.MATLAB程序设计基础

MATLAB除了能以窗口命令方式处理数学问题,还提供了强大的数学方法计算机程序设计功能。这一部分介绍MATLAB程序设计的基础知识和基本技能。

(1)M文件的编辑和调试

在MATLAB中,可将命令编成代码程序存储在一个文件中,这种文件以扩
展名.m存储,称为M文件。M文件根据调用方式不同分为两类: 脚本M文件
( Script File)和 函数M文件(Function File)

(2) M文件的程序结构

在这里插入图片描述

 在这里插入图片描述

 在这里插入图片描述

(3)matlab的输入和输出

输入

x = input(prompt)%数字输入
 
str = input(prompt,'s')%文本输入

 式中,prompt 代表要展示的文本信息,例如 a=input('please input a number\n') ,会在命令行上显示 please input a number ,此时可以手动输入一个数字(若输入其他格式例如字符会报错)。这是程序不会继续运行,而是等待输入数字后回车方可继续运行,文本输入同理
输出 

1.disp函数是直接输出,打印变量值或者打印字符串,

形如 disp(x)和disp('x')表达的意思是不同的,前者是输出 x 的值,可以是字符串、整数、矩阵等等,而后者则是直接打印字符串 x ,打印完会直接换行,不像fprintf函数需要输入 \n 换行。

同时,需要注意的是 disp 若是要在一行i打印字符串和变量值不能直接写成这种形式: disp('a is',a_value),这样会出现输入参数过多的错误(而在C#语言中使用$可以做到类似操作),但是可以写成类如以下形式来

name = 'Alice';   
age = 12;
X = [name,' will be ',num2str(age),' this year.'];
disp(X)

2.fprintf函数是MATLAB函数中较为常见的一种(详见fprintf函数),因为它可以设置输出格式,较为灵活全面。

最为常见的一种形式为: fprintf('%s is a boy',boyname) ,其中 boyname 表示一个存储字符串的变量名,同理这种形式可以输出十进制数(%d)、八进制数(%o)、定点记数法的浮点数(%f)以及指数记数法的浮点数(%e),单个字符(%c)和字符串(%s)。

如是需要控制输出的长度,可以在百分号后加上数字,例如 %8s 输出长度为八(若实际字符串长度超过八会输出字符串原身,不会截断),在命令行上至少保持8个占位,不够用空格来补,而 %4.8f 则会输出4位整数加小数点加8位小数的数字格式,与字符串不同的时,整数不够用空格补,小数不够用 0 来补。
 

x = 0:.1:1;
A = [x; exp(x)];
 
fileID = fopen('exp.txt','w');
fprintf(fileID,'%6s %12s\n','x','exp(x)');
fprintf(fileID,'%6.2f %12.8f\n',A);
fclose(fileID);

7.基础绘图操作

(1)二维绘图

  • plot和fplot

在Matlab里面做二维图像最基础也是最常用的两个函数:plot()fplot()函数,其中,plot的经常使用的方法有下面三种:

one plot(x)
two plot(x,y,参数)
three plot(x1,y1,x2,y2,...,xn,yn)

首先,第一种方法里面若x为一维数组,则作出的图像是以其数组长度为横坐标,间隔为1,以数组中的具体值为纵坐标的。而其也可以为复数变量,如下:

 对于第二种形式就更好理解了,往往其中的x、y都为一维数组,其实y也就是x对应的函数值,后边的参数用于指定曲线的线形、颜色和数据点标记,如下:

x = [0:0.01:10]
y = sin(x)
plot(x,y,'-r*')
%x是一个长度为1001的一维数组,
y是和x等长的在sin(x)上的一维数组,
后边的-r*分别为曲线线性、颜色、数据点标记

参数:

 fplot函数:

one fplot(f,lims,参数)
two fplot(funx,funy,tlims,参数)

在第一种方法中,f代表一个函数,通常采用函数句柄的形式。lims为x轴的取值范围,用二元向量[xmin,xmax]描述,默认值为[-5,5]。参数定义与plot函数相同。例如使用fplot函数绘制sin(x)图像如下:

    

fplot(@(x)sin(x),[0,10],'-r')


在第二种方法中,funx、funy代表函数,通常采用函数句柄的形式。tlims为参数函数funx和funy的自变量的取值范围,用二元向量[tmin,tmax]描述。如绘制参数方程(x=tsint,y=tcost)曲线如下:

    

fplot(@(t)t.*sin(t),@(t)t.*cos(t),[0,10*pi],'-r')

其它形式下的二维曲线图
上文举例说明了最基础最常用的两个做二维曲线的函数,实际上,二维图形的种类还有很多,不光只有一根线构成的曲线图,还有各种统计图、坐标图等等,相应的在Matlab中也有画它们图形的方法,下面是其它几种图形作图方法(非全部):

对数坐标图

semilogx(x1,y1,'参数',x2,y2,'参数'...)
semilogy(x1,y1,'参数,x2,y2','参数'...)
loglog(x1,y1,'参数',x2,y2,'参数'...)

semilogx函数x轴为常用对数刻度,y轴为线性刻度;

semilogy函数x轴为线性刻度,y轴为常用对数刻度;

loglog函数x轴和y轴均采用常用对数刻度。

极坐标图

polar(theta,rho,'参数')

其中,theta为极角,rho为极径,参数内容与plot相同。条形图

bar(y,style)
bar(x,y,style)

    x = [2018,2019,2020]
    y = [10,20,30,40,50;
         10,20,30,40,50;
         10,20,30,40,50];
    bar(x,y)


第一个,参数y是数据,选项style用于指定分组排列模式,模式有两种供选择,分别为:'grouped':簇状分组,'stacked':堆积分组。
第二个,x存储横坐标,y存储数据,y的行数必须与向量x的长度相同。选项style用于指定分组排列模式。

直方图

hist(y)
hist(y,x)

其中,y是要统计的数据,x用于指定区间的划分方式。若x是标量,则统计区间均分成x个小区间;若x是向量,则向量x中的每一个数指定分组中心值,元素的个数为数据分组数。x缺省时,默认按10个等分区间进行统计。

rose(theta[],x)

其中,参数theta用于确定每一区间与原点的角度,选项x用于指定区间的划分方式。

面积类图形

pie(x,explode)

其中,参数x存储待统计数据,选项explode控制图块的显示模式。使用如下,可以试着改下参数或者help一下看看。

    

score = [10,25,3,18,41]
    ex = [0,0,0,0,1]
    pie(score,ex)


散点类图形

scatter(x,y,选项,'filled')

其中,x、y用于定位数据点,选项用于指定线型、颜色、数据点标记。如果数据点标记是封闭图形,可以用选项’filled’指定填充数据点标记。该选项省略时,数据点是空心的。
一颗心:

 t = 0:pi/50:2*pi
    x = 16*sin(t).^3
    y = 13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t)
    scatter(x,y,'rd','filled')


矢量类图形

quiver(x,y,u,v)

其中,(x,y)指定矢量起点,(u,v)指定矢量终点。x、y、u、v是同样大小的向量或同型矩阵,若省略x、y,则在x-y平面上均匀取若干个作为起点。

    已知向量A、B,求A+B,并用矢量图表示。
  

 A = [4,5]; B = [-10,0]; C = A+B;
    hold on 
    quiver(0,0,A(1),A(2));
    quiver(0,0,B(1),B(2));
    quiver(0,0,C(1),C(2));
    text(A(1),A(2),'A');text(B(1),B(2),'B');
    text(C(1),C(2),'C')
    axis([-12,6,-1,6])
    grid on


进阶:双Y轴绘图

plotyy()

示例代码:

    x    =     [0:0.01:20]
    y1    =    200*exp(-0.05*x).*sin(x)
    y2    =    0.8*exp(-0.5*x).*sin(10*x)
    plotyy(x,y1,y2)

(2)三维作图

在二维曲线作图里边我们主要使用的函数是plotfplot函数,而在三维曲线作图里面我们使用的是plot3fplot3函数,其不但长得像,功能也是差不多的,只不过是做了扩展而已。

  • plot3和fplot3
  • 关于plot3函数,其基本用法如下:

    one plot3(x,y,z,参数)
    two plot(x1,y1,z1,x2,y2,z2,...,xn,yn,zn)

    是不是似曾相识,没错,它和plot功能确实非常像,只是多了一维数据而已。如要画出sin(x)的三维图,只需这样就好:

    x = [0:0.01:10]
    y = x
    z = sin(x)
    plot3(x,y,z,'-r')


    怎么样,是不是非常简单,假如要绘制个空间的螺旋线,其参数方程为:x=sint+tcost,y=cost-tsint,z=t,只需这样就好:

        t = [0:0.1:10*pi]
        x = sin(t)+t.*cos(t)
        y = cos(t)-t.*sin(t)
        z = t
        plot3(x,y,z)


    对于plot3函数来讲,它的参数x,y,z不止可以是一维数组,实际上:

    参数x、y、z是同型矩阵时,以x、y、z对应列元素绘制曲线,曲线条数等于矩阵列数。
    参数x、y、z中有向量,也有矩阵时,向量的长度与矩阵相符。
    对于其不止一组数据的方法2,其作用与plot类似,每一组x、y、z向量构成一组数据点的坐标,绘制一条曲线。
    而plot3函数的后面线型、颜色和数据点标记的参数则与plot完全一致。
    对于fplot3函数,其基本引用方法如下:

    fplot3(funx,funy,funz,tlims)

    其中,funx、funy、funz代表定义曲线x、y、z坐标的函数,通常采用函数句柄的形式。tlims为参数函数自变量的取值范围,用二元向量[tmin,tmax]描述,默认为[-5,5],与fplot是几乎完全一致的,不再举例。

三维曲面 :
在做三维曲面图的时候,第一步往往是生成一个平面网格,这个平面网格是什么东西呢,其实就是用矩阵X、Y分别存储每一个小矩形顶点的x坐标与y坐标,矩阵X、Y就是该矩形区域的xy平面网格坐标矩阵:

 说的简单些,就是给我们要用的空间坐标系做个底面出来,本来x、y都是一维向量,它们也就是只能当两根轴,这个时候用新的两个X、Y矩阵来把空间坐标系的二维地面给表示出来,这样的话每一个[X,Y]就都能对应一个Z了,就是这个意思。在MATLAB中,产生平面区域内网格坐标矩阵有两种方法:

1.利用矩阵运算生成:

X = ones(size(y))*x
Y = y*ones(size(x))

2.利用meshgrid函数生成:    

[X,Y] = meshgrid(x,y)

绘制三维曲面的函数

mesh(x,y,z,c)
surf(x,y,z,c)
mesh(z,c)
surf(z,c)

其中,x、y是网格坐标矩阵,z是网格点上的高度矩阵,c用于指定在不同高度下的曲面颜色。c省略时,颜色的设定正比于图形的高度。
当x、y省略时,z矩阵的第2维下标当作x轴坐标,z矩阵的第一维下标当作y轴坐标。
另外还有一些其它的绘制三维曲面的函数:

带等高线的三维网格曲面函数meshc
带底座的三维网格曲面函数meshz
具有等高线的曲面函数surfc
具有光照效果的曲面函数surfl

这些函数使用都和mesh还有surf大致相同,可自行练习了解。  

  //用4种方式绘制函数z=(x-1)^2+(y-2)^2-1的曲面图
    //其中,x=[0,2],y=[1,3]

    [x,y]=meshgrid(0:0.1:2,1:0.1:3)
    z=(x-1).^2+(y-2).^2-1
    subplot(2,2,1);meshc(x,y,z)
    subplot(2,2,2);meshz(x,y,z)
    subplot(2,2,3);surfc(x,y,z)
    subplot(2,2,4);surfl(x,y,z)

标准三维曲面
[x,y,z]=sphere(n)

产生3个(n+1)阶的方阵,采用这3个矩阵可以绘制出圆心位于原点、半径为1的单位球体。

[x,y,z]=cylinder(R,n)

其中,参数R是一个向量,存放柱面各个等间隔高度上的半径,n表示在圆柱圆周上有n个间隔点,默认有20个间隔点。
peaks函数
调用格式:

    peaks(n)    >>    p1=peaks(10)
    peaks        >>    p2=peaks
    peaks(V)    >>    p3=peaks(-3:0.2:3)
    peaks(x,y)    >>    [x,y]=meshgrid(-2:0.1:2,0:0.1:5)

fmesh函数和fsurf函数
用于绘制参数方程定义的曲面

fsurf(funx,funy,funz,uvlims)
fmesh(funx,funy,funz,uvlims)

其中,funx、funy、funz代表定义曲面x、y、z坐标的函数,通常采用函数句柄的形式。

uvlims为funx、funy和funz的自变量的取值范围,用4元向量[umin,umax,vmin,vmax]描述,默认为[-5,5,-5,5]


图形修饰辅助操作

到这里,不管是二维曲线三维曲线还是曲面,大家掌握的方法都差不多了,图大概率是能被我们做出来了哈哈哈,不过能把图做出来固然重要,可更重要的是还能做出美图来,这就离不开我们的图形修饰了,比如给做好的图形加个标题加个注释什么的,我们要做出来图,还要做出来细图,更要做出来美图,接下来文章将列举我们经常使用的并且很有用的图形修饰辅助操作。
基础绘图指令(无参数)

这些呢是一些常用的辅助绘图指令,没有参数,直接在脚本输入就行,功能已经列在表中非常明确

带参数绘图指令

图形标注函数

title(图形标题)
xlabel(x轴说明)
ylabel(y轴说明)
text(x,y,文本说明)
legend(图1,图2,...,参数...)

值得一提的是,上面这些函数的使用方法远不及示例这么简单,它们都有非常多的参数可供选择使用,示例只是列出最简单、最常用的方法,下面是两段代码:

	//没有图形标注
x	=	0:0.5:4*pi
y1	=	sin(x)
y2	=	cos(x)
y3	=	1./(1+exp(-x))
y4	=	(1/(2*pi)^0.5).*exp(((-1).*(x-2*pi).^2)./(2*2^2))
plot(x,y1,x,y2,x,y3,x,y4)
	//加上简单图形标注
title('四条函数图像')
xlabel('横坐标')
ylabel('纵坐标')
text(0,0,'猜猜我在哪')
legend('y1','y2','y3','y4','Location','southwest')

 

  • 图形窗口分割函数subplot
subplot(m,n,p)

其中,m和n指定将窗口分成mXn个绘图区,p指定的是当前图像所在区域,如m=2,n=3,则一个figure窗口被分成2行三列供6个绘图区,可以容纳6个图形。若p=3,说明当前图像要被画进第三个窗口,也就是第二行第一列的窗口内。p小于等于mXn,如:

x    =    [0:0.1:10]
y1    =    sin(x)
y2    =    cos(x)
subplot(1,2,1)
plot(x,y1)
subplot(1,2,2)
plot(x,y2)

图形修饰处理
前面写了一些基本绘图指令,可以对我们的图形进行简单的修整,让其变得更完备更好看,接下来是一些对图形修饰的方法。

视点处理
**方位角:视点与原点连线在xy平面上的投影与y轴负方向形成的角度,正值表示逆时针,负值表示顺时针。
**仰角:视点与原点连线与xy平面的夹角,正值表示视点在xy平面上方,负值表示视点在xy平面下方。
view函数

view(az,el)

其中az为方位角,el为仰角。系统默认的视点定义为方位角-37.5°,仰角30°。

%绘制函数z=(x-1)^2+(y-2)^2-1的曲面图,并从不同视点展示曲面
[x,y]    =    meshgrid(0:0.1:2,1:0.1:3)
z    =(x-1).^2+(y-2).^2-1
subplot(2,2,1);    mesh(x,y,z)
subplot(2,2,2);    mesh(x,y,z);view(0,90)
subplot(2,2,3);    mesh(x,y,z);view(90,0)
subplot(2,2,4);    mesh(x,y,z);view(-45,-60)


色彩处理
默认的,向量元素在[0,1]范围内取值,3个元素一次表示红、绿、蓝三种颜色的相对亮度,称为RGB三元组即[R G B],如[0 0 1]是蓝色,[1 0 0]是红色,[1 1 1]是白色,[0 0 0]是黑色。(当然,也有在[0,255]内取值的,不再介绍)

色图(Colormap)
首先,创建一个色图矩阵方法如下:

cmap=colormap(parula(5))

其中,parula是内建色图中包含的一个种类,其中参数5可以是任何一个数值,它关系着色图矩阵的范围,一般来说使用的时候省略就好。内建色图如下:

  • 指定当前图形使用的色图
	//以peaks为例,先渲染图形,后紧跟色图种类即可
	surf(peaks)
	colormap hot

我们也可以不使用系统的色图矩阵,可以自定义任何色图矩阵。如创建一个灰色系列的色图矩阵:

	c	=	[0,0.2,0.4,0.6,0.8,1.0]'
	cmap	=	[c,c,c]		//这样创建的矩阵和	cmap=gray(6)是一样的
	surf(peaks)
	colormap(cmap)

 示例:使用同一色图,以不同着色方式绘制圆锥体

[x,y,z]	=cylinder(pi:-pi/5:0,10)
colormap(lines)
subplot(1,3,1)
surf(x,y,z);
shading flat
subplot(1,3,2)
surf(x,y,z);
shading interp
subplot(1,3,3)
surf(x,y,z)

 图形的裁剪处理

将图形中需要裁剪部分对应的函数值设置成NaN,这样在绘制图形时,函数值为NaN的部分将不显示出来,从而达到对图形进行裁剪的目的。

	%绘制3/4圆
t=linspace(0,2*pi,100)
x=sin(t)
y=cos(t)
p=y>0.5
y(p)=NaN
plot(x,y)
axis([-1.1,1.1,-1.1,1.1])
axis square
grid on

其它

其实在Matlab中还有两个非常重要的函数:

set和get,

它们两个能非常方便的创建、修改图形的各种属性,如改变坐标轴范围、设置字体和刻度点、设定线条风格等等,不过它们涉及到的使用更深入,在这里不再展开叙述,而事实上,对于我们非常熟知的figure,它也能加上参数来对窗格进行设置,这都是我们经常使用的,但也是经常忽略它们其它功能的函数,如果有兴趣,你可以继续的深入探索下去,更深入的学习能更方便的为我们所用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西柚小萌新吖(●ˇ∀ˇ●)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值