许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Matlab入门基础详解:从零开始学MATLAB

Matlab入门基础详解:从零开始学MATLAB

阅读数 6
点赞 0
article_banner

第一章  Matlab中的数组操作

matlab中的运算和操作是以数组为对象的,

数组又包括:数值数组、字符数组、元胞数组等。

数值数组:(1)n元数值向量(行向量与列向量)

                 (2)数值矩阵

                 (3)由数值矩阵构成的元胞数组

几个标点符号的作用:

逗号:用来分开数组中的行元素。(可用空格代替)

分号:用来将矩阵中的行分开。(可用回车键代替)

冒号:相当于文字中的省略号。

中括号:界定数组的首与尾。

一、数组的建立



   1.直接输入法

matlab在创立数组时以逗号或空格表示分列,分号或回车表示分行。数组开头“[”、结尾“]”

行数组:如a=[1,2,3,8,-1]

列数组: b=[1;2;3;8;-1] 或a’

    矩阵:A= [2,4,1;8:-2:4;2,4,6]

2.通过数组编辑器生成矩阵

步骤:先建立空矩阵a=[], 然后在工作空间(workspace)中点开a进入数   组编辑器,输入元素。

3.用函数创建数组      

定步长生成法: x=a:t:b   (t步长,省略是为1);

定数线性采样法: x=linspace(a,b,n),a与b是数组的第一个和最后一个元素,n是采样的总点数。

4.元胞数组的创建

元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵。

组成元胞数组的元素可以是任何一种数据类型的量,每一个元素也可以具有不同的尺寸,每一个元素的内容也可以完

全不同,元胞数组的元素叫做元胞

建立元胞数组:{ }



   a={'matlab',20;ones(2,3),1:10}

a =

       'matlab'            [         20]

       [2x3 double  ]    [1x10 double]



   二,数组的操作

注意 a(2,3), a([2,3]), a(1:3)的区别 -》 第一个是a矩阵第二行第三列的元素, 第二个是 矩阵第二个跟第三个元素组成的矩阵 第三个就是从1到3

   1.元胞数组元素的提取:      

   ()和 { }有着本质的区别,

    { } 表示元胞的内容,

   ()表示指定的元胞。

   2.空数组的使用

   B(1:2:5)=[]

   删除矩阵A第3行:

                   A(3,:)=[]

   删除矩阵A第2列:

                   A(:,2)=[]

   3.常用数组函数

   1> [m,n] = size(a); 获取a数组的行数与列数

2> n = length(a); 获取数组行数或者列数里最大的那一个 %通常获取一维数组的长度

3> b=sort(x),    [b,k]=sort(x) k是坐标的向量

   在Matlab中排序某个向量(一维)时,可以使用sort(A),其中A为待排序的向量,如果仅是用来排序A,那么直接使用sort(A)即可, 如果排序后还需要保留原来的索引可以用返回值,即[B,ind]=sort(A),计算后,B是A排序后的向量,A保持不变,ind是B中每一项对应于A 中项的索引。排序是按升序进行的。由于在sort函数的结果中,是按升序排序的,要转换成降序,先用X=eye(n)生成一个n维的单位阵,然后用X=rot90(X)将其旋转为次对角线的单位阵,再用原来矩阵乘以X即可,如要讲A逆序排列采用如下步骤:

   X=eye(size(A));

   X=rot90(X);

   A=A*X;

假如a是一个2*n的矩阵,即两行. b=a(1,:);

[c,pos]=sort(b);%pos为排序后的下标,c为第一行的排序结果;

a(2,:)=a(2,pos);%第二行按照第一行排序的下标对应

   a(1,:)=c;%第一行结果重新赋给a 的第一行

以下适用于m*n的矩阵按第一行排序

[ b, pos ] = sort( a( 1, : ) );

   a = a( :, pos );

