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

Matlab语言基础

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    ) p" q$ i! u9 T9 \! H
    Matlab用C开发,C语言属于强类型语言,变量在使用之前必须强制声明,而matlab则属于弱类型语言,通过赋值就可以创建变量变量类型取决于创建时的类型,而不需要强制声明。
    / l" `& W4 g* T% S' L2 ?& X1 a! M4 j3 f4 x4 P0 z( Y: d9 k+ `: z  X" ]
    关于数组$ H8 x( K4 m, [5 j
    Matlab的变量和运算是以数组(矩阵)为基础7 o) ~4 H' O2 l+ D, U' }+ H8 X
    数组分为/ i. @5 G- U* K2 ?0 d
             ●向量:一维数组
    ) [+ J7 Y& y9 r' _         ●矩阵:二维/多维数组
    & e) @+ Y9 c* k* [9 d5 s* e" p         ●标量:1行1列数组. D2 H: A* h& v- e' A% F1 y
      S5 [; _9 c% [( e' l- k
    数组的创建:1.用”[]”操作符直接创建   2.用函数创建      
    1 W& Y; Z. B1 ]
    9 h& `" |; c3 w+ K数组元素的访问(matlab中数组所有下标都从1开始)
    ! d( W( `' f. Z+ F" \而且matlab中,下标都是从1开始的, }5 w6 |/ B! U. f0 T4 p& ?
    有3中方式+ Q4 Q0 L$ Y" @' o( Q7 j# N
             ●全下标:a(m,n…)—第m行,第n列
    * P; u& M: X( i: I         ●单下标:a(index)—在内存中,matlab数组是按列保存的,全部元素按列排成一个大向量,index就是向量的索引。% p' m" i% K  b$ U7 v3 G) b
             ●逻辑1方式:建立一个与矩阵同型的逻辑型数组,抽取该数组为1的位置对应的元素。
    . ^3 i# r1 C% A9 G8 v' V
    % J/ M0 W% w3 }/ F如:# q/ l4 S' ?0 Z8 L& e2 p3 a

    7 L; _# `! @2 d$ C4 @$ ^>> a=[1,2,3;4,5,6];" d) e4 Q3 o+ g6 N! P$ N( q2 W9 P
    ! v5 o" Y5 {3 s' Z" d6 P  O3 u  y
    >> a(2,1)          %第2行第1列( ~" T% Y' H3 a6 E
    6 J) i' R, P  }8 e
    2 c" _/ t, p6 Q) _
    ! k8 B: A! J! }$ }# J
    ans =
    5 ^( E5 A/ F5 y% T  W
    0 }) i5 X0 [0 Z$ r* E
    3 h0 `! N1 ]6 w8 d) y# f: W: |/ @% ]! u& ]. j
         4
    ( S$ k: @4 Z/ c/ m) b
    5 q% g# S$ l0 ` ( h. V4 B5 R3 v

    4 F1 h  M0 p/ O" h8 H# g+ V1 i>> a(2)              %第2个元素
    * q  S* ^: u3 w( B" b8 K& g! P8 n6 t$ O- N/ j

    1 y4 U  K' F* u0 o- O2 e7 ~: L! T9 R. X6 [3 w  c4 Q; W* w) |7 B
    ans =
    $ w7 m% A4 k' y4 D$ z( A3 \  H6 W4 J/ p
    7 R0 ^4 m/ {) ?

    9 p# t8 {( Y2 R& K该维数中的第几0 U: W; ^  q/ m( @  ?
    , i! g0 ]! X3 w# i# L6 Z

    $ F) n7 {- O" |" Y7 E9 O9 @  " R4 C" W9 o2 I' ]
    $ j! [3 J* K5 x1 L4 a
         4" t1 U" y4 R. i8 t

    ) d! o" F/ y; E
    . L7 y9 z. Q. b
    & p; X# a% F5 o9 f, e>> a(2,[1,3])   %第2行的第1和第3列元素1 |$ P, ^: R, _  Y7 a, G+ V8 F
    9 z& u; n. X# P' {: J7 e
    % @) q# p: P' d/ B. m3 _9 {

    ! ^) e6 e" M# J3 M+ Nans =* k0 [3 Z; l) }+ p; W) F8 ?/ s

    $ b$ H( b" ]1 x: F, T; L
    7 c6 F, i7 k/ m6 B
    6 W2 K$ x1 z8 ~4 `) p& L* J. g     4     6
    & |& @6 N/ ]7 G: Q& V: {% i8 u' a* o" M" X  [1 B+ P
    >> a(:,2)    %第2列) k/ l: \8 ]* O) t" k3 x
    * `0 Z( d, L8 R6 k( f8 S$ N

    5 W6 e7 b( M  P1 s( C9 v1 P
    8 v) F3 c* r( W( Rans =
    9 q0 k3 w; ]  I# J" r' X  G7 y% y* X1 [( O, B* A  }

    5 N3 l& w! S# J2 |6 n7 P" ]) o- P# E; N5 O
         2  l4 s& C, h; ], `3 D9 Z

    ; W' T7 j7 W  V" P' l. P/ z     5
    1 H# n- L' c0 q5 |7 c: m3 M; \2 W$ v# c& i2 c8 T
      v* M' b* a: P- X8 u- Y
    , l/ \% n) `$ _( u/ {. e, h; b
    >> a(2,:)   %第2行
    6 o8 z+ W1 `. p( n" d
    2 w8 `9 Y/ k5 N( J # q6 L( g% Z- W* D
    1 Q8 x2 N/ G( f: ?2 j' |" p) R6 E
    ans =
    & {- T/ x0 Q; ]$ I
    + l2 X4 J6 Z6 m , I( m8 g% L6 a+ h3 Y% ?2 v

    . n9 t- s+ Y! ~8 s5 C     4     5     6- I- E4 i, f6 c0 [* j! z
    7 ~! N$ Q2 d+ A
    , o+ l6 v) v0 R7 d
    2 |; O+ u4 |( @1 R2 k
    >> a([1,2],[1,3])  %第1,2行中的第1,3行的数据(就是交点的位置的数据)# F* m7 w  r/ k/ }0 b( F
    + b: F, ]( y# h2 B+ ]9 W/ t

    ( A9 }! s3 P* _0 h9 q. z1 {) [# z, l' F0 S' j) C
    ans =6 v# N- x- ~0 B/ M7 A

    + k2 x' b! ?2 A 8 w: [! g1 N* j1 Q

    : e- S  K2 ]5 e% V9 B" i     1     3" x$ K. W* M# s8 V

    : J1 o' w' H2 c2 n' Y/ S4 g     4     69 ~, r* c6 I, a9 {4 j* q
    ( l) D/ d% @4 b4 R: T. }1 b

    * H4 \+ h0 F/ e' S3 r( b/ W
    + Y2 b  t) l& @1 Z>> a(2,2:end)           %第2行中第2列到最后
      x0 b9 F% `  h+ u: j+ {3 N* V1 }4 A0 S+ E

    1 z1 F( A( G6 @4 U% P
    . x4 |  ~& h- `! p( Bans =
    4 S! r- g4 O  F# f* }8 s; K& [2 ~0 e- z" b0 H, J  x# t

    ; l' g) U: m1 }- \
    ) @$ f& @$ ^% L     5     6
    8 H6 ^1 j$ _4 w% w: a! U7 y" q$ h4 V- D( M' f
    2.1数据类型  ]# S* c$ w; y7 C3 e  c! F: z
    2.1.1整型& F6 o# z# h' ~" ^( ?. r
    整型从字节数,有符号还是无符号两个方面可以分为int8,uint8,int16,uint16…等,int8表示一个字节长度的有符号整数,用intmax(‘int8’) 和intmin(‘int8’)返回int8所能表示的最大值127和-128.% B% C- X" ]8 `9 E( |6 f

    , I$ M( \; c) F: v2.1.2浮点型$ r6 }# V" H7 @
    浮点型包括单精度single和双精度浮点数double.realmax(‘double’)和realmax(‘single’)分别返回两者能表示的最大值。
    / _1 Z- y, c; c; y常数数字默认类型是double
    2 H2 ?: d: }1 q+ o>>class(pi)! W6 H: [* }+ X; ~+ k( _
    ans=double
    & M6 W* \  ], o! K7 c3 a>>class(2)5 ^! {& n5 a; U/ I
    ans=double3 q' j% I9 ]2 t: t4 s
    # @* ~4 y; N: f$ n6 v
    2.1.3字符型
    * n- q' F4 M$ s, e% i) h1、string=’matlab’,matlab中字符串使用单引号,字符串存储为字符数组,多个字符串可以形成矩阵,但每个字符串长度必须相等。5 w0 g2 T! D' f' M; c; X
    2、字符串常用操作:0 \% G* w9 w2 h  {7 {! Q+ D

    / T# }: J# R. W+ N( c+ \字符串与数值的互换:str2num,num2str
    8 \9 o$ l" e0 {1 s% m  L5 ta=str2num(‘1234’)结果为a=1234
    / C8 j; h: B0 T, B3 y- R! W
    8 u+ d, j$ s6 j3 G, z2 y' ~8 D获取字符ASCII值:double函数或abs()函数
    ' L7 _! w8 [2 e; gdouble(‘a’)输出97! d7 O: @" b$ |. l( [
    ; u/ Z' z( ~! Z( E
    ASCII转为字符输出:char()$ d0 o! A- h8 m" H
    char(97)则输出ans=a
    ' j8 c. v, G$ V+ b: C+ V" b  y& t! D3 e! \$ P
    eval(‘t=1’);将’t=1’作为命令执行,结果是将1赋值为t
    ' L( W5 \1 M* C1 L* V$ l+ V- g0 v
    2.1.4逻辑型
    ( @" w- ?$ L2 D, |' A逻辑型变量只能取true(1)或者false(0),在矩阵操作中逻辑型变量非常有用。8 }* N! L7 q8 k( |- d" b) Y: Q

    2 E& }3 D6 z* Z' V/ ^- J2.1.5结构体(类似于C语言中的结构体); M6 F6 ?* n9 u, r9 [% _
    创建的两种方式:1.直接创建  2.利用struct函数创建
    % |7 X+ |$ i- v! m  o$ d& N' z) @/ M* J! s7 s, Q
    例如:" J6 x+ X$ J. l

    7 [7 R6 o& e/ E/ b, b( g第一种:2 Z3 E* c6 u0 H6 a8 S  v6 J

    5 p" v* r0 i. }9 }>> book.name='matlab';4 M8 O. h. {, g1 p/ l& I! f
    5 H9 `, c6 x/ V' w
    >> book.price=20;7 i; ~: n* Y: e/ o4 D! s1 P
    1 b  {& l! i+ }. z" q
    >> book.pubtime='2011';
    ! J1 N+ T) ~$ y8 E
    3 R. n6 n" T; q' m7 G>> book* X- c' V. y7 P1 m7 Z9 n9 B
    + k0 m3 ~. \' ?( R; X
    . Z( X8 g6 k) Z& c; P$ Q

    + B! E; T9 {/ `; a2 r) x# n9 Bbook =5 s+ l9 [) n/ r3 f* z9 P! c0 T
    ' S0 O: F% [* q- Q' C5 D' R0 |

      G6 g9 V, c9 R5 _
    ) v$ e0 w9 P6 v- ]4 X0 d8 k, n# y. u" q# j
    ! ^* M: I5 ]4 h' N
    字段. s5 e% E/ G) r) ]. R) m0 \! S

    & R4 a: ^. s" ^! r  0 v5 Y; J% Y) Y% s
    字段所对应的值# c# R" w6 I, z0 Q7 U' }

    , `) B8 J( B. A) z6 E  }
    ' H+ z# y5 e( m8 d  g+ o+ Q       name: 'matlab'* @  P' S0 u2 b# \

    ; T7 P( v) E: S      price: 20
    1 F$ D! i- X& b' }8 b; r
    - q! x* Z# _8 ~' r3 @7 J    pubtime: '2011'
    5 s7 p  B. z$ u$ F& i5 w
    6 x$ [6 E4 M- T, k; _第二种:
    1 k8 V: B: ~' o! m. p6 m3 g8 i  S# L0 I3 g  A" G5 `" i" l
    >> book2=struct('name','matlab','price',20,'pubtime','2011');
    7 v# O( d3 Z! m+ W/ L! w8 |1 c2 a. b5 D4 W4 M
    >> book2' p$ w* a- {+ L3 E2 j$ |

    4 i# L1 ?6 W: n8 T8 o ! D- s% e  i4 c+ ~+ O

    $ r; a, ?0 a5 L+ [9 u2 hbook2 =
    ' g' V, T0 d1 K6 {2 I5 [8 B6 D& W3 \3 Q* O4 p5 r0 `4 l
    ; d2 V" z$ X+ E$ j7 t6 F; D

    ; {7 v6 F) [; Y9 S4 P3 W+ c7 _       name: 'matlab'% q% {  B9 z3 U. G

    7 R9 _1 U$ P# h% F% `      price: 20
    6 @* u* M1 h" v# j' Q7 J( [: C. N0 K2 N" z: S# k- L, |
        pubtime: '2011'
      U! H. Z( h# i# D" B& w
    ) x, j7 ^8 C3 T对结构体中字段的访问用操作符”.”
    9 V+ Y$ j" k% h6 v2 l1 }# d9 s% j. ]8 V* r5 z1 J8 ^; R
    创建结构体数组7 G" X6 g0 H% F
    for i=1:10& L, `# G$ J! f

    , Q( ]" [, I, g& y0 d7 a* |    books2(i).name=strcat('book',num2str(i));0 D! y8 O; z% J0 `' k. H

    $ h7 y; ^( T8 }9 X; J    books2(i).price=20+i;! B$ u0 l( b# \5 {7 \( B. s: R
    # O" B2 \$ C+ }- {! }, S
        books2(i).pubtime='2011';
    ) R4 R9 y' f* i. t9 M. l6 t; @6 \
    5 t! h  o5 Y8 l9 _end" H' ~& _$ U7 A, S

    ' `" E7 }7 y6 u3 Y# j+ W7 Z
    " D  z$ R$ B& }+ Z& {* B  l5 \, @9 E' H+ ]# r( z2 E1 {
    2.1.6元胞数组(类似于C#中非泛型集合)! ]) e: B. B2 G; |* R- t* w0 @& I  ^
    元胞数组的元素可以是任意类型的数据类型、任意纬度的常量
    4 L1 e2 m; F2 F4 J  O0 V% Q用”{}”操作符引用元素时,得到的是元素本身的类型,而使用”()”操作符时,得到的是一个元胞数组。
    3 x/ S! D0 t3 c- h1 X& ^, O
      E* K% N! O3 K- t3 v2.1.7函数句柄(取函数地址)
    $ l9 b& `% J. u" o# a! x声明:1.用’@’符号直接声明' E# g) a- I, p

    5 K/ j  a+ E2 Z           2.用str2func函数声明% d9 @. m* R  V9 z6 g* g# O: T7 O1 d9 q

    2 F* i) [1 h# k: ]7 l  N" Y函数可以是预定义函数,也可以是用户自定义的函数,声明函数句柄以后,就可以像使用函数名一样使用百句柄了。; s4 F/ l; ]% G& A& n/ ~
    >>ha=@sum;+ c, Q* P& K8 m0 C+ L
    >>hb=str2func(‘sum’);, l; G. I% D) e2 T3 A6 c+ T/ V
    >>functions(ha)       %函数句柄包含的信息
    * n; \7 G' N; T' f         ans=% Y5 ]7 m- i1 d, J+ s1 t
                      function:’sum’
    / k5 A) X. C( l7 a# |' G                  type:’simple’. p" s# x4 J8 N6 w
                      file:’’; o7 V' {5 X) V* s2 X+ C, F. c

    , U. H( r3 v. b( n+ y' d函数句柄包含了函数的路径,函数名,类型及可能存在的重载方法,可用functions(function_handle)来显示函数信息。
    , W" p+ x+ {6 g- r4 ?1 Q
    9 R  Z8 w  L) g  s使用函数句柄可以提高程序的运行速度,因为句柄包含了路径信息,系统不需要再每次调用时搜索一遍路径,而是直接找到函数的路径。正因如此,在系统切换工作路径时,不需要将函数文件复制过来就可以同样使用该函数。
    ' p# c! n- K7 B" _8 H9 _) u1 b7 z- ^8 c
    函数句柄的另一种高级用法是声明一个匿名函数句柄,他指向一个表达式
    # w8 U. E- {- R# ^声明方法:变量名=@(输入参数列表)函数表达式
    4 ^: i* x2 s% ?& o! j1 M. T$ L>>hd=@(x,y)x.^2+y.^2;
    & ^6 }' Z) v- ?2 e# m! f1 {7 O
    % O0 z0 N; ?. r" d0 J- u2.1  matlab运算符2 i1 w; k: X$ k+ [# n6 _7 z
    2.1.1 算术运算符
    + {3 _* N$ X) ~3 X/ v# h+ [. t  p, g5 A( k- Y2 _
    分为矩阵的运算符和数组的运算符两大类4 o% ^7 k/ E2 |/ ~4 R

    5 y9 k/ w2 z1 ]% P* d) @其中矩阵运算符将矩阵作为整体,按线性代数的规则进行运算,而数组运算是在矩阵或数组中的对应元素之间进行的运算
    1 s5 {8 {1 I  p  y+ S
    1 O$ `  v, I: D$ f7 M6 V矩阵运算符
    9 x' h$ S; V0 i8 m1 B4 r/ W  @1 Z) z! R/ ^( e! T7 s3 W9 J
    1、+ ,-:加减  2、*:矩阵相乘  3、/:相除
    0 {0 c( Q) {, E+ A8 h# o% W
    ; s' K+ o/ q& @4、\:矩阵左除,左边为除数  5、^:矩阵的乘方  6、.’ :转置
    , c0 `1 k) @5 j- z, x# y* F( ~; L% v2 U0 h
    数组运算中(点运算)
    , f3 B$ L5 m4 E; J; \0 G& Z1、.*:对应元素相乘  2、.^:对应元素乘方  3、./:对应元素相除   4、.\:对应元素左除/ ?$ U. ^( [; k4 i, ]- ^
    标量与数组的运算,是该标量与数组中每一个元素分别进行的运算。
    8 B% e) W' S& \
    5 K4 A8 h' E% N8 M2.2  matlab流程控制语句
    . R7 ?6 E7 i+ [注意:不要忘了最后的end
    $ d, Z: c. ~) v
    2 G; x% u! j0 K# {4 a1、if表达式
    . E. Z8 s9 Q, A. G' W- V% @/ V         语句;
    . U; U  }, z& A2 D7 h
    + Z4 b: v! p& q$ T. b   end
    0 C3 N, w/ |" ~$ m4 O  E/ H3 R
    # n2 e* g( F4 I% J( x( L2、if 表达式" y% L6 J: I3 t5 w
              语句1
    5 I5 L/ B8 T1 `: a0 {; |/ C; `# o/ E& G4 ?( i8 d# n; d) |
       else
    ; A. N. {8 ?' e. G2 c# E9 g$ C  T# @
              语句2
    & Q5 t1 k. K! G5 h! A$ U% p5 n, j, U+ X5 G' A
       end0 u. P  j, @0 n  x9 {- a* B! L0 ?' F

    * C' V* E: W* Z2 j6 O* B0 H: m3、switch 表达式
    : U$ b) _- s3 E) D( |* Z: w; M7 n0 W4 V: `" ?( C; r  R
                      Case 表达式1" X+ S" E/ L- L& g8 G  O! s

    / q* B# S) u0 ^* W1 B                          语句1
    $ x. @$ I& n2 O) O/ w2 U* p; f9 M1 K
                      Case 表达式2
    + e+ M! ^  M- v4 L5 ^7 y/ B/ Y/ F
                              语句27 i* f0 s: o  J& ^
                      …- {* ?0 \  ?8 c- [& d) \

    7 K, X1 Z0 _' z3 M+ N                  Otherwise
    0 ~" O* g0 r8 E1 X, r- q7 o. g! `! D4 }. ~; b
                              语句n  H) H/ K; ]8 M: X* l
    ( U* f# ]( Z, V: V: b9 {
      end
    7 c* p+ W4 e! w% U! {# t
    ) ~0 u% y' x, l2 @  j, I' A2 b) g4、★2 [) z/ p8 W" f" E) S
      for  i=表达式
    ) n3 }8 j- `6 f! n) ^6 J) Q5 M# C1 f+ j' V2 ^% c" i8 j4 q
                      语句* t7 v; U! X6 {9 ^
    # ^3 \5 i% S0 f3 T8 ~
       end
    " f. k6 \2 ~! x) z, M* s//能够遍历表达式中所有的元素% l& v. B3 a5 H" Z" P' Q
       如:for i={‘abc’,’xyz’}  %i为元胞数组
    : f0 [$ ]+ r9 |  ~; L! ]& e1 w% `# g1 j1 U0 ?; K
                              disp(i{1});. y* F! i. l- C2 L2 C

    ) C/ C+ J( y" z4 R6 E4 m: A% v        end
    1 g: h$ n( ^6 z) q& f+ K# L8 s! g; c- }
                      输出:abc
    5 d4 D$ F' G9 n$ i  q$ x
      x5 ]' u7 @8 g) U9 W8 l* j) ]                            xyz
    ! R- q( V( s( p7 B1 z' r& c+ S8 g  q. R+ F
    5、while 表达式
    , F! |  F) _6 C6 {- X3 ?. `, K1 s9 d
                      语句9 C0 d1 Q% c0 b. v% s
    5 {* L, \9 _3 V+ q7 g7 E- e
       end! _. b+ O& p  k3 e
    # N* |# I* m% _, i* w5 N1 A) r# t

    该用户从未签到

    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 18:49 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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