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

Matlab语言基础

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    " C  @5 j* O5 E  y+ K
    Matlab用C开发,C语言属于强类型语言,变量在使用之前必须强制声明,而matlab则属于弱类型语言,通过赋值就可以创建变量变量类型取决于创建时的类型,而不需要强制声明。
    ) T& i* O& a: A+ J: t) P! z" l' A% t  _) O" W. m+ w2 @
    关于数组
    ; I1 ^7 J5 F0 J; t9 Y8 ZMatlab的变量和运算是以数组(矩阵)为基础, X/ C  u5 ]! c  k  m. l
    数组分为! S) a* s9 ~, |* R) B
             ●向量:一维数组; E2 o7 j; l! N/ x1 }
             ●矩阵:二维/多维数组  r4 X5 T$ p, f$ h% R
             ●标量:1行1列数组" _6 u5 ?4 l* x9 T# r0 g
    ; u# w8 F$ r: E% @5 T! k
    数组的创建:1.用”[]”操作符直接创建   2.用函数创建       7 p0 O; @8 Q: _4 t% h' P
    2 K9 U+ E+ X; d" t8 q4 W
    数组元素的访问(matlab中数组所有下标都从1开始)  N( {; o  m, D# W4 F+ ^% g5 l
    而且matlab中,下标都是从1开始的# I7 W2 \" }" Z1 X: q# R
    有3中方式: c, B. W8 C( G2 c$ n: u
             ●全下标:a(m,n…)—第m行,第n列
    ( c- f/ R& c# i- W         ●单下标:a(index)—在内存中,matlab数组是按列保存的,全部元素按列排成一个大向量,index就是向量的索引。$ l: ]5 X+ O6 {4 ]$ b7 @( W- s
             ●逻辑1方式:建立一个与矩阵同型的逻辑型数组,抽取该数组为1的位置对应的元素。
    / j6 X7 {' H( b" C5 q+ U. E
    9 E0 P+ }8 Z% @( G+ _! z$ s如:
    6 n: y) o/ H$ {" b, ?
    7 b1 K7 E" j' Z) H6 I9 u+ z/ O2 U>> a=[1,2,3;4,5,6];$ W/ U  V+ I, I$ g
    . W7 W7 ]$ V5 @' q. O
    >> a(2,1)          %第2行第1列: }7 X5 `0 r. S3 Z  x
    - x6 T* S. F0 R2 W. u% x# Z0 E1 U

      x9 |1 V  V9 ]) `  j( V1 ]- H1 X  l6 R! n4 p
    ans =6 m  |5 h2 n  j4 z) [' L: i; T
    , O' p! W8 m( B- J2 d4 L( h5 u* V

    ! m5 J3 r$ c6 W% m9 [  C* z9 ~0 a( R
         4
    ' }& g  J: G# y' L. G( Z6 `
    ' L% }' e% ^& g9 ^4 t! c
    / b  M: q$ [# m2 o6 y1 n, L
    , _; S& A9 E1 {>> a(2)              %第2个元素- [1 ^' c5 ]! Q. ^+ u) g

    % ]# Y" h  X6 n8 `
    # \0 Z% F; a& r7 N! x
    3 G- ?5 @- q) ]. b3 k- e0 u4 }" Jans =1 V& j" [( B, R- b3 \$ b
    5 {7 D# x3 d3 _3 o
    5 C) M* k8 o, ^: ~: e1 F

    # {, H3 a7 K, O% C该维数中的第几
    ! P& R" S* \* ^  f$ v  t( B- B% M6 [) j
    # b) G& W1 b" ^$ P: `( a$ ?) ?. ?8 v& ~
      , u5 z# k; E& _8 g
    / y- r! G/ M; Q" |2 `; |
         45 h' p+ ^+ p4 j* C* X) K+ s

      ^6 r# n9 E0 n5 J % l2 P- \7 Q' W: b3 Z* t0 F; [- @& y
    5 i/ J3 q: R0 M+ T+ N  h& Z
    >> a(2,[1,3])   %第2行的第1和第3列元素
    / @  e1 ?( c; S5 d* k6 D
    0 x9 P: y* B. M' S$ n0 L # P2 i9 j6 [6 ?, J
    / Z/ N# O3 q; ~7 X7 s5 }/ J" d# s: C
    ans =
    4 B2 T" W: D6 q/ ?+ r/ \2 L& h7 Z0 n, f8 A( B

    6 |) s3 ]7 k/ u. R
    8 F: F8 \: Z8 w2 @/ T# k     4     6! Z2 i4 L/ p8 v) x* N9 j

    0 y8 C) f+ ^( u; S3 b) L>> a(:,2)    %第2列
    ' l) H+ V3 _6 ^- o4 C; E9 r$ @' }! Z% ^
    6 h8 {7 v1 x/ S

    7 s3 N4 y: J& w- U6 M8 _3 Cans =( B" l% R" S& l/ H* i7 ]2 o) a

    ( Y! ^5 [; _  a. l' Q4 t. Q, u
    1 J2 I8 z" ]: E! E' o$ E/ V" [- U  `: ^
    9 b# C/ m  k: J% g1 G4 m     2
    9 o# y3 m% ~, |9 p/ _8 }
    & d: W! O5 u4 g1 h# Y     51 h( H# X$ e2 S( w9 t

    $ n/ ?8 Q$ z1 R% S: e
    6 Y" I# h# g! K0 Q; B1 ^: S
    ( [' H. I0 k/ c4 u# Y( e>> a(2,:)   %第2行
    : g% N6 i1 J6 U( G1 U( \
    2 F7 Z" t. ?( i
    1 J$ k9 ~7 A5 P3 B: }' g9 |+ g8 m2 _1 y  H
    ans =
    / F, d" J6 ]8 S$ U5 \- {0 L
    " {) p  T* I5 a, K 7 H% \$ {8 E' a+ j

    $ c3 z3 E9 U( X4 b1 v; U     4     5     6( P) O3 m: S1 G' _: [; h9 {* F1 y

    & @3 a4 ?" o3 a8 s$ N3 P- K ' e& F( R: M: J& O
    : i1 y+ N2 t" @$ S# `0 j
    >> a([1,2],[1,3])  %第1,2行中的第1,3行的数据(就是交点的位置的数据)
    4 R# z' |9 I& d  x) b# J( e
    : z1 `( z6 s/ J3 F0 g/ V 7 q% a/ f" y0 U8 U
    ) n. z6 C! S+ c5 O/ q" b
    ans =
    ; b8 R# a+ r  W7 G  |- U' I
    ; i; |/ z7 v. ~* E! N% r' \ 4 J+ m# N: f1 z' ^

    0 R# M5 m: j! w, f! o& b- m     1     3! o% h" s( E' j: V( Z

    5 x- X$ `; d; ]9 ?) ?) S5 T     4     6
    * E2 R$ F- h3 P9 \! M9 b
    1 E' m: h6 D" @4 k7 {' n8 @
    8 G, z! {( P+ z5 s$ p# i. q8 y1 W  d: S$ B" [8 ]2 e7 S
    >> a(2,2:end)           %第2行中第2列到最后1 t4 E- l  D. G3 ^$ q! \, V
    , z0 e8 r  z6 I2 w# G; e* W+ Q

    % i# l; d0 q' b( H$ z: e4 X+ H- q" `' M+ q& u
    ans =6 |' T- X  h# I4 N

    9 F8 ~- @0 B0 b8 i" ^ ) V( i, R0 ~- T: x" B

    ! |* }) O5 t8 X9 R! E& P     5     6
    ; P. g% |: Q5 U
    8 t8 S  E% U: B' q2.1数据类型
    * z8 M$ n( p! Y* ~4 [2.1.1整型6 }% j* F' W2 x* Q! P" \1 |
    整型从字节数,有符号还是无符号两个方面可以分为int8,uint8,int16,uint16…等,int8表示一个字节长度的有符号整数,用intmax(‘int8’) 和intmin(‘int8’)返回int8所能表示的最大值127和-128.' }( ~" Q/ y& T, o: Z  o, \8 t9 ?

    ) Z9 L& |/ {3 Y8 Y0 d% P) w2.1.2浮点型
    $ B" f# e& V$ ]! Z* ^  W. g6 c浮点型包括单精度single和双精度浮点数double.realmax(‘double’)和realmax(‘single’)分别返回两者能表示的最大值。
    . P# l1 M' R7 [6 c) L- |$ V6 P常数数字默认类型是double: t+ D! ~8 B$ N" m; t# `& [2 a) P
    >>class(pi)
    1 f* J5 B  E8 t: W$ ]8 C6 K) kans=double) @2 c  c5 B& ]% s' c
    >>class(2)
    7 f9 J5 h: @% a1 J7 x. z- ?  x$ lans=double* X; J2 O# @) w

      @' y; B3 w3 U; [2.1.3字符型& m3 Z) O3 @1 W' e9 ?
    1、string=’matlab’,matlab中字符串使用单引号,字符串存储为字符数组,多个字符串可以形成矩阵,但每个字符串长度必须相等。, Y. x, h& E0 m* u" X' R5 R7 H
    2、字符串常用操作:% {" c$ C! ^* e. s8 k
    : X* P" o& e# S
    字符串与数值的互换:str2num,num2str8 [- _& ^1 M. I$ v' _
    a=str2num(‘1234’)结果为a=1234) D4 t' ?8 p) k  k! P
    ! [6 P* x- B  J
    获取字符ASCII值:double函数或abs()函数2 e. t- R3 @' \* E
    double(‘a’)输出97
    . d: q2 q) x& V% @7 z) c" L! P% P( z2 {0 Y6 J8 ]" ]1 z3 D
    ASCII转为字符输出:char()
    5 h1 Z6 G! s! h  {, Vchar(97)则输出ans=a, u8 W1 ?) C" g. ~$ R
      o: U6 A- M) W7 R
    eval(‘t=1’);将’t=1’作为命令执行,结果是将1赋值为t* @& O, Z4 Z. |
    / z, A# P& R, q  u; a
    2.1.4逻辑型8 E, l3 D; z' b, B
    逻辑型变量只能取true(1)或者false(0),在矩阵操作中逻辑型变量非常有用。
    9 [/ `4 L+ B4 g) W1 w+ ^* i5 l, W, i8 N2 _9 _& v; ]
    2.1.5结构体(类似于C语言中的结构体)# ~9 ]- n2 ^1 g5 b2 R' w# A. h1 r3 ]
    创建的两种方式:1.直接创建  2.利用struct函数创建
    ; I" ]8 t5 l4 V0 Z8 c6 y5 F4 n- v& D: H/ j. P
    例如:) ~; o1 S2 `1 ?, }# Z
    : M% P  ?6 e) c' A0 C% @
    第一种:8 u' e7 E4 O+ G/ a
    $ w3 U3 j( j+ X: y6 r/ g5 T2 \
    >> book.name='matlab';
    , q' T4 E/ f' q5 k! b. z* t7 D' H5 F! A: Q  Q+ |, ]$ c, D
    >> book.price=20;, s- I3 ^& L1 Q4 `4 h

    " a3 y" U( {) g( o7 {: b>> book.pubtime='2011';
    : j, R9 L% m  w# A; K  D6 l- \; r" p1 y! g
    >> book
      M( k% ?. I+ \" _; I2 s0 \
      P' m: L% g. A3 `3 X ' f% h) G' B$ R  ~

    . r: g" B2 B' g4 Q/ I9 ibook =2 C# r4 ^# ^! |: c7 V6 h

    ' _/ s8 z5 ], X  ^ , R3 X, ?" J# G7 l

    . a+ D6 g! Y, m& b. f
    ) H' v9 C7 ~9 {2 z. q
    ) ]5 `5 X" f+ B& i字段0 b: |% y( W3 m' z

    : X- p+ j4 d: @  C! f; F  
    2 E( `/ }( d  m/ N/ Y& ?$ q& ~4 U字段所对应的值) V! z* U) T* N7 N+ j' ~9 B
      v8 O) f+ G: i

    . `8 \& F$ Y# |$ ?7 J& h       name: 'matlab'
    7 J0 s2 l6 X1 g. y/ h! T* f' ]
    9 M. r+ V- D8 h% x9 a: S, a/ w: B      price: 206 @+ |6 C3 x/ a. m( I3 y

    1 `: G  O" w0 l+ y' _3 H    pubtime: '2011'# ?( }8 f6 O$ G. k0 ?; I% N

    # q$ K2 J  |: I' y% D7 i& Y, d第二种:4 T7 G/ z, \8 z
    ) h  F  ~; T- g; H4 l
    >> book2=struct('name','matlab','price',20,'pubtime','2011');
    / ^' P7 |8 R! c4 s: t" e
    ! I# W- e: H  L5 H2 G  W) w& b>> book2
    6 J" G) a( e. j4 j5 M" u: Y  e. B8 t! v# v' C

    ( D( ?7 x# C7 Z8 A. o# B% E
    . e4 t- ?5 o/ ^book2 =
    . p- `+ T( c0 U( s+ T- ]; U) A
    ! _2 g' `) c7 X5 B# r
    ; {% `* \' w. X5 ~: m! G8 o2 p9 j* b/ |1 F! R3 e# j; k
           name: 'matlab'( j4 i5 b: R8 _' ]  \

    ' |0 G. N# O6 C      price: 20! k3 S3 W/ r2 w
    ( s! o1 \( J& w; T+ [) y& l6 Z# x
        pubtime: '2011'/ P2 ]. J9 D& e0 k  Y: X4 q
    ' y; r; N* f& E& {- h
    对结构体中字段的访问用操作符”.”
    / e% j7 `5 x# q3 A. ^" |* K* H
    7 F+ v/ [! L# I# r创建结构体数组. p" a% j3 c& c; |, f
    for i=1:101 W1 y/ Y, e  y& E! T* b

    3 I/ `9 o  T' h  H    books2(i).name=strcat('book',num2str(i));& c+ l0 C2 S0 U! T
    , s% z1 d) l: {3 B: q$ Z/ @
        books2(i).price=20+i;& H) K% J  q  [# \/ p
    8 h# p) U2 w' V$ Q% B
        books2(i).pubtime='2011';: [4 J4 j4 n& [
      j2 V1 n. ]6 \+ V9 S8 q
    end% f: G6 H3 ^2 W5 r; K: l

    ' K7 z2 j+ `  o' W. e
    1 C' k# h' }5 t" o  @5 l# ^5 n! {& E
    2.1.6元胞数组(类似于C#中非泛型集合)
    ) v( Q  L. g, @" y! @元胞数组的元素可以是任意类型的数据类型、任意纬度的常量
    + S1 @. C5 F; V8 W# D3 h用”{}”操作符引用元素时,得到的是元素本身的类型,而使用”()”操作符时,得到的是一个元胞数组。. [& D' f5 Y; ^: b4 ]7 u/ {
    3 W+ J$ A4 L9 f, y9 z( a4 }- M1 W
    2.1.7函数句柄(取函数地址)3 V5 X$ I+ o/ z/ n
    声明:1.用’@’符号直接声明
    9 e. w! ~: ], i& X: K' {7 c. K9 L2 \0 D7 l+ h
               2.用str2func函数声明0 o9 }( l, m. X2 H" g
    1 b4 P( g& l4 b2 J% }2 X5 y) F
    函数可以是预定义函数,也可以是用户自定义的函数,声明函数句柄以后,就可以像使用函数名一样使用百句柄了。
    6 M6 D  H  k/ q; a* C3 `8 p* A4 ~. A>>ha=@sum;" e; C! Y, l# c' `$ p& k* N# W
    >>hb=str2func(‘sum’);
    4 }! Y' e6 {- c) P3 `>>functions(ha)       %函数句柄包含的信息+ j' a, W0 ]6 n; M1 C
             ans=) d+ Q$ d5 o' P: U9 i
                      function:’sum’
    9 j3 c4 B0 d2 L) s                  type:’simple’( S! H1 e( M$ ~7 p8 k  x! ]* D
                      file:’’
    , R9 B0 }  u+ Y/ ~3 D& {- y! @. {7 R/ ~3 d6 Y7 u$ K5 y  Z
    函数句柄包含了函数的路径,函数名,类型及可能存在的重载方法,可用functions(function_handle)来显示函数信息。
    ( F5 F5 s# i0 R9 m; l2 V
    # G3 j1 y8 b& z  Y0 g8 a使用函数句柄可以提高程序的运行速度,因为句柄包含了路径信息,系统不需要再每次调用时搜索一遍路径,而是直接找到函数的路径。正因如此,在系统切换工作路径时,不需要将函数文件复制过来就可以同样使用该函数。
    / @! a. Q0 S: N5 m) U. U/ d0 M5 L/ f1 m. J9 H
    函数句柄的另一种高级用法是声明一个匿名函数句柄,他指向一个表达式
    3 `7 w0 @. j- x声明方法:变量名=@(输入参数列表)函数表达式
    5 P9 _$ A# ^$ U>>hd=@(x,y)x.^2+y.^2;4 [- ]; j( u1 s
    , p# O; l3 ]/ [5 ]/ v: l) K  B: n- M0 K  F
    2.1  matlab运算符
    + u) a! y$ R7 b+ x  C7 w2.1.1 算术运算符9 w  d9 G& x( Q$ f4 s7 `
    % C' R$ S$ ~; l" \7 \. ~
    分为矩阵的运算符和数组的运算符两大类
    , [. }# K/ F" @  L( F/ ?6 s2 Z0 t# D. Z, l7 |4 }: C% q+ @9 ^
    其中矩阵运算符将矩阵作为整体,按线性代数的规则进行运算,而数组运算是在矩阵或数组中的对应元素之间进行的运算9 m( r5 z5 F$ I
    & V2 K( d7 b3 Q9 c1 L2 p8 \
    矩阵运算符: k: J! S$ p- h- M% V1 \' y
    - z" `  V9 S5 t* v
    1、+ ,-:加减  2、*:矩阵相乘  3、/:相除
    * a( h" _! o% L5 J. |- G- x) I' _; Z' Z8 f
    4、\:矩阵左除,左边为除数  5、^:矩阵的乘方  6、.’ :转置, I+ S* q% a8 U, {

    , `: @' w: ]4 a. r/ b数组运算中(点运算)2 T: c% k/ U) ^5 |7 f$ e
    1、.*:对应元素相乘  2、.^:对应元素乘方  3、./:对应元素相除   4、.\:对应元素左除' k1 }4 R6 ]+ p( P
    标量与数组的运算,是该标量与数组中每一个元素分别进行的运算。) m" n, Y) `! V* V) W" {  J1 g

    & i- P8 z4 F/ }$ o+ d$ n* Z2.2  matlab流程控制语句- M5 I' d( }% Q8 J$ z
    注意:不要忘了最后的end
    & D* b* I7 Z8 r+ j7 a
    ! W& k  Z. o& \1、if表达式' K- l7 G6 b; o6 p
             语句;9 o& E, ?$ H6 N
    5 W9 e1 P0 G7 o0 L0 [% Y1 G& o
       end
    1 N8 _/ y) B! S! F( \; b+ T! Y; i
    % p. ^8 U1 f( b1 t2、if 表达式
    1 l* Y- V0 \% ~, ~/ n0 c          语句18 h( u6 ?4 T; ?' E
    ! T$ u, ]2 A3 h3 k( o. l; a$ t
       else
    % F& h( M# ]9 m" t( o- F7 ~
    ' a' _& n' v1 W2 V! R+ K3 |          语句2' R- V% \4 {+ W' u6 m8 d
    * Z! E/ V8 w/ ^+ q/ h# W! X6 R
       end" ^0 ^. Z/ D5 m  y: K; {
    . m  w- ^0 T- Q: w( I; S
    3、switch 表达式
    ; ]" G% p" T' {- v! w- K) v% F: S" o# V
                      Case 表达式1" T. I) a) T$ Y9 W% |. f5 U
    ) O0 Y( _% a2 B' O' {# r
                              语句1
    + S% V. v6 d1 I
    3 d2 {- f3 v; @& x                  Case 表达式2) L. k. [1 V& X8 f

    . [: v/ O7 p  H+ M. F4 V                          语句20 @/ F. Q0 Q* u* O& ~! y& p
                      …7 F$ b/ b' Y* J% d  {7 n- P5 S

    9 x4 g! _+ y9 P4 s' n9 s' t1 a4 u                  Otherwise
    1 ^/ p6 K2 l+ p  B' T! c4 [
    % l2 U4 @: b3 y* H& {& C/ |                          语句n" @$ g' r( i1 p$ m, h# c" N' O) Y. y

      a, }% U" z$ {1 L$ x6 V7 Z: h; i  end
    4 k/ Y! B$ C0 m$ X: g: S( Y
    5 F7 [4 O# @$ Y2 H) ~- R4、★
      S$ c% V+ l1 }# D. f) n  for  i=表达式
    % a% G; D2 ?3 J4 f5 l. o
    / ]( j$ ^0 A/ G1 r/ y                  语句
    , t4 r, B7 [5 n. u1 l( R) k# S5 B2 J7 _1 F& k
       end- X2 \* L: g0 U
    //能够遍历表达式中所有的元素& p8 v" C2 [) S4 N/ S( Y: c
       如:for i={‘abc’,’xyz’}  %i为元胞数组2 V' `! B' U0 l- u& K
    & r2 ]' }4 ]" a: ]$ B6 P
                              disp(i{1});" Z4 u: S0 x4 C" r
    " S  u# ?+ W9 k* L% h
            end' _' h# m0 w* R0 ?4 z! Z/ [- y

    1 R2 x6 i* C% Z* I  O: U- {! ~. o                  输出:abc
    & `/ }  ^5 v4 A* ?& F5 }4 k7 P, F7 f* F! a2 G5 a4 [
                                xyz+ F1 K4 M+ c# b8 t
    " T2 h2 \! z# ^: j
    5、while 表达式: C; h4 p/ M: C' k3 Y

    ) @+ p8 e( p* X- e                  语句
    % V% _- r# G; d' `1 U; A% l. N8 B
    - G1 E* u7 V8 l9 m   end" o2 K4 ~/ \* w* x

      F6 {- Z% h$ p; N2 ]" Q" l( b+ ~

    该用户从未签到

    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-10-29 00:20 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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