4> reshape(x, 3, 5) 把数组x变成3行5列的矩阵

   5> repmat(x,3,2) 数组的复制, 把数组复制3行,每行这个数组重复2次

   6> sparse(a,b,c) 数组a,b,c的大小必须相同,数组a与b分别指定元素的行标与列标,数组c指定元素的值

   A=sparse([2,4,18],[3,12,20],[-5,-3,-8])

   创建稀疏矩阵A,A的(2,3),(4,12),(18,20)元素分别为-5,-3,-8,其余元素为零,A为18×20阶矩阵。

7> sum(A):矩阵A按列求和,返回一个行向量;

   sum(A,2):矩阵A按行求和,返回一个列向量。

   max(A):返回由矩阵各列的最大值构成的向量。 max(max(A))用于求整个矩阵的最大值

   max(A,B):返回A与B对应元素最大值构成的矩阵

   min(A),min(A,B)类似

   b2=max(A')' 返回由矩阵A各行的最大值构成的列向量

8> diag 命令

   b=diag(A): 提取方阵A的对角线元素构成列向量b

   A=diag(b): 用一维数组b的元素生成对角方阵A

    A=diag(b,k): b为一维数组,k为整数

    将b元素作为偏离主对角线的第k条对角生成方阵A  其余都是0

9> find命令:

         find(A)  找出A的不为0的元素的下标

         find(A,k) 找出A的前k个不为0的元素的下标

         find(A,k,’last’)找出A的后k个不为0的元素的下标

         find(g(A)),其中g(A)是数组A的逻辑 表达式  

         返回数组A中满足条件g(A)的元素下标。  

   c1=find(B) [m,n]=find(B>=1&B<=3) 前者返回一个元素序号的向量 后者用一个2*x矩阵表示每个元素的二维坐标


   10> nchoosek 来实现二项式系数或所有组合

语法:

C = nchoosek(n,k)

C = nchoosek(v,k)

描述:

C = nchoosek(n,k) 其中n和k是非负整数, 返回 n!/((n–k)! k!).

   这是从n种情况中一次取出k种的组合的数量。

   C = nchoosek(v,k), 其中v是一个长度为n的行向量,创建一个矩阵,该矩阵的行由每次从v中的n个元素取出k个取值的所有可能组合构成。矩阵 C 包含 n!/((n–k)! k!) 行和 k 列.

11> 求连乘积

       c1=prod(4:6) 直接出答案

       c2=cumprod(4:6) 把间接结果输出

12> perms([2,1,8]) 求数组的全排列

13>  zeros(m): m阶全零方阵

     zeros(m,n): m×n阶全零方阵

     eye(m): m阶单位阵

     ones(m): m阶全1方阵

     ones(m,n): m×n阶全1方阵

一. matlab里和随机数有关的函数:

(1) rand:产生均值为0.5、幅度在0~1之间的伪随机数

(2) randn:产生均值为0、方差为1的高斯白噪声

(3) randperm(n):产生1到n的均匀分布随机序列

(4) normrnd(a,b,c,d):产生均值为a、方差为b大小为cXd的随机矩阵

rand

rand(n):生成0到1之间的n阶随机数方阵

rand(m,n):生成0到1之间的m×n的随机数矩阵

randn

randn()命令是产生白噪声的,白噪声应该是0均值,方差为1的一组数,同rand有randn(n),randn(m,n)

rand是0-1的均匀分布,randn是均值为0方差为1的正态分布

二. 功能:生成服从正态分布的随机数

R=normrnd(MU,SIGMA)

R=normrnd(MU,SIGMA,m)

R=normrnd(MU,SIGMA,m,n)

说明:

R=normrnd(MU,SIGMA):生成服从正态分布(MU参数代表均值, DELTA  参数代表标准差)的随机数。输入的向量或矩阵MU和SIGMA必须形式相同,输出R也和它们形式相同。标量输入将被扩展成和其它输入具有 相同维数的矩阵。

R=norrmrnd(MU,SIGMA,m):生成服从正态分布(MU参数代表均值,DELTA参数代表标准差)的 随机数矩阵,矩阵的形式由m定义。m是一个1×2向量,其中的两个元素分别代表返回值R中行与列的维数。

R = normrnd(MU,SIGMA,m,n)

其中MU为均值,SIGMA为标准方差,m、n为矩阵大小;

三、求矩阵中所有元素的均值和方差

x是一个m*n的矩阵

均值:sum(x(:))/(m*n)

方差:var(x(:))

三、数组的运算

   注意下 不等于是 ~= 矩阵里点乘点除跟直接乘除的区别

              A+B,A-B,k*A

              A.*B,   A./B,  A.^n    

几个例子~

   B=A+(-2)*(A>4)+(A<0) 将A中大于4的元素减去2,小于0的元素加上1,其余元素不变构成矩阵B。

   B=A.*(mod(A,3)==0) 将A中能被3整除的元素保留其余元素变为零构成矩阵B

数组集合的运算  

   setdiff(a,b)  (a与b的差集)

   intersect(a,b) (a与b的交集)

   union(a,b)(a与b的并集)

矩阵的基本函数

    转置A’

行列式 det(A),

特征值eig(A),

秩rank(A),

逆inv(A),

迹trace(A),

条件数cond(A)

某两行/列进行交换 a([n m],:)=a([m n],:),其中的mn就是你想交换的行。至于列交换:a(:,[m n])=a(:,[n m])。

求解方程组:

   solve(s1,s2,…,sn,v1,v2,…,vn),即求表达式s1,s2,…,sn组成的方程组,求解变量分别v1,v2,…,vn。

   具体例子如下:

   x^2 + x*y + y = 3

   x^2 - 4*x + 3 = 0

   解法:

   >> [x,y] = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3 = 0')

运行结果为

   x =

   1 3

   y =

   1 -3/2

   即x等于1和3;y等于1和-1.5

   或

   >>[x,y] = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3= 0','x','y')

   x =

   1 3

   y =

   1 -3/2

   结果一样,二元二方程都是4个实根。

   对于矩阵的方程组要用到线代的知识了 比如

   解方程组Ax = b (A是矩阵, b是向量

   应该是 x = inv(a)*b

第二章  Matlab程序设计

   一、自定义函数

   1. 匿名函数

   格式:函数句柄 = @(自变量列表)函数表达式  //注意所有的乘除都用点乘 点除,因为变量通常用向量传入

例1:定义函数f(x) = x^2 + 3*x + 5,并计算f(x)在 x = -2, 1, 2.5, 3, 5.2的值

   matlab代码:

   f = @(x) x.^2 + 3*x + 5

    x=[-2,1,2.5,3,5.2]

    y1=f(x)

   y1 =

       3.00    9.00   18.75   23.00   47.64

   例2: 定义函数g(x, y) = sin(x^2 + 3y),并计算g(3,2)

   matlab代码:

    g=@(x,y)sin(x.^2+3*y)

    y=g(3,2)

   y = 0.6503

   例3;(复合函数)

   定义符合函数:z = u^2 * lnv, u = x/y, v = 3*x - 2*y并计算函数z在(x,y) = (2,1), (3,2), (4,1), (4,3)处的值

   u = @(x, y) x ./ y

   v = @(x, y)3*x - 2*y;

   f = @(x, y)u(x, y) .^ 2 .* log(v(x, y))

    x=[2,3,4,4]

    y=[1,2,1,3]

    z=f(x,y)

   z =

       5.5452    3.6212   36.8414    3.1854

   2. m-文件函数

   在matlab界面上先点击新建文件按钮,进入

   窗口Editor-Untitled,按如下格式建立函数并保存。

   格式:function    [y1,y2]=ff(x1,x2)

                                ……

                                 y1=…

                                 y2=…

   输入变量:x1,x2,输出变量:y1,y2

   注:输入、输出变量可以为1个或多个。

   例:建立函数文件,实现对矩阵x的非零元素取倒数,零元素不变,然后调用该函数。

   (在窗口Editor-Untitled写入)

   function y=fun204(a)

        y=spfun(@(x)1./x,a);  (保存) 【spfun : matlab中对稀疏矩阵非零值进行运算的函数】

   (在窗口Command-Window写入)

    a=[0,0,2;3,0,1;4,0,0]

    b=fun204(a);

    c=full(b)

c =

                0         0    0.5000

       0.3333         0    1.0000

       0.2500         0         0

二、m-文件的建立(程序设计)

   编辑m-文件:

   在窗口Editor-Untitled按要求编辑程序,

   输完程序后保存,在对话框中输入文件名.

运行m-文件:

   在窗口Editor-Untitled单击Debug →run,

   或按F5键。

   或在窗口Command-Window输入文件名并回车。

三、 流程控制语句

    每个语句(if,for, while)后面都要接一个end 表示语句结束

    (一)分支结构

     if 表达式

        执行语句1

        else

        执行语句2

     end

2.  switch 分值选择语句

     switch表达式

        case 常量表达式1

                 语句块1

         case 常量表达式2

                 语句块2

          ……

         case 常量表达式n

                 语句块n

         otherwise

                语句块n+1

     end

例子:

   例2.5 自定义函数,对数组x做如下处理:

   记数组x所有元素和为s,

   (1)若s除以5余数为1,

       求出x中所有奇数的和。

   (2)若s除以5余数为4,

      求出x中所有偶数的和。

   (3)其余情况求出x中

      最大值与最小值的差。

   代码:

   function [m,y]=ff(x)

   s=sum(x);

   m=mod(s,5);

   switch m

   case 1

       t=mod(x,2); y=sum(t.*x);  //x是个向量,他会逐一把向量里数值进行运算

   case 4

       t=1-mod(x,2); y=sum(t.*x);

   otherwise          

         y=max(x)-min(x);

   end

    x=[2,-4,3,6,7,11]

    [m,y]=ff205(x)

   m =  0

   y = 15

(二)循环结构

        1. for 循环语句

     for 变量=数组

         执行语句1

         ……

        执行语句n

       end

   若数组为行向量,依次取数组元素执行循环体。

   若数组为矩阵,依次取矩阵的列执行循环体。

   例子:

   数组x=(8,3,5,-1,6,10,7,2,9,11),求出其中所有除以5余1的元素之和以及所有除以5余4的元素之和.

   代码1: 用for执行


    x=[8,3,5,-1,6,10,7,2,9,11];

      s1=0; s2=0;  

     for m=x  //这里是直接让临时变量m 等于 x数组里的每个元素的值  还可以 for i = 1:length(x) -> x(i)

        switch mod(m,5)

          case 1

           s1=s1+m;

         case 4

         s2=s2+m;

       end

     end  

     s1,s2

   代码2: 直接find找出数组符合题意的数字

    x=[8,3,5,-1,6,10,7,2,9,11];

     i1=find(mod(x,5)==1);

     s1=sum(x(i1))  

     i2=find(mod(x,5)==4);

     s2=sum(x(i2))

2. while-end 循环语句

     while表达式

        执行语句1

         ……

        执行语句n

     end

注:表达式一般是由逻辑运算和关系运算组成的表达式,表达式的值非零继续循环,表达式值为0终止循环。



   第三章  matlab图形功能

   一、二维图形

   1.plot函数

    绘图原理是描点法,给定图形上的n个数据点的x坐标与y坐标,将这n个点依次连接起来构成折线。格式:plot(x,y) 或plot(x,y,S) 用字符串S设置曲线的颜色、线形和点的形状。

   控制方法:plot(x,y, ‘颜色 线型 点型’)

   字符串S所设定的颜色、线形状和点的形状:

   颜  色

线  型

点  型

r

红色

实线

p

五角星

k

黑色

— —

虚线

h

六边形

b

蓝色

—.

点划线

x

X形

g

绿色

点线

o

圆圈

y

黄色

*

*

m

洋红

.

w

白色

d

菱形



   例子:

   作出y = sinx * cosx ^ 2的图形

   x=0:pi/20:2*pi;

   y=sin(x).*cos(x).^2;

   plot(x,y)

   figure(2)  //下面图形画在第二个图表的意思

   plot(x,y,'r--p')

   figure(3)  //第三个图表的意思

   plot(x,y,‘m:h’,‘linewidth’,2)  %洋红,点线,六边形

    2. subplot函数

    格式:subplot(m,n,p) -> 将图形窗口分成m×n个坐标窗口, 并打开第p个窗口供图形操作。

   例子:将图形窗口,分成3个坐标窗口,,分别绘制曲线

    subplot(3,1,1)   //写在前面,代表操作表格

    x=0:pi/20:2*pi;

    y=sin(x).*cos(x).^2;

    plot(x,y,'k-*')

    subplot(3,1,2)

    y=exp(x).*sin(x);

    plot(x,y,'b--o')

    subplot(3,1,3)

    x1=cos(x);

    y1=1/sqrt(2)*sin(x);

    plot(x1,y1,'m:p')

    axis equal   //代表x 轴跟 y轴的刻度一样

   效果:

3.多重线(在同一个画面上画多条曲线)      

   例1    在一个画面上画出y=sin(x)与y=cos(x)的图形

    方法一:

     x=0:pi/15:2*pi;

     y1=sin(x);

     y2=cos(x);

     plot(x,y1,‘b:*,x,y2,‘r-.p’)

   方法二:

   x=0:pi/15:2*pi;

   y1=sin(x);

   plot(x,y1, ‘b:*’)

   hold on  //下面的图形都跟上面图形一样

   y2=cos(x);

   plot(x,y2, ‘r:p’)

   hold off

   例2 : 在同一坐标窗口绘制曲线族

   y = sinx * cosx^n (n=1,2,3,4,5,6)

    x=0:pi/40:2*pi;

    y=sin(x).*cos(x);

    plot(x,y,'linewidth',2.5)

    colors=['rkgmy'];

    hold on

    for k=1:5

       y=y.*cos(x);

       plot(x,y,colors(k),'linewidth',2.5)

    end

    title('y=sin(x)*(cos(x))^n')   %加标题

    legend('n=1','n=2','n=3','n=4','n=5','n=6')  %加图例

   4.图形的控制

   grid命令%在图形上加网格;

   xlabel( ‘x轴’)  %在x轴加标记;

   ylabel( ‘y轴’)  %在y轴加标记;

    title ( ‘正弦、余弦曲线’)  %给图形加标题;

   text(x0,y0, ‘字符串’)  %在图上(x0,y0)处加上字符串;

   gtext  %用鼠标控制在图形上加字符串。

   axis([xmin xmax ymin ymax])   % 确定x,y轴的范围;

   axis equal  %设定x轴y轴单位相同;

   axis square  %设定图框成方形;

   axis off  %清除坐标刻度。

    legend%加图例

4.数学函数的简易作图

   它是一个易用的一元函数绘图函数 。特别是在绘制含有符号变量的函数的图像时,ezplot要比plot更方便。因为plot绘制图形时要指定自变量的范围,而ezplot无需数据准备,直接绘出图形。

   ezplot函数: 适用于绘制参数曲线和隐函数确定的曲线。调用格式为

   (1)ezplot(@(x)fun,[a,b]) %绘制显函数曲线

   (2)ezplot(@(x,y)fun,[xmin,xmax,ymin,ymax])

        %绘制隐函数曲线

   (3)ezplot(@(x)fun1,@fun2)%绘制参数方程曲线

例子:

   (1) y = cosx ^ 3 (2) x^4 + y^4 = 1 (3) x = t - sint ; y = t - cost; t 属于 【-2pi, 4pi】;

   ezplot(@(x)cos(x).^3)

   figure(2)

   ezplot(@(x,y)(x.^4+y.^4-1),[-1.2,1.2,-1.2,1.2])

   grid on

   figure(3)

   ezplot(@(t)(t-sin(t)),@(t)(1-cos(t)),[-2*pi,4*pi])

   grid on  //显示表格

fplot函数:

   fplot(fun,[a,b],S) ,数值a,b界定绘图区间,字符串S设定曲线颜色和线形 ,例子:fplot(@sin,[-pi/2,3*pi],'r--') ; y=inline('sin(x)');fplot(y,[-pi,pi]);

   5. 极坐标作图

       作图函数polar(t,r)     t为极角,r为极半径。

二、三维图形

   (一)空间曲线作图

           空间曲线作图命令:plot3(x,y,z,S)

           其中x,y,z是同阶向量(曲线上的点列坐标),

            S是字符串,用于设置曲线的颜色、线形和点。

   例子:

   做曲线图:

   x = sint * cost^2; y = cost * sint^2; z = t*(2*pi-t);

    t=0:pi/50:2*pi;

    x=sin(t).*cos(t).^2;

    y=cos(t).*sin(t).^2;

    z=t.*(2*pi-t);

    plot3(x,y,z,‘r--*')

    grid on

   (二)曲面作图

原理:matlab的曲面作图是对参数方程设计的。


   网格数据点的产生

        用meshgrid命令

        格式: meshgrid(x,y)

    t=-5:0.5:5;

    s=t;

    [S,T]=meshgrid(s,t);

    plot(S,T,'.')

   求出网格数据点(S,T)处 (X,Y,Z)的值

   然后执行命令: mesh(X,Y,Z)或surf(X,Y,Z)

   meshc(X,Y,Z)或surfc(X,Y,Z)

   分别为带等高线的网格曲面和阴影曲面图。

   例1:作曲面z=f(x,y)的图形,

    clear,clc

    x=-7.5:0.5:7.5;y=x;   //已知x,y范围,所以把xy所在网格画出来

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

    R=sqrt(X.^2+Y.^2+1);

    Z=sin(R)./R;

    mesh(X,Y,Z)  //画出立体图形

    figure(2)

    surf(X,Y,Z)

   效果图:


   画抛物柱面 y=2*x^2的图形

    clc,clear

    x=-1:0.1:1; z=0:0.1:2;

    [X,Z]=meshgrid(x,z);  //这里x跟z是已知的,因为没有z,所以z就是负无穷到正无穷,这里截取一段,所以把xz画出来

    Y=2*X.^2;

    surf(X,Y,Z)

    axis equal

    figure(2)

    surf(X,Y,Z)

    view(-37.5+180,30)

    axis equal

   例3.10 画圆柱面 x^2 + y^2 =9的图形// 通过sinx cosx来表达等式

   clear,clc

   t=0:pi/50:2*pi;

   s=0:0.1:4;

   [T,S]=meshgrid(t,s);

    x=3*cos(T);

    y=3*sin(T);

    z=S;

    mesh(x,y,z)

(三)等高线图

   1. contour命令:绘制曲面的等高线图

   用法:contour(z,v)或contour(x,y,z,v)

     z是一个矩阵,由z=f(x,y)在一组点处的函数值给出。

     若v是正整数,给出需要画的等高线的条数。

     若v是向量,给出需要画等高线的指定高度。

   2. clabel命令:标明等高线的高度值

   3. contourf命令:绘制填充等高线图

   4. contour3命令:绘制立体等高线图

   例:画出曲面z=sin(xy)的图形和等高线图

    x=-2:0.05:2;

    y=x;

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

    Z=sin(X.*Y);

    mesh(X,Y,Z)

    figure(2)

    v=[-0.8,-0.5,-0.3,0.2,0.5,0.8];

    [C,h]=contour(Z,v);

    clabel(C,h)

    figure(3)

    [C,h]=contourf(Z,v);

    clabel(C,h)

    colormap cool  %定义等高线的色图

    colorbar            %定义等高线的色标

   ---------------------

   作者:键盘里的青春

   来源:CSDN

   原文:https://blog.csdn.net/qq_34374664/article/details/78894477

   版权声明:本文为博主原创文章,转载请附上博文链接!


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空