matlab初

        matlab语言方式与c有很大的相似之处,此篇记录一下自己初步学习matlab的一些过程和代码

        学习matlab主要是从b站上,也从matlab官网去学习了一下相关感兴趣的函数

        版本是之前下好的R2022b

1.变量命名,这与c语言变量命名要求的规则非常相似

        简单来讲,沿袭右为左赋值的习惯

        A = 2

        a = 2

        这与平时接触的c/c++语言相比,没什么不同,均不允许数字为首开头的变量格式;但是总还是有区别,比如不会让符号在前的命名,matlab需要以字母开头命名;比如:

 

 

 2.字符与字符串

        matlab中单引号' '与双引号 " " 还是有一定的差别的,在c中单引号是单个的char类型,在matlab中:

        a = ' hello ',可以是一个字符串;

        同样的,也可以是 b = " hello ",一样也是字符串

        如下的运算结果,可以看出其中的区别

>> a = 'hello'

a =

    'hello'

>> b = "hello"

b = 

    "hello"

>> a+b

ans = 

    "hellohello"

>> b+a

ans = 

    "hellohello"
>> a = 'abcde'

a =

    'abcde'

>> a-c

ans =

    -2    -1     0     1     2

>> c='abc'

c =

    'abc'

>> a-c
对于此运算,数组的大小不兼容。

相关文档
 
>> a+c
对于此运算,数组的大小不兼容。

         在我的理解看来,单引号形式的字符串是在一个数组中存储,可以进行ASCII码运算,与双引号的字符串相加时,统一成为了  " res1 +  res2 " 类型的字符串拼接

>> c

c =

    'abc'

>> a = 'a'

a =

    'a'

>> c-a

ans =

     0     1     2

>> a-c

ans =

     0    -1    -2

>> a*c

ans =

  列 1 至 2

        9409        9506

  列 3

        9603

>> c*a

ans =

  列 1 至 2

        9409        9506

  列 3

        9603

>> c/a

ans =

    1.0000    1.0103    1.0206

 对于 " " 的字符串类型来讲,只能支持+操作,也就是拼接操作

>> a = "aaaa"

a = 

    "aaaa"

>> b="bbb"

b = 

    "bbb"

>> a-b
'string' 类型的操作数不支持运算符 '-'。
 
>> a+b

ans = 

    "aaaabbb"

 常见函数abs(),一开始以为是绝对值了,结果发现是返回ASCII码

>> abs('0')

ans =

    48

 常用函数char(),返回对应ASCII码的字符
 

>> char(48)

ans =

    '0'
>> char(48,49,52)

ans =

  3×1 char 数组

    '0'
    '1'
    '4'

 常用函数num2str(),“number to string”,将数字转化为字符串类型

>> num2str(88)

ans =

    '88'

 常用函数length(),返回字符串的的长度 (空格也会算)

>> str = 'wwwoo1100'

str =

    'wwwoo1100'

>> length(str)

ans =

     9

3.矩阵

        在matlab中应用矩阵非常神奇。

        声明矩阵: 元素之间用    空格   或者   逗号 , 隔开,一行元素结束后用   分号 ; 隔开

>> A = [1,2,3;6,7,8;9,10,20]

A =

     1     2     3
     6     7     8
     9    10    20
>> A = [1 2 3;6 7 8;9 10 20]

A =

     1     2     3
     6     7     8
     9    10    20

        矩阵运算   (转置、元素按行列出、矩阵求逆、矩阵乘法)

>> A'

ans =

     1     6     9
     2     7    10
     3     8    20



>> A(:)

ans =

     1
     6
     9
     2
     7
    10
     3
     8
    20


>> inv(A)

ans =

   -1.3333    0.2222    0.1111
    1.0667    0.1556   -0.2222
    0.0667   -0.1778    0.1111


>> inv(A) * A

ans =

    1.0000    0.0000    0.0000
         0    1.0000         0
         0         0    1.0000


>> A/inv(A)

ans =

   40.0000   46.0000   79.0000
  120.0000  141.0000  234.0000
  249.0000  288.0000  507.0000

>> A*A

ans =

    40    46    79
   120   141   234
   249   288   507

        矩阵与随机数

  函数zeros()(与图像处理有关的矩阵生成),zeros(行数,列数,层数),如图像RGB三层,生成三层矩阵

>> E= zeros(10,5,3)  

E(:,:,1) =

     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0


E(:,:,2) =

     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0


E(:,:,3) =

     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0

(上述中,E(:,:,2)里面的 : 指的是全部(all)的意思)

 矩阵函数eye(num):生成单位阵

>> eye(4)

ans =

     1     0     0     0
     0     1     0     0
     0     0     1     0
     0     0     0     1

 矩阵函数magic(num):生成一个magic矩阵,上下斜相加均相等

>> magic(5)

ans =

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

>> magic(3)

ans =

     8     1     6
     3     5     7
     4     9     2

  3.+ 矩阵构造  +矩阵运算  +矩阵索引: 

        起始 :步长 :终止(包括)

>> 1:4:29

ans =

     1     5     9    13    17    21    25    29

        repmat函数(①,②,③),进行重复操作来构造,相当于ctrl c ①,然后按照②的行数ctrl v

        再按照③的列数 ctrl v 形成新的矩阵

>> c = repmat(1:4:20,3,2)

c =

     1     5     9    13    17     1     5     9    13    17
     1     5     9    13    17     1     5     9    13    17
     1     5     9    13    17     1     5     9    13    17

         randi(最大值,行数,列数)

>> b = randi(50,4,4)

b =

    31    14    33    33
    30    16    24    28
    28     6    32    37
    44    47    28    27

>> a = randi(50,4,4)

a =

    50     4    39    49
    11    21    32    10
     6    23    39     7
     6    19    47    35
//矩阵运算
>> a+b

ans =

    81    18    72    82
    41    37    56    38
    34    29    71    44
    50    66    75    62

>> a-b

ans =

    19   -10     6    16
   -19     5     8   -18
   -22    17     7   -30
   -38   -28    19     8

>> a*b

ans =

        4918        3301        4366        4528
        2307        1152        2171        2405
        2276        1015        2194        2474
        3612        2315        3138        3414

>> a.*b   (各对应元素相乘)

ans =

        1550          56        1287        1617
         330         336         768         280
         168         138        1248         259
         264         893        1316         945

>> a/b

ans =

    1.4104    5.3935   -2.6806   -1.8289
    3.9783   -4.9448   -0.2488    0.9769
    5.5984   -7.4187   -0.1907    1.3716
   -0.2886  -11.1121    7.1615    3.3588

>> a./b   (各对应元素相除)

ans =

    1.6129    0.2857    1.1818    1.4848
    0.3667    1.3125    1.3333    0.3571
    0.2143    3.8333    1.2188    0.1892
    0.1364    0.4043    1.6786    1.2963

         矩阵索引

>> c = a(2,3)

c =

    32

>> c = a(2,:)

c =

    11    21    32    10

>> c = a(:,4)

c =

    49
    10
     7
    35

>> c = a(:,:)

c =

    50     4    39    49
    11    21    32    10
     6    23    39     7
     6    19    47    35

                find函数(找到满足条件的索引值)

>> [m,n] = find(a > 20)

m =

     1
     2
     3
     1
     2
     3
     4
     1
     4


n =

     1
     2
     2
     3
     3
     3
     3
     4
     4



>> [m,n] = find(a == 20)    //(不存在=20的元素)

m =

  空的 0×1 double 列向量


n =

  空的 0×1 double 列向量

 

4.元胞数组

        我的理解来看,元胞数组像是vector容器一样,是一个大的包裹,这个包裹按照矩阵的方式来进行存储,cell(行数,列数)进行声明,原本以为像是二维数组那样来解释,但是最终还是觉得不合适,在元胞数组中,可以声明很多的空间来存放东西,如下列:

>> A = cell(2,4)

A =

  2×4 cell 数组

  列 1 至 3

    {0×0 double}    {0×0 double}    {0×0 double}
    {0×0 double}    {0×0 double}    {0×0 double}

  列 4

    {0×0 double}
    {0×0 double}

>> A{1,2} = rand(3,4)

A =

  2×4 cell 数组

  列 1 至 3

    {0×0 double}    {3×4 double}    {0×0 double}
    {0×0 double}    {0×0 double}    {0×0 double}

  列 4

    {0×0 double}
    {0×0 double}

>> A{1,2}

ans =

    0.8147    0.9134    0.2785    0.9649
    0.9058    0.6324    0.5469    0.1576
    0.1270    0.0975    0.9575    0.9706

5.程序结构(类似c/c++)

         for循环的结构也是与c类似的,for 变量 : 步长 : 终止

sum = 0;
for n = 1:1:5
    sum=sum+1;
end
sum

         (在脚本中,不带  “ ;” 的将被显示)

        类似的,while和switch

 6.作图

 

        终于到了matlab画图的部分

二维:

x = 0:0.01:100;   //x值   start:step:end
y = 20*exp(-0.05*x).*sin(x);  //y=f(x)
figure            //创建图窗窗口
plot(x,y)         //绘图
title('y = 20*exp(-0.05*x).*sin(x)')  //标题
xlabel('x')                           //x标签
ylabel('20*exp(-0.05*x).*sin(x)')     //y标签

 

x = 0:0.01:100;
y1 = 200*exp(-0.05*(x+40)).*sin(x+40);
y2 = 8*exp(8*sin(x)).*sin(20*sin(x*0.08));
figure
[AX,H1,H2] = plotyy(x,y1,x,y2);
title('two')
set(H1,'LineStyle','-')
set(H2,'LineStyle','--')

 

 三维:(这里要注意,二维与三维plot函数写法不同)

t = 0:pi/50:10*pi
plot3(sin(t),cos(t),t)  //三维作图
xlabel('sin(t)')
ylabel('cos(t)')
zlabel('t')
grid on  // 网格

[x,y,z] = peaks(60);
mesh(x,y,z)
grid 

//peaks函数

[X,Y] = meshgrid(-10:0.5:10);
Z = Y.*10*sin(cos(sin(X))) - X.*cos(Y).*exp(-0.05*Y);
s = surf(X,Y,Z,'FaceAlpha',0.5)

 

 

学习参考:1.matlab前言_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值