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

Matlab语言基础

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x

    & c4 h* \' c9 U0 l8 _Matlab用C开发,C语言属于强类型语言,变量在使用之前必须强制声明,而matlab则属于弱类型语言,通过赋值就可以创建变量变量类型取决于创建时的类型,而不需要强制声明。
    8 I, q, r% ^0 b% X( s. v
    ) P7 C: _2 @/ Q关于数组/ X8 p  `; ?, U
    Matlab的变量和运算是以数组(矩阵)为基础
    " f. j6 A. p. \( [+ ]6 g数组分为0 ]- }9 G7 }& N. R: n0 ~9 B
             ●向量:一维数组
    / o& Q( A1 j% }3 f$ m         ●矩阵:二维/多维数组
    : X% y. j( L* x3 J  J4 b         ●标量:1行1列数组
    , ~; n4 O# N. ?2 g* c) g. c* ?" A+ z( C
    数组的创建:1.用”[]”操作符直接创建   2.用函数创建       - G  G* S1 e, V% B5 V% c5 n
    6 Y; Z7 \( @* `4 ^8 v) y
    数组元素的访问(matlab中数组所有下标都从1开始)
    1 W! y( ]/ {5 t* a4 k; b/ ]而且matlab中,下标都是从1开始的- O& t7 v" \& Z6 X/ A% z- W
    有3中方式
    * o( a3 H( ~9 c, p0 K0 i& c         ●全下标:a(m,n…)—第m行,第n列5 D$ s& c4 v! X1 z
             ●单下标:a(index)—在内存中,matlab数组是按列保存的,全部元素按列排成一个大向量,index就是向量的索引。
    2 X+ N% z+ l% d) \5 d* j) i7 `         ●逻辑1方式:建立一个与矩阵同型的逻辑型数组,抽取该数组为1的位置对应的元素。
    * B" v3 p9 U- ]  G) ?9 N& f! V2 E0 O4 ?) h' K5 I
    如:6 ^/ q0 U, D/ G5 c+ A! T

    5 {" Z0 n( z0 J; m% x7 o>> a=[1,2,3;4,5,6];
    6 G) T+ @5 J6 A4 u3 r# c4 m3 |" T! _( ]+ n" m7 _5 W
    >> a(2,1)          %第2行第1列
    ) U, u* b  m; g& [9 }/ A2 d) B. A+ N% g' Q* E; A4 X; K) O
    1 |3 h( {6 F2 P: l

    4 L1 l9 y3 i$ w7 X, jans =
    ! z* F' ^  v( h  s2 t# A
    - F9 t/ e; W; h5 \) U8 [0 s' V/ q 8 S2 l6 ~8 _, o3 W7 f$ g

    7 {- @5 r" V5 ]9 L     4
    $ p+ d! r5 F& H% L- }4 H0 }+ |. q9 M4 V
    ; b; G9 _& C$ _3 b. `' n# F
    0 @- Y' l. u8 q, b' J
    >> a(2)              %第2个元素
    0 ?/ y0 v5 W; \
    4 C* I9 M5 E; P: K ; W9 W6 @6 X- k0 {0 D
    - r5 Q( X/ k9 S
    ans =
    % W$ m6 `) ^# S( |7 f
    1 G: }; l5 t2 F: Y- y
    9 q6 J% B9 f8 o# T
    + w5 X8 z* S8 H7 b该维数中的第几4 B; f- Q4 U' {" t0 s9 K  p# W! w
    9 C' J6 i( O4 e; l) `
    1 g2 T7 t! N% n9 D+ a
      
    $ c2 M" M8 r) e4 b5 ~6 f1 i: i8 J% N4 e& W8 A4 S+ m- t% L
         4
    ) d8 Y+ N/ e. A
    : q4 K; l: O1 h& q & B' \( }0 `& p7 O2 o  `# J1 P

    6 n0 f" V: `/ B3 q1 L) I1 ^>> a(2,[1,3])   %第2行的第1和第3列元素$ F# f+ S, F$ f5 y
    & e) N3 l* H0 e* C

    5 ~- K2 d* q" q% d6 ]
    5 O$ A1 n( p$ S9 t# d& mans =
    4 J( O) Q3 j# Q/ Q
    - C  W; A0 ^/ y0 ~5 T6 V 0 e# Z! x- C- l) G; R+ N6 D

    1 H% E: r7 D. i4 d     4     6
    4 d( e1 c& [1 y! `0 M2 F, I9 F
    % ^0 P; }+ N6 Z& [% B. W8 M" x>> a(:,2)    %第2列
    . w( X* k$ E2 w6 c9 u0 `8 k" u2 N) W; y' U

    # p  E6 G$ f4 B! I
    5 R  d" T! R, \" ^2 Y% f! Qans =, W' m: t( ~/ C' t$ a

    7 d$ h9 H/ t0 A" T5 z * T! f1 S& a5 J1 M) P
    & [$ \1 C; B  f- X3 s
         2
    4 @  b2 o$ F/ l3 m( T0 r" p8 m- C# U
         5
    5 e: F; P* N8 ]
    7 E3 x2 E+ ]- I
      ^# j! c% `5 |5 [5 A# b" P
    6 L: ~5 c, I8 v! M) c>> a(2,:)   %第2行0 P1 F! \8 z9 ^6 _& b. C( i

    " \5 t) F' _# ]# h5 d  O , [8 ^5 `0 c9 r) i0 ]3 Y1 g
    1 V3 [7 V4 t; u. v
    ans =& F+ n6 U7 U$ Q7 |' e# {
    0 O3 q, M: O* T

    + _7 \: [$ h+ S/ m& \# N. m! N& i) q8 E2 `3 S
         4     5     6) h2 j/ F6 P' a) ]3 F! _3 p7 b

    . |' w& R1 R5 ~% g/ h/ u3 x& Z 1 @8 o* M6 o  f  }+ _) ?# R3 m

    " r9 K+ m6 U/ N# `# S) c- O>> a([1,2],[1,3])  %第1,2行中的第1,3行的数据(就是交点的位置的数据)
      W8 T6 t0 J, j, [
    " T9 \8 ?  J: O& Q ' d& v6 `7 b' f2 s  `4 X9 d
    / F8 s$ r  z+ A$ W/ \" t
    ans =) r  C: z' O1 o0 S

    % B; ]0 W. R: F / k; b6 G9 L9 x+ D+ p( i# b
    ! b& _! E, t' ^0 S! L
         1     3
    ; S! x1 V1 y4 ?$ [3 F; _) q" @4 B+ G2 Y" d
         4     64 x7 t* S5 v2 }- C4 |0 v% f
    + O, }8 [" c' N! y, C  {2 T' t
    6 s  Y0 Y' k# D: ^2 [

    ' R4 A* h) [7 f1 _8 ^% P>> a(2,2:end)           %第2行中第2列到最后) W. y8 a+ U$ d3 n2 K9 Q
    3 }5 k/ }3 k/ V' n6 n8 F, f0 s
    ' p3 x9 }9 ?! U
    4 b3 y/ h3 v+ A
    ans =: F& A, z) S1 i! D9 j

    0 H* C+ ~& [; T9 }# D" R7 F
    3 ~4 k) F# O: @
    $ O+ ~6 q5 E3 z1 \+ C1 W& m# _     5     65 J5 J: C9 I! d& v* p1 v; k; |

    - _. k! h, l) y5 ]2.1数据类型
    & `% @* Q' ?9 J. O2.1.1整型- o0 [9 A8 _; }7 F3 I+ q0 G5 [
    整型从字节数,有符号还是无符号两个方面可以分为int8,uint8,int16,uint16…等,int8表示一个字节长度的有符号整数,用intmax(‘int8’) 和intmin(‘int8’)返回int8所能表示的最大值127和-128.
    / P7 d7 U$ X7 r! s2 G5 L" b6 X# f
    2.1.2浮点型
    5 j# B( O2 }; ~1 W! U浮点型包括单精度single和双精度浮点数double.realmax(‘double’)和realmax(‘single’)分别返回两者能表示的最大值。
    / ^8 D) [4 c( c- m- @常数数字默认类型是double
    " ]. ^2 C1 @" ]>>class(pi)
    ' U1 Y$ O( V( \6 ~7 p7 v) N7 ?ans=double
    % l; D# Q. k1 i% V3 M# O>>class(2)
    $ {! [  P6 O/ ^9 `& P* Kans=double
    2 S1 G+ u0 I& J- P( u& y, ^4 Q( `0 |) m4 _
    2.1.3字符型
    1 D5 T/ I5 O. h1、string=’matlab’,matlab中字符串使用单引号,字符串存储为字符数组,多个字符串可以形成矩阵,但每个字符串长度必须相等。
    3 h. L9 p) ^; }3 E6 i. X2、字符串常用操作:
    + E  O, u8 f9 A2 ~" {7 Y3 X# Z& m1 n1 i0 k
    字符串与数值的互换:str2num,num2str+ ], W; s# d4 t+ C
    a=str2num(‘1234’)结果为a=1234+ |. K* y% j8 l9 f7 }( K
      u" n; }, |* _0 h3 Q- m2 o
    获取字符ASCII值:double函数或abs()函数
    8 j+ B1 o2 C; P( {$ C& ldouble(‘a’)输出97* D0 K; e* J/ [7 C) G. c

      c+ W) T  C" {& a( NASCII转为字符输出:char(). \2 @2 p$ A) G; A$ m: h% n- ~: i
    char(97)则输出ans=a
    ) ~( n( ?4 W2 Y: V9 L0 c  V7 _
    1 X( @( e% [& I, t  r, qeval(‘t=1’);将’t=1’作为命令执行,结果是将1赋值为t3 G7 }$ u9 u. L1 p
    ; y& C# z9 {( G, S- b# ]
    2.1.4逻辑型6 ~+ N" }0 k, R- `' h5 q
    逻辑型变量只能取true(1)或者false(0),在矩阵操作中逻辑型变量非常有用。
    + g6 |& F9 N6 n2 k; x' ^5 u; Q9 X+ r$ R
    2.1.5结构体(类似于C语言中的结构体)
    ) |2 W/ K4 z  w  S创建的两种方式:1.直接创建  2.利用struct函数创建
    9 g$ N6 |% v% A! \) h: ~# W! o- J& T* i/ Z! o% N: J! `9 U$ e, ?6 A
    例如:
    9 R+ f+ W0 b- P9 n8 }. J/ }! ~% }- s4 j: D, Y
    第一种:1 K4 U6 `$ d1 ~3 [& x- D

    . ^) l; m9 ~' ^8 D% T>> book.name='matlab';  R7 T: c, W: \! B5 Q  [9 I+ S6 i

    4 w; g$ o8 q& k" \6 n* J>> book.price=20;4 ^; W3 y5 b1 ^: m

    ! I  y; W1 ~) R- s. K; c+ O>> book.pubtime='2011';+ e. S# O8 P  S; ^* Q, ]$ L7 t
    / i  l. i# _: M+ v
    >> book
    . M& {- f/ \) I; D0 b( M7 i) r4 h* a6 N7 }/ s% h

    - s8 o6 Y  x$ g% [6 `1 I9 k% C/ b1 ]4 G4 k. Y
    book =
    . J1 V. G8 c0 w7 S( [  x' L) ~
    % N3 W0 x( R) J0 x  |: _" p" ^$ A 0 f3 C7 {$ X/ s: A  t6 q
    3 M9 K0 r7 C8 n, Z, s1 a% X, ^
    1 C9 K: h  n8 |3 q1 l

    6 T+ ?0 h, V1 C* f" W% h$ N字段
    1 T+ h0 [( p; O6 p; o  W; d* e* Q. F  Z% |7 _
      / e  K: x- D8 Q, d9 R3 [% Z
    字段所对应的值
    - l" o) g4 z$ J: [+ ?; L2 {( ?3 [5 \& i

    3 F6 L( @8 A. K8 d7 o; o1 ~       name: 'matlab'" W1 C) Z- @% F& x  o6 T
    % S+ _' C# p- f* j4 i0 u
          price: 204 p# Q7 Y/ B" l2 ]$ y
    & M* w4 c- O; J& u/ Z
        pubtime: '2011'6 X9 H( J) X' j( q( _

    : t' k! B* ?2 F4 K' M第二种:
    % s# X! u2 E4 w% F4 M5 l! [* _4 g/ d) l
    >> book2=struct('name','matlab','price',20,'pubtime','2011');9 R/ D9 b; V, z8 ^6 t

      ^9 m7 i7 |, x) t/ h/ {) a6 J5 L>> book2
    ; o4 O- M5 K% ~2 L& f- w# r+ I
    + @5 P7 G2 y6 q; P* k & U. [3 q8 @1 \5 l8 F

    4 h. ^" {( V* q5 p5 Z6 P0 u' Ibook2 =! h9 V& m2 S8 F  ?6 S

    + q+ d: c! D, r ; D. H. l' X0 u1 k* n: j2 k

    1 _4 Z0 Z! i, S1 s! k# p       name: 'matlab'
    6 f  R4 h$ p7 B0 l. D
    / ~* I% v# E( j. F; G) T2 z; `& O5 R$ U      price: 20# @" U/ ~4 Q: |5 x

      g9 T3 C) x. N, G: i6 [5 b    pubtime: '2011'
    / }& A' I& {, ]/ f! N( a+ i1 ]! d9 {8 k) ^( _
    对结构体中字段的访问用操作符”.”
    5 o+ l3 `" q+ K6 K
    # @* l) j9 w" G创建结构体数组
    # i& K0 X1 n& x* f$ n; e" U' Tfor i=1:10
    " ^3 `, i$ l+ u8 c. {3 H
    ! `4 x% L! O1 J( c$ v    books2(i).name=strcat('book',num2str(i));
      j# d+ A* k( J* M  _- v
    ! n* f9 b' s8 x  y$ y    books2(i).price=20+i;! z9 [: e  y% W8 `- v: w

    & q2 E* y) Q  I: _9 R; T    books2(i).pubtime='2011';
    - K! h* j2 E+ a1 R1 u
    . d! m4 m, }9 B7 A3 j% nend# P6 k& T" e+ c1 M3 D4 S, e# e
    % t5 {- H$ D* L3 L0 ?1 v
    9 h/ g, S* y) G" h
    . r- z2 o8 d  H" Y1 @+ z
    2.1.6元胞数组(类似于C#中非泛型集合)% `" x1 P0 n1 Y) q9 Q4 c: ^: W% \
    元胞数组的元素可以是任意类型的数据类型、任意纬度的常量, ?. D7 Q) s2 d+ z& [" }2 |  v
    用”{}”操作符引用元素时,得到的是元素本身的类型,而使用”()”操作符时,得到的是一个元胞数组。8 |# u5 Z0 c9 o# V" C

    # x. j* [0 p! {  _2.1.7函数句柄(取函数地址)% W9 S7 N( w- y. T' y8 E( |
    声明:1.用’@’符号直接声明& ]" w$ z+ A0 \( p( B# P

    2 g/ L" [+ V3 U6 G& I8 Q! f           2.用str2func函数声明
    9 a1 o2 B, a$ N
    ; `; H+ E& k2 p7 F! d( ]函数可以是预定义函数,也可以是用户自定义的函数,声明函数句柄以后,就可以像使用函数名一样使用百句柄了。, ^6 b$ d6 Z+ K+ y5 n  ~7 z2 e
    >>ha=@sum;
    0 t8 @; t& R) _& l1 B>>hb=str2func(‘sum’);
    8 L: Y9 l. J) g0 }7 m>>functions(ha)       %函数句柄包含的信息
    ! G; a4 K* g( f) v6 I& h         ans=
    - O; P" B$ x& h/ X8 O; {                  function:’sum’2 ~1 l) \6 i; W+ `
                      type:’simple’
    % k1 m* x  R/ z5 G2 G                  file:’’
    9 C7 z* X8 F2 a$ T9 L) D6 K! @* \+ m+ F/ C
    函数句柄包含了函数的路径,函数名,类型及可能存在的重载方法,可用functions(function_handle)来显示函数信息。 - I! c" M' X: B# u' z4 G
    - c. C* l+ v1 a& Q; u
    使用函数句柄可以提高程序的运行速度,因为句柄包含了路径信息,系统不需要再每次调用时搜索一遍路径,而是直接找到函数的路径。正因如此,在系统切换工作路径时,不需要将函数文件复制过来就可以同样使用该函数。3 `1 o: Z0 M( j; A% y

    * Y; i0 e/ H5 E! f- D0 C函数句柄的另一种高级用法是声明一个匿名函数句柄,他指向一个表达式! I' j. x( `& O, Z+ s. G+ @
    声明方法:变量名=@(输入参数列表)函数表达式
    * U+ Z* t8 k! v& M6 s+ h>>hd=@(x,y)x.^2+y.^2;2 A6 j. ]# ~- K0 w. ]- y: t
    3 [* ^7 `8 o% ?0 `: p
    2.1  matlab运算符) w' V2 b  p& ^7 H/ a
    2.1.1 算术运算符% C5 Z9 j, s. H0 w

    $ f& z2 O, h& V, N& Y分为矩阵的运算符和数组的运算符两大类
    ( H& g# i4 W4 u! v7 R1 ~
    8 m- V# v, N& {; {其中矩阵运算符将矩阵作为整体,按线性代数的规则进行运算,而数组运算是在矩阵或数组中的对应元素之间进行的运算) Z# d7 ?, B% }
    * g* J& K5 ~& ~
    矩阵运算符/ c$ s4 Y! ~9 c' L! V) G

    0 i# g0 P1 A) h5 W1、+ ,-:加减  2、*:矩阵相乘  3、/:相除0 ^& y( x6 X( r% ?+ c
    7 f6 G3 L' Y7 B
    4、\:矩阵左除,左边为除数  5、^:矩阵的乘方  6、.’ :转置
    * W1 U! s. ]3 r' V' P& ~2 l" f: v9 v2 {+ H+ A; z9 i
    数组运算中(点运算)4 \; v% \' H5 w! o, ^
    1、.*:对应元素相乘  2、.^:对应元素乘方  3、./:对应元素相除   4、.\:对应元素左除
    ; @# p4 U% E, p; D, m3 a标量与数组的运算,是该标量与数组中每一个元素分别进行的运算。/ R: X% h8 D) e5 h& B

    0 Y: U% T; ^* M6 W* L5 t4 n2.2  matlab流程控制语句
    / [+ t8 b) h! N  y4 E注意:不要忘了最后的end
    0 b5 t9 ~  W9 o+ n0 Q0 b( ]1 }' Y6 K' w& k5 i7 _
    1、if表达式$ A9 ?3 s" X! n
             语句;
    ; c( I8 ]( U5 T! y6 y6 j0 ^
    8 R# ~$ ~9 Z9 O- }. H5 {3 F* e2 F. d   end1 i6 n' d! J- H- }/ L1 I  Y, s

      A( G2 f& O) h2、if 表达式! w9 F" ~! x& c$ J% M/ F
              语句18 p' v* L/ ]7 D
    & Z7 v+ v4 P% |3 m9 L& j1 p  B" t2 v$ }
       else
    6 N6 {: b( L( b8 o9 t( U2 f
    1 P) I# j& m6 l* k          语句2
    4 b' }. w: I3 x( y& i
    7 |, V* O5 w, m( [  P   end
    % f# o2 n+ l6 v6 B5 v6 Z( a; Z9 [# t+ N5 F
    3、switch 表达式, e& Y6 H- o7 A6 [
    1 B& h# k/ g* Y- R7 y' M
                      Case 表达式1& c5 H  t+ `  @
    " b; F) j2 A' `. F) ?
                              语句1
    , m- Q, u7 {8 P% H: s" x. F& o1 P2 @9 O  A/ G- L
                      Case 表达式29 u; @, S3 ]- V+ G/ j. {' B0 q

    9 b- Y3 P9 M; l. K& x' z4 l                          语句2& {1 W! Q# `& w
                      …
    4 R: v1 R# e4 H$ A& B0 \" a7 k3 x/ i+ M+ a2 x6 c- L
                      Otherwise
    ; ^$ ^' ~2 Y% {2 }2 Z6 ^( p/ W. R5 p0 l& Q$ }
                              语句n
    , c/ \& q2 B/ [6 ?$ i6 Y4 Z2 I- H+ v  \" \
      end
    : l; Y/ m" Q  u: |& A/ T0 j! e
    # y  J5 S, e# v. |7 m/ `9 Q, g4、★. A; h: V  @0 W+ N
      for  i=表达式
    ! @3 \1 Z! {; y; R1 ^8 H
    + j0 o5 L* F$ J                  语句
    / P9 o$ S' W, f
    3 B4 Q6 |/ n2 o: i! u   end7 m3 H6 L% C0 A4 A6 A4 D
    //能够遍历表达式中所有的元素: n. v+ v5 {0 ^. |6 ^( s
       如:for i={‘abc’,’xyz’}  %i为元胞数组
    ( [$ T* ?, o; C2 b, c1 h6 \" N/ Q* z
                              disp(i{1});
    ! I0 F, @4 h( h  n) A% m7 H# `/ a' F& Z6 B. d
            end
    4 o+ z5 l5 _  v' p( o6 q8 {: `) H: m7 a. D( s+ Y
                      输出:abc- y$ N0 b) }9 H3 V( M

    ( I1 {' p( b8 k5 s                            xyz
    , N1 O7 F* c5 l' X: @% n$ [- Z
    / y/ p. p0 U/ R5、while 表达式+ G+ c9 p% }' M7 A- J8 b

    + K/ x$ `5 z% b, z* p: w1 m                  语句
    + _( T9 @+ l6 A! P: Q( k" r
    ( ^9 x5 q  ?7 D+ o( L; Z( g  q   end. R, W& H$ F! T9 E* \; k; X6 N
    ; \! L. T4 R% @' K6 U4 S, k

    该用户从未签到

    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 16:46 , Processed in 0.171875 second(s), 23 queries , Gzip On.

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

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

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