找回密码
 注册
关于网站域名变更的通知
查看: 827|回复: 4
打印 上一主题 下一主题

Matlab语言基础

[复制链接]
  • TA的每日心情

    2019-11-19 15:32
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2021-7-28 13:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    7 y3 f/ o- f( W2 j( F# e' p
    Matlab用C开发,C语言属于强类型语言,变量在使用之前必须强制声明,而matlab则属于弱类型语言,通过赋值就可以创建变量变量类型取决于创建时的类型,而不需要强制声明。
    ' x; U1 Z" t% }1 ]/ C" q
    ' ?) G9 W7 P& [) _关于数组8 o# e- C4 b8 b" @& y0 L/ _6 B% r
    Matlab的变量和运算是以数组(矩阵)为基础0 r8 G# e. i# }- Z& P" |' c
    数组分为9 T+ _) y0 o" ?! v
             ●向量:一维数组7 i1 L! x4 q' p. _) N6 j( k% w9 Z
             ●矩阵:二维/多维数组( p& E+ J' H7 n; ?" C" J, |
             ●标量:1行1列数组
    8 e( n% s/ v3 u
    6 ^* r. Z: G, ~$ J数组的创建:1.用”[]”操作符直接创建   2.用函数创建      
    ' m9 k. ]' V0 F1 p' x, B4 f' Y/ G0 |6 R( n0 P
    数组元素的访问(matlab中数组所有下标都从1开始)7 K* ?  x3 Y2 @
    而且matlab中,下标都是从1开始的' o+ I0 n0 H$ \
    有3中方式: M$ v- E4 {3 j& q
             ●全下标:a(m,n…)—第m行,第n列/ g9 z! C, ^' Y0 i& ~5 C
             ●单下标:a(index)—在内存中,matlab数组是按列保存的,全部元素按列排成一个大向量,index就是向量的索引。
    2 N3 i4 h, i* q6 l         ●逻辑1方式:建立一个与矩阵同型的逻辑型数组,抽取该数组为1的位置对应的元素。
    ( O: n" s, o6 X  y! f: ]/ z- j' X* \
    如:+ v, F4 z. W$ e& V5 q4 b* c
    6 u+ q4 q+ D9 h% K" O! G
    >> a=[1,2,3;4,5,6];1 i, h4 s. Q- O( N5 {0 V' r  \
    * ~0 i' W" w: ]& ?' R3 I+ C( Q/ g
    >> a(2,1)          %第2行第1列
    ! ?1 q' }. g" h7 V- o* v% I2 w0 [. a6 Z/ U5 m* Z' L

    ) c" |7 b# O2 f: P6 N/ k6 B. H. r+ q* O0 Z7 x" t
    ans =
    + m( L( V2 |8 k- E4 T+ v' x- i' R) w

    , d6 N8 L4 Q) s% x; i- R( h) c# v0 m2 m4 l$ T! v* r
         4
    * b0 F% X1 f0 ?$ I- D, Y
    8 x. ^* D2 L: w6 @ 5 j0 t3 {2 X* s# ~7 C

    8 |. e5 u5 q+ ~. i0 O1 L1 f>> a(2)              %第2个元素2 d1 o) w4 y7 S
    0 T/ M( _# P, S+ U, K' i
    . ^& O, |5 p7 S# [9 y( q5 p2 G$ i7 W" S

    " A; }3 F+ s; q* ]/ K9 h% uans =; x& ~) t1 O; v  \4 b! G1 k  r' U

    , Y4 m6 T4 G/ |3 ?# o6 J7 y* Y
    : a7 |+ v1 u! }4 O, P& P1 O' J$ K# C* A: P
    该维数中的第几8 ]% S) i8 J& d+ B* I1 W
    5 m" p' g. g7 E& l/ U7 A& |

    ( B+ ?1 R- c& D* ]% |  B  , z( @, w! D+ c) W3 C
    # q2 o+ J5 _% a' g. d# E- T
         4/ N$ b+ S7 @9 ~; _* `, i
    ! i, R4 u1 B' R; a; E

    , p' e# k' x. Z2 d
    ( J5 y3 b) s; }>> a(2,[1,3])   %第2行的第1和第3列元素, D2 O* e( D: m& R2 a+ H, I) n

    3 Y: P- O6 [6 [2 g ) E% @% `9 l. \/ L4 D' q* n0 a; w

    ( E; R/ w  E8 y+ ?  [) v" tans =
    # k3 k8 T* H) w+ ~5 P: F% Y) Y+ b, Q

    & x: f8 a$ s, U. m
    ( E5 {0 s8 }, y- P     4     6
    + k& L1 j0 n* y3 Q: q1 \3 }# Q* g5 B0 T
    >> a(:,2)    %第2列8 I, d  s8 c6 B; W: N3 T6 ~, H

    " U5 Y, Z# l3 F- f( U
    2 `( N- ~# M/ [( y1 E+ y4 _5 R. j, K5 `
    ans =" P2 t5 J, X( \7 @1 n

    ; j9 d) l2 E  D7 k/ P2 e * q9 c5 S* S* }# C' e6 x
    : C* M! j) ~8 |8 G4 w
         2
    9 G( ]0 X2 A$ p% }" }! j) Z4 K# H7 B: H; A3 I6 L
         5& j( r' z0 ]# b3 N

    * j: w( d- P; t/ w! ?& T+ N
    * g4 u! y" |2 v+ W- t' s. ]. a- Q, O- [6 ?6 Y9 l. _1 V% N( c4 I
    >> a(2,:)   %第2行
    - d& j* r5 A( \) T% K9 R9 `  S6 o5 L9 [$ B( s* J

    9 h7 P" f- I1 W% X4 f0 V- f* Q( x$ U  G1 ~  {) g! Q* z( M
    ans =
    / A9 V% y0 S3 R8 k( Z
    / |, a% q( O2 }! T# g+ y. H1 P 4 E' d" C$ [' R, ~: w' Y7 \

    . G% T% J: M8 v/ |, s     4     5     6
    ' P+ I3 |# [! ^0 A" R& m& A& X
    ; U: y: W0 u0 D2 ?+ ~  g: K4 U
    ) h3 m% B* B+ m. X
    + ]$ Q/ F) }0 L>> a([1,2],[1,3])  %第1,2行中的第1,3行的数据(就是交点的位置的数据)
    - ?+ \% l3 t, t
    ; k4 e) [0 }! m & ]9 f9 s3 U3 S/ V
    ( s7 u  @4 z5 C1 l5 R# V
    ans =; ~3 v# H; F( k4 J# {: G% N: C
    ; ], q2 Z7 {6 x7 d* w; d" z
    ' h: ?9 Y9 t; n8 j2 S

    * v8 l( S% C! C, o1 h; g     1     3
    1 i( I2 s5 T7 {9 u
    * C+ }. ^" W' d$ t$ z2 h     4     6
    : W9 k2 g' o7 K+ `( w& B
    $ E8 M# l& l0 b. J1 C # `5 l6 f5 e" @$ }: c6 k
    ; U  S" H% {2 p9 F/ h
    >> a(2,2:end)           %第2行中第2列到最后7 ?8 n* e0 J- s# v- z& {

    7 a) J& \# ]8 ? / e# n( h3 F& R9 V! g
    # p- w, E$ E4 v7 k' u; Q8 ?( K' V& d9 l
    ans =8 w" n5 A& W, w/ V) {- k3 ?1 R# V

    # [) S* f3 ?. l1 R
    8 [! L7 n+ P- j6 d6 _4 h( L( S- z# @- R9 C  E7 Y! t
         5     6
    * ?0 l; l4 H+ m0 O* M6 W% Y" e) l0 v* x* U# W7 N( j9 W/ L6 A
    2.1数据类型
    / q; Y' b7 ?, O" t  r5 \1 g4 g9 Y2 ~2.1.1整型
    2 e9 D$ N$ D6 J3 Y( K5 i整型从字节数,有符号还是无符号两个方面可以分为int8,uint8,int16,uint16…等,int8表示一个字节长度的有符号整数,用intmax(‘int8’) 和intmin(‘int8’)返回int8所能表示的最大值127和-128.: C5 |% C: ]) }, `$ ^" L; J

    ; r/ W3 h$ z, U/ ?1 R" ]' h9 @2.1.2浮点型
    1 S# ^, q9 P: K3 m( U浮点型包括单精度single和双精度浮点数double.realmax(‘double’)和realmax(‘single’)分别返回两者能表示的最大值。
    . q# s" Q! T) A2 j! U& z* `常数数字默认类型是double) f! _* w* b1 a
    >>class(pi)
    ( |5 `( Z# A1 D1 sans=double
    " c! [9 G4 s, f! y>>class(2)
    3 H1 L* u2 a: O9 s& lans=double, [2 R5 B- V/ L/ S. _$ r
    0 S& q; C3 b4 E/ J! c4 S
    2.1.3字符型4 d2 K: g5 r) Q& F1 I; K
    1、string=’matlab’,matlab中字符串使用单引号,字符串存储为字符数组,多个字符串可以形成矩阵,但每个字符串长度必须相等。
    - q2 u( K# q6 s8 n3 v+ D# J2、字符串常用操作:
    / s7 `3 c, `' L! p: t- Q( r* C, Y* q, r/ Y9 A' t
    字符串与数值的互换:str2num,num2str' X8 K3 z: O8 O; e% c
    a=str2num(‘1234’)结果为a=1234* E! {/ @# k  L' S+ J
    / _, P' I% p4 A  L: h
    获取字符ASCII值:double函数或abs()函数! m( ~9 i' `6 N" N* X5 K/ F) i
    double(‘a’)输出97; I( @9 F' [7 x( `" f

    " m* O- N- a5 A' j, jASCII转为字符输出:char()7 D( I. v0 X7 U8 ^( w
    char(97)则输出ans=a' N* |3 ^- Q. Z  n4 L
    2 b/ p' ?. f1 Q% H8 J! }% y
    eval(‘t=1’);将’t=1’作为命令执行,结果是将1赋值为t+ H# o# w3 r+ [5 x0 S
    3 n. g, ~% H# E( M
    2.1.4逻辑型
    * L8 c4 w* I; t; }- Z逻辑型变量只能取true(1)或者false(0),在矩阵操作中逻辑型变量非常有用。
    0 |1 h5 H- R% U& W3 K& C/ `/ c, o; P1 m2 r+ M
    2.1.5结构体(类似于C语言中的结构体)
      O5 g7 K7 q: L2 c: _# C, p4 b创建的两种方式:1.直接创建  2.利用struct函数创建3 Z4 M$ ~( M- ^& p+ p

    9 t9 D- b4 S- ]; v例如:
    3 d7 p8 T' {) f- ^* X4 b
    $ q0 Z5 X- t" y: D第一种:" d9 J4 H8 B1 q9 w5 T

    " f) `. c- \4 R$ T( u>> book.name='matlab';6 V0 `/ J* Q5 H' b
    8 r) c( c8 y8 q) D. _% }
    >> book.price=20;7 t* H/ ?6 S5 [, r6 L& m
    9 _$ F- N# j: b3 s' l$ c1 ]5 V0 v
    >> book.pubtime='2011';5 g9 w1 I$ I" [, x2 U' p* ?5 V
    ( Q3 d3 |. J/ D" W; p3 f7 }9 s
    >> book  ?% p1 e3 Z' {. s, N9 S
    * X" E* U- u  K$ K3 \

    ! k. }0 f0 _; N, i* {) I
    5 m1 T+ C/ J, Xbook =
    . e+ J* W4 z, R; H1 y
    * m! O0 E) U3 E$ _4 z6 `9 R # @) [. u( Z: g, b

    : i6 s! o! }. n* B( Y
    - \( W% g7 `+ w+ w( J' C4 Z3 l" k* s3 w3 C9 u
    字段
    ; G/ w' r2 p' {% H- x- Y) l
    ' [$ p5 X- w" w3 i  8 c: `& H& U! Q4 X7 t, Y' c
    字段所对应的值
    # _! d2 Y2 c7 `, V9 \* W% Y, G5 @) Q, i! G/ @' K/ J+ p2 e% ]1 p, M, B

    + t7 y: R6 X# _$ q6 ^6 I& Z       name: 'matlab') X$ L2 y( {. B: B8 {
    # F6 [4 P, Q3 N8 v0 B
          price: 20
    ; X+ k6 D% y7 z" Q1 N. O+ S! l
    ; [( T0 y9 ^7 ~9 B( J" N: k    pubtime: '2011'
    + X6 b, o% D8 K6 M
    2 r: [, g5 Z5 n5 x第二种:3 a- \5 x# z9 q: ^0 U1 A
    ) Q. z$ O1 V2 a+ r) ]$ ]# ~7 [
    >> book2=struct('name','matlab','price',20,'pubtime','2011');
    ( {7 x3 c0 T) [* ]! B  b; I( F4 W. u% t5 x
    >> book2
    / t) d; Y" D4 O7 V9 g! E! E
      Y3 w, t9 F3 ~4 {+ D
    * ^/ b' @+ q0 I7 S  M% o6 g
    7 ^. d- }( g+ @8 O% Ibook2 =+ ?/ ?  V( D  e. a  K) d* `

    $ @/ |% F2 @& E0 P; j9 h  q 7 J; W0 Z+ q( o  `, S. `8 R1 B
    4 w+ }% F+ J6 h# w
           name: 'matlab'
    ; Z) h& _7 Y2 v; U! g
    9 |2 z4 v6 X  ^2 ^7 l      price: 20  Z% Q5 }" N8 C3 O% \2 Q/ K: u
    7 S" Y( I/ h+ K( R" q
        pubtime: '2011'
    ) m/ l+ g2 Q& L' T
    3 y- l" r4 j+ o* U) t& _' C对结构体中字段的访问用操作符”.”
    , n$ D6 P. B% e: |9 a* z- }% N$ {% W6 O
    创建结构体数组
    # Z' ~- A& ~$ p0 rfor i=1:10
    " C8 U) ]% S3 Q( c9 ]  a# |  W6 B
    % B+ M) k5 e  ^6 u, v/ S, ^    books2(i).name=strcat('book',num2str(i));0 W! K5 \8 f1 k- Y) e8 E
    " C- N$ a3 U/ U9 C. e8 z
        books2(i).price=20+i;
    8 x& h/ b% m/ R
    ! j+ ?! @5 o8 J  l7 |    books2(i).pubtime='2011';
    " V# U. g7 o4 U, T8 B' W! Z& o) F( A4 q2 o9 ?, h: Y9 T
    end! p6 P" g7 w. ~8 p6 J0 o

    4 v  f/ S/ D% a/ T) L % q2 ^+ g- o# E

    ' k! `7 V% l& U: S; L2.1.6元胞数组(类似于C#中非泛型集合)9 M9 Q, |  d% j
    元胞数组的元素可以是任意类型的数据类型、任意纬度的常量
    & a4 V: D5 U) v3 s" E用”{}”操作符引用元素时,得到的是元素本身的类型,而使用”()”操作符时,得到的是一个元胞数组。4 c, C  H& w2 ]

    % G8 C/ F4 c6 {" p* S2.1.7函数句柄(取函数地址)( J0 z" D7 B/ M2 B2 n; I" E
    声明:1.用’@’符号直接声明
    9 ^# {+ G, B3 @$ D: R8 T- S9 U* E9 s$ L9 Z
               2.用str2func函数声明
    / r2 ~, S) @( W3 C) `9 @$ J; e3 _  M: I
    函数可以是预定义函数,也可以是用户自定义的函数,声明函数句柄以后,就可以像使用函数名一样使用百句柄了。
    4 f. v  O5 Q* S1 O& X0 A>>ha=@sum;: T% J- x- ]/ B, ?
    >>hb=str2func(‘sum’);% i- \! X0 v" j/ ]. y- `
    >>functions(ha)       %函数句柄包含的信息: r7 g; j7 D1 z6 f( i( \9 U
             ans=. o) f4 [, x6 q+ y: d
                      function:’sum’
    : D( |) }  i. D                  type:’simple’' |, n. X6 u" p5 p4 {+ Q3 H
                      file:’’
    % |+ E7 W; @+ c; D- J, ?
    2 R& ]5 W, m5 Y/ D# Q函数句柄包含了函数的路径,函数名,类型及可能存在的重载方法,可用functions(function_handle)来显示函数信息。 : h+ L9 R2 O. R+ i% T( s5 j& t

    - T" P6 G) _# N# w( I) o使用函数句柄可以提高程序的运行速度,因为句柄包含了路径信息,系统不需要再每次调用时搜索一遍路径,而是直接找到函数的路径。正因如此,在系统切换工作路径时,不需要将函数文件复制过来就可以同样使用该函数。" v1 }& Q) b- v8 u) R) ?1 ^% ?3 T
    1 Y% c) P0 {3 V' u) h
    函数句柄的另一种高级用法是声明一个匿名函数句柄,他指向一个表达式' X" ~6 J2 n/ \
    声明方法:变量名=@(输入参数列表)函数表达式
    0 I, U5 @3 p: M/ S; W>>hd=@(x,y)x.^2+y.^2;
    7 n) p0 W" Z! d- C( _/ y+ _. l* Z8 K% s  a% [
    2.1  matlab运算符4 \3 s1 _' p# ^  s& ^& r8 o4 c: a+ r
    2.1.1 算术运算符
    & \+ z. Y. e/ l& N. J
    ' M- A& h' Q+ j4 k, z6 h7 D) n4 ]分为矩阵的运算符和数组的运算符两大类# @. Q  U  [7 k  ]3 x4 Y
    ) C* s, T! O: w# I( h
    其中矩阵运算符将矩阵作为整体,按线性代数的规则进行运算,而数组运算是在矩阵或数组中的对应元素之间进行的运算
    + A3 S0 |4 B( i) w( m8 l5 i2 Y. `9 `! d
    矩阵运算符
    - ^: Z4 Z/ I1 H
    . P* D: ]1 c, k; G% p1、+ ,-:加减  2、*:矩阵相乘  3、/:相除
    ! `- \3 Z1 z. \1 C. S0 ^4 O0 B
    3 L" z- {7 e! }" s( O4、\:矩阵左除,左边为除数  5、^:矩阵的乘方  6、.’ :转置
    ( Z$ L2 p8 a; D0 z, a: L% l; m  m. j+ D$ Y! D1 j# M
    数组运算中(点运算)
    . K1 U* `/ S1 a' Z1、.*:对应元素相乘  2、.^:对应元素乘方  3、./:对应元素相除   4、.\:对应元素左除, F- q) \+ {6 L5 a3 b+ ^
    标量与数组的运算,是该标量与数组中每一个元素分别进行的运算。
    * n0 |) [! G$ _3 x4 q' D( m* a+ S* A$ W7 e5 {
    2.2  matlab流程控制语句& c: S9 ~/ {  m3 Q7 i
    注意:不要忘了最后的end- }5 O, Y; {1 h; ?2 q

    & R9 A" T( l6 ~7 F2 k2 b1、if表达式2 [1 |8 y! x" O7 ]0 c4 ~
             语句;7 k, y* g# q4 w
    / g, k2 n2 Q" J8 x
       end( m5 D9 g/ G$ B3 ^, y

    6 K5 T7 f( A  g/ x( `/ J# k2、if 表达式8 T: [! l" g' Q
              语句1
    # `$ |& F- W2 T0 h* O$ p
    4 H% r- y" H' [+ y1 U1 j9 p9 o/ m   else
    0 y) ~0 k7 [5 s! A/ J: W3 E: |* y* ~1 O, A' X
              语句2
    $ `) h0 P6 B+ B- [( ^
    4 E8 c) z- x8 d+ {) I. ^   end" t/ Y, {' g# l' w% ^/ g( |( m
    $ j. H7 }; ]# }; g- W$ S
    3、switch 表达式* C/ h. I4 h7 s/ {+ h
    0 K$ u8 o" w# s; B' o! H/ k
                      Case 表达式1/ l! K" D7 E: E! B. J
    0 X+ w8 d7 z; l1 D
                              语句18 Y5 S' C: }% E6 r5 o

    3 b2 J: s/ a. C& d( v5 X! a1 g2 E                  Case 表达式25 y1 t5 _) Z0 t; T- z$ h3 h( n. k
    ; N$ k2 i8 Z1 H7 ?) F- H2 y
                              语句2
    * s, P# |# U; C+ a9 ?                  …
    & L; d; P+ f/ e6 \/ r. b9 |5 f! F
                      Otherwise
    8 B! z* u% Q$ ?" K- R# g, B
    4 T4 A- [5 ?) j2 }) }+ [                          语句n4 [) y( {3 e/ w

    ' ?4 ~) y* V- Y. l# U3 c+ \  end6 c: T0 F$ j7 i' ]( Z
    0 e9 o/ ?. N3 ]- j3 I# u) F, G& m
    4、★
    . G1 D/ Y* M: Y* K' F: ]  for  i=表达式; P& v: n9 N5 y( b
    ' ~! i: m% @! @0 w7 ?4 O8 Q
                      语句/ y) P) g: t% Q' Y) L6 W) T5 l+ t

    1 d( o) {, x& H$ P8 {3 Q/ `) g6 p3 I: `   end1 i2 z* H+ f' ^3 u1 X* W  {" n0 {
    //能够遍历表达式中所有的元素8 E" U6 s4 S. u8 F) ?
       如:for i={‘abc’,’xyz’}  %i为元胞数组  e# y4 Q/ z  W. k* ]9 f

    : R7 ~# y. C; @$ ?! k                          disp(i{1});! v& @# `$ o  L( ]6 f7 a. \

    9 b8 @% l; ]& a        end
    * |6 {: _, Q( Z* Q# w3 I0 v& H/ f; O$ W8 Q* R8 l) J
                      输出:abc
    ) `$ ]+ n% X0 K" j+ V% p" t% C/ F5 y$ M# t( A
                                xyz) l' K, k7 l, C. f
    / n+ A' k" v0 x1 G, R
    5、while 表达式2 F% B. [' R! W

    & M. F& k2 E' }( E                  语句
    + O/ f/ \2 b! D1 X
    ) u% p& i$ o; |) b   end
    . j$ `, n* U! D9 ^% t% [. _6 v3 @4 B* \4 ?

    该用户从未签到

    2#
    发表于 2021-7-28 14:23 | 只看该作者
    matlab属于弱类型语言,通过赋值就可以创建变量变量类型取决于创建时的类型,而不需要强制声明

    该用户从未签到

    3#
    发表于 2021-7-28 14:24 | 只看该作者
    Matlab的变量和运算是以数组(矩阵)为基础

    该用户从未签到

    4#
    发表于 2021-7-28 14:25 | 只看该作者
    浮点型包括单精度single和双精度浮点数double

    该用户从未签到

    5#
    发表于 2021-8-1 09:03 | 只看该作者
    用上线性代数相关知识
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-23 17:56 , Processed in 0.171875 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表