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

Matlab语言基础

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    3 v1 {' J6 c! ~4 ?4 n
    Matlab用C开发,C语言属于强类型语言,变量在使用之前必须强制声明,而matlab则属于弱类型语言,通过赋值就可以创建变量变量类型取决于创建时的类型,而不需要强制声明。
    ! a& I4 U; y0 A, ^# X# U5 B# H
    : i, h' ], @( q+ m关于数组
    # f9 U0 w$ X/ F+ |  Z/ NMatlab的变量和运算是以数组(矩阵)为基础
    : w* [+ Z- C1 {数组分为
    ' l/ T1 z6 |( J( _1 q         ●向量:一维数组
    ; }: r, |6 j) m         ●矩阵:二维/多维数组6 V) X4 y0 l8 j. H& \$ I. C
             ●标量:1行1列数组, A4 S- V. |+ ]7 E7 n1 K( s1 d

    ( O7 A' p/ R0 y  `# r! ~4 T8 a, e& _数组的创建:1.用”[]”操作符直接创建   2.用函数创建      
    , i* u# `$ V  ?1 {( P: t0 L
    , B6 T; x- S+ [) C4 Y! J数组元素的访问(matlab中数组所有下标都从1开始)
    6 V; v& f0 c5 W  F. w- Q0 s而且matlab中,下标都是从1开始的
    # v2 H4 `9 i5 R9 x- w  I7 p  o有3中方式0 ~2 `# U$ c7 F
             ●全下标:a(m,n…)—第m行,第n列& b; W; |" _+ o3 I
             ●单下标:a(index)—在内存中,matlab数组是按列保存的,全部元素按列排成一个大向量,index就是向量的索引。
    * o" q+ J4 J& ~8 h- x8 W         ●逻辑1方式:建立一个与矩阵同型的逻辑型数组,抽取该数组为1的位置对应的元素。
    9 I0 X9 y' K" j/ Z9 w5 z; Y: f$ R+ Z5 S! \
    如:
    $ s+ @8 J5 F  \) b9 O
    ; E( O9 i1 q( V( A0 H>> a=[1,2,3;4,5,6];
    8 e3 [3 w6 j4 l( u7 r6 R% u" Z# S: J5 L0 L2 V
    >> a(2,1)          %第2行第1列2 y6 G5 L) p7 ~- H. V! L

    ( q! d7 x. Q: Q" }) u 3 g8 L8 c( E' q9 _- G8 }6 _
    , K! B) r. S7 ^
    ans =& W  R6 H# s) j) r' G* v

    5 m% o! O6 ~! v$ `- z6 H' b # O3 K6 d# R) {8 {6 w8 j

    . W# O* d; m: V- e2 {     49 q$ X; e: A4 j/ t6 u' J
    2 U! p' ~: C8 o, n3 S' ^# t

    , S8 C& n4 C% H% ^  s0 ?( z! |% j# o' H: l
    >> a(2)              %第2个元素8 \3 O4 ^  D# B* R( h

    " N, X( ?% I- g, d# {, i$ A6 u
    7 r4 j, g  V  p( }6 @0 |
    / w: T! T0 x' D+ Tans =# @3 R6 I: V3 T

    1 n& W$ J) x" \' S: m6 N
    . k6 u5 s2 L0 Z6 D6 n& ]$ s* k' g" K6 b: N% [) _' c- L
    该维数中的第几1 Q: R" q' h" B
    5 Y  U( p# m+ [# l& W
    ; L# t1 n( ?% V9 P6 A& H
      
    ( R/ t" ?3 ?( _4 ~. P
    2 q' v5 }3 C* l8 ]# L( n  h! V' q     4
      d9 M4 b3 L7 z( L* l3 o5 v7 E; [; B$ I% L

    ! ]" B$ u- t" s* c# v
    7 h+ h5 t; e3 H( P>> a(2,[1,3])   %第2行的第1和第3列元素
    7 [. P' K" k- M0 E2 b- Q1 s
    ; d9 X/ u# c  h* _) h7 E   S/ U* Q% m' Y

    5 A! l; }: B" D& K1 }' Lans =/ I. d) y. S' ~/ ?) D* ~
    $ i9 g% U$ i' {

    2 ^2 B- ^  H, ?1 l' s' N. }6 p
    8 ~" O9 \. H5 I6 r6 a! I: d     4     6) z2 N7 @# E! z9 g/ v

    + i- g0 d" G% P>> a(:,2)    %第2列
    9 z! [. y: d. F5 N) _
    9 e; a' y6 F5 J% g. M4 Y3 i % U  p7 A: T& |' B3 E* D8 z" p
    ) U$ g) @4 f, m( \
    ans =
    8 B1 a9 c" S2 L8 y; j% j
    2 w' Q! @9 }5 V0 P. b, r
    $ }  }3 W. k& @) X2 Y, Z% d1 p  k. x! _9 Q  U
         2
    - ^) [+ ^; b7 U! i1 q" R2 t" X) L2 Y0 _
         52 m4 j% G! x" T) e
    6 e6 E' B+ M8 Z- J

    7 H2 F0 ?1 `: i5 I+ n' m4 m! r# l+ a" a' D+ f: B' d4 B
    >> a(2,:)   %第2行. u" @4 F0 V( B/ e3 C: c

    . ?) n. _0 G; G0 z* ~6 B & S/ `% j4 q% V6 U4 r! _

    % _7 `8 L, q' x4 _6 qans =
    * ~% G" n. B6 h0 j  Y
    & j1 h/ J( P8 h" O/ E9 _) N
    4 x1 C! {: Q. W2 ^; e
    8 v7 j0 g2 h7 I$ n+ h     4     5     6
    ( f9 L; G( i& ]+ p  B% _! A5 {* A) Y, B7 d
    % x# G# ]: f" o+ ^

    9 D4 o8 @% b% t/ D% k3 Z>> a([1,2],[1,3])  %第1,2行中的第1,3行的数据(就是交点的位置的数据)
    : L& n: x0 p8 M
    : n3 K) e& J: J/ N" l1 f# K
    $ c* l# ?, u& w$ A' f, i
    8 d) [* g+ }. Y- h; r6 }# Yans =
    ) P; K4 N5 A) ]3 Q* i/ _, E! b. A7 @& a6 E- y% \) X& M

    * P4 y! c9 Y' T6 E4 O  j# W% ^& v4 {6 H1 G  |8 C
         1     3
    ' S$ M  C4 ^6 `- c. ]
    4 [1 B1 J* M. ^& u0 X     4     6! C9 I3 _- a( P; @9 P- x2 }

    + o0 J* Z7 V0 c6 g% {2 { & D( U4 h6 T2 r1 q' l. A
    1 p2 _- i1 E$ H3 r
    >> a(2,2:end)           %第2行中第2列到最后( y! ?8 K% }. a
    " H. q$ ^4 N3 g" T2 |* g. C! H! R
    * K7 o6 y) A3 ~+ x
    / ?% Z3 I3 G/ q. n
    ans =8 e/ n( H0 n, @, J9 _
    % f5 F7 ^8 v% V% D7 w0 R8 r0 e
    ) V9 q( ?+ k0 r( k) Z4 \

    ! H% F& D6 J" ~9 }2 @     5     6
    ! M, {) v# q5 ]# _# b& M# Q) E9 X8 c+ w& v3 u
    2.1数据类型. Q/ \. n: v8 G. X
    2.1.1整型
    . C: U- k! J( P, F6 N整型从字节数,有符号还是无符号两个方面可以分为int8,uint8,int16,uint16…等,int8表示一个字节长度的有符号整数,用intmax(‘int8’) 和intmin(‘int8’)返回int8所能表示的最大值127和-128.8 P. A" k( J: P& ~$ ^
      @. `+ U/ _. t3 m8 O. H/ u
    2.1.2浮点型  h! \7 k! G5 F: Q1 a$ Q: H8 G! D
    浮点型包括单精度single和双精度浮点数double.realmax(‘double’)和realmax(‘single’)分别返回两者能表示的最大值。
    ; A# ]1 }% F# @( U: G常数数字默认类型是double
    - V1 a, o# Q6 V& y" p: H>>class(pi)
    , x' p1 \! _: Y: X% F' D' [ans=double3 W- A) v  E3 M$ q+ P8 ]
    >>class(2)
    ) C. C4 l1 I# W4 f. F1 |! c8 k" L3 d% W4 lans=double
    & N- v( [5 G, K4 H" z8 X$ R' d& n2 u: g5 Q& {3 X
    2.1.3字符型/ k5 x/ x, l1 M6 F
    1、string=’matlab’,matlab中字符串使用单引号,字符串存储为字符数组,多个字符串可以形成矩阵,但每个字符串长度必须相等。
    * ]: R. O4 Z9 k% t" |4 J% s( N* V% @2、字符串常用操作:& A3 L* a$ y7 v( j$ I

    : \/ V6 ~, }0 k) F; i字符串与数值的互换:str2num,num2str. |: T/ @# }+ h1 C
    a=str2num(‘1234’)结果为a=1234
    $ y* W5 I. J. g- j. a5 |# u- K9 {, I
    获取字符ASCII值:double函数或abs()函数
    # Q( S3 V0 l0 l* D1 f+ idouble(‘a’)输出975 h" A5 I+ @; E$ K& t- \* k  W: ^
    . p7 F; b9 I6 @. `  a7 v' ?+ J
    ASCII转为字符输出:char()
    * O/ V6 {2 g* Z% |char(97)则输出ans=a
    * ^% `* q2 ^8 e6 H4 J
    ' J+ A& {' Q% w& a% U- S0 teval(‘t=1’);将’t=1’作为命令执行,结果是将1赋值为t- l" Q& H. K/ a7 s
    8 ?6 z+ l* Q8 d$ \
    2.1.4逻辑型# y" I+ `: m5 |' f1 g7 L3 J
    逻辑型变量只能取true(1)或者false(0),在矩阵操作中逻辑型变量非常有用。1 k) d; Z; j$ \- h
    ; O5 }, [+ H+ f0 E7 Q" e% s
    2.1.5结构体(类似于C语言中的结构体)
    " @* t3 H, }1 m1 T8 |/ V创建的两种方式:1.直接创建  2.利用struct函数创建7 K# ~$ R9 ?% l; s+ `. S" z" s

    2 I0 S1 T/ G, r8 d例如:
    0 i: W, v4 X0 K# U# R  o  K5 l/ m& f8 t
    第一种:
    3 D4 [' L0 U+ D  X2 k1 k, P( V3 W8 p; X# s
    >> book.name='matlab';
    ( L7 i6 g/ s5 F9 v: f) i
    $ p0 O' \3 j; J! V>> book.price=20;
    ) \3 Z  F5 n/ J3 r. t! j! \" Z3 M; E% t3 Q0 o
    >> book.pubtime='2011';
    ( Q- z4 g8 A# x+ |8 }. O
    - c! J4 m3 E0 Y>> book
    # M3 l% d; @0 {0 q. u; c8 T2 w: w

    " ^0 |( {: z! }6 l& f" P9 }% D  |( m& S( T$ ]' O
    book =
    ) |# [5 k4 c# p- e; [( e5 ~$ h+ P+ _6 K& D6 n* ]

    / b5 t; y5 T& z' [: v* n  \3 z9 [5 G
    9 @  J3 f$ Y% H# n" W! A
    # ]8 b: a/ y5 }5 o# x4 e
    8 D& j9 @( I+ z4 y字段
    5 t3 s( J" q3 s+ I+ z
    , T0 ~9 D* K' |: ^  n( o  
      k4 P! N% i; j字段所对应的值
    & D' M% l% f: e- O9 ^8 J+ k5 N5 i9 a/ g2 B6 Y
    ' f- U# A. `2 D- H
           name: 'matlab', q+ K1 @" Y. ~2 X: e7 G! l! c
    8 S9 s# @6 U0 p1 ]' x+ b; C
          price: 20
    ' C2 y# C1 r3 D. _9 s; z
    , C9 V* h3 s( H, q, o    pubtime: '2011'3 V& v7 h0 m, M1 |- Q& l) e) z
    8 E1 k. U; N# Z* F) r5 A9 B( [
    第二种:3 @# o, p5 x( j. N$ l$ R

    3 h; ~, N; ]; o; V2 S* M6 _3 d>> book2=struct('name','matlab','price',20,'pubtime','2011');, _* l2 t$ C+ W+ V

    6 v( V  f: c. H>> book2+ q$ E! I- V( G3 ~( x
    5 l; X! m, I3 \9 ^* J2 L1 I' X
      R7 ^2 O8 e# |+ @& ?& M
    / y. V  ]4 ]+ N& t
    book2 =
    & u' j2 U; `7 |. \$ z! a2 V4 z
    8 u" m6 Z* d0 h; Q6 Y) W' @
    ' l! E; g, f5 R7 X6 p
    & h6 x0 Z2 h* C9 ^8 U7 {       name: 'matlab'
    - X4 z  w) |! u7 u" G/ Q, N7 X  d# P. p$ w' E. i( s  g
          price: 20
    . s7 j2 c$ a* P6 O( m9 t' Y' O# U. ]" I- S, W2 i( e( m+ ~; k* J% _0 w& G
        pubtime: '2011'
    * k2 P$ j. z$ ^: x" J* b) R5 d
    3 @$ Z- C2 H1 _* |$ ]9 ~对结构体中字段的访问用操作符”.”2 [6 U* d( f8 p$ Q/ D1 |
    ( r" t  a% H4 K# q) g
    创建结构体数组
    , ~- X6 {: Y; S3 K+ yfor i=1:10% B0 M0 N* C. W9 x- o- F$ \' n" u# x

    - L# r& Y: h9 I1 l    books2(i).name=strcat('book',num2str(i));
    ) E' o$ M0 ]( R: \
    % X8 p' d5 \5 s' O+ o7 j! S% d    books2(i).price=20+i;
    % z7 ^! f4 A% J  a
    ( q& S( M; P  t2 ?& Y    books2(i).pubtime='2011';( w* k6 j5 n- s* S0 o! |
    $ l  C- C; H1 s7 t0 s
    end
    8 _5 {& n/ k" n; R" x, b6 U4 y, R  \1 x4 C1 [# C: j
    ; B3 E/ e6 @/ M. ?

    3 s) E. F- x. Z& n& S+ B4 G1 O2.1.6元胞数组(类似于C#中非泛型集合), ]8 ^! n  R! k* \8 O- P
    元胞数组的元素可以是任意类型的数据类型、任意纬度的常量
    & {! b% a. _8 v! j' N% f# R用”{}”操作符引用元素时,得到的是元素本身的类型,而使用”()”操作符时,得到的是一个元胞数组。4 T) Y% u8 }! b# M0 o/ K# L4 x

    ! O3 R! k) |# ~( q- |% x2.1.7函数句柄(取函数地址)
    ) ^" G7 v; k) n/ Z* ]声明:1.用’@’符号直接声明
    $ N7 \, v# L* a2 X7 h/ o2 |% y1 o. o# n! e4 Y" }
               2.用str2func函数声明
    9 D, r0 f" j0 q. P- ^
    & p+ z) E5 x8 v0 v: `函数可以是预定义函数,也可以是用户自定义的函数,声明函数句柄以后,就可以像使用函数名一样使用百句柄了。
      k2 Q2 |- s! @7 a>>ha=@sum;
    4 {. I; D  Q9 |3 O4 _( _>>hb=str2func(‘sum’);; r0 O5 z; Y1 Q& Y# N5 ?
    >>functions(ha)       %函数句柄包含的信息$ `! F- Q7 Q7 l0 Y
             ans=
    2 ]9 u: q% L5 `/ g                  function:’sum’
    + {; C/ ?" {% K: y( U                  type:’simple’% y8 }& v6 x# a: C
                      file:’’
    1 D- b' d- V  d  e
    ( Y: h1 E7 g+ {7 x0 W函数句柄包含了函数的路径,函数名,类型及可能存在的重载方法,可用functions(function_handle)来显示函数信息。 , F' C% r$ r( b  `5 z/ [) R  d% x9 b

    - e' H; X* n. [1 p) V0 F使用函数句柄可以提高程序的运行速度,因为句柄包含了路径信息,系统不需要再每次调用时搜索一遍路径,而是直接找到函数的路径。正因如此,在系统切换工作路径时,不需要将函数文件复制过来就可以同样使用该函数。! [$ b8 v6 T/ r+ ]( [

    9 \- a' ?1 k  Z* {; V! V4 H! |函数句柄的另一种高级用法是声明一个匿名函数句柄,他指向一个表达式
    ! Q" c. e. m$ Q. c) ^- ?9 U声明方法:变量名=@(输入参数列表)函数表达式
    & `6 B9 J' I* a& c>>hd=@(x,y)x.^2+y.^2;, @/ l6 E9 d4 Y

    ! f0 f1 d: V! e8 ~) r* \2.1  matlab运算符( ^3 e( j) c3 c7 [* N
    2.1.1 算术运算符1 v' S( V. I! |- O

    9 y  s/ y, k% j- {/ ?" ^; b分为矩阵的运算符和数组的运算符两大类
    7 t% k. x) n1 h6 _! M1 [; l
    ; O4 t# T% u& q2 G1 ^其中矩阵运算符将矩阵作为整体,按线性代数的规则进行运算,而数组运算是在矩阵或数组中的对应元素之间进行的运算
    * S% R* {# d, R( `+ n' `! }4 @7 A+ l  J0 ~
    矩阵运算符
    , p, a$ [) n) O8 v3 u4 p
    ; j6 U( @2 C& p, l! x6 t, ~" ?2 g1、+ ,-:加减  2、*:矩阵相乘  3、/:相除
    ; `3 y  b* y9 j! C/ t9 a& ~8 M. J  H
    4、\:矩阵左除,左边为除数  5、^:矩阵的乘方  6、.’ :转置) L- t2 l/ I1 B6 }. O9 m1 m: q0 l
    ! m0 L: y4 a7 m0 W  e* c; M( s
    数组运算中(点运算)) a6 O& `) v4 P  U& K
    1、.*:对应元素相乘  2、.^:对应元素乘方  3、./:对应元素相除   4、.\:对应元素左除
    1 K6 F4 P9 q! u% [7 I标量与数组的运算,是该标量与数组中每一个元素分别进行的运算。
    & S7 L4 \9 T" D' e% L: _0 q/ I
    8 I1 Y( m/ ]0 }0 k+ G1 T9 t* t# g2.2  matlab流程控制语句% w+ K0 ]. L4 x7 c! X$ U
    注意:不要忘了最后的end- c7 \; q. a: k- Q' b

      G' N" o# J. c1、if表达式; q0 v# F  A8 L! v  q
             语句;
    " I: u5 x% U1 H0 |- @- D
    5 N# m& Z3 q; k   end
    7 H4 _8 c; J6 l& ^& J, ^: ~; {( O" b5 T: u3 R9 y
    2、if 表达式
    % R8 L9 f1 H$ Y& T1 \. r% a          语句1# E, p4 H/ O3 y1 k8 X3 {( C& Y

    ( p2 u  \0 s! B  F0 b- T/ W   else! l+ i1 V: M3 A& ^# P. w

    : G6 Z) a3 R$ a$ L. U4 O          语句2
    / n2 ~; F! M0 o& l1 _/ s1 _! i' `6 X* A  G8 O9 }3 \
       end# z0 M/ t5 t+ A5 x

    - F6 E# z+ c+ A* a) {& h! ~4 h. R3、switch 表达式( T% |2 l0 q) j# [% U! W  ^3 m
    ' U' A8 c! K: j0 K; u0 Q
                      Case 表达式1) \& n& [4 Q8 _* G- t' U8 j5 H4 f
    : d8 M+ T/ E& ~6 D: i2 w
                              语句1
    ) f* {4 n3 ~  P) P- h* w5 p8 D3 \% h( d* i5 v  c; G
                      Case 表达式2
    4 V2 w8 _, P  \5 R& r" H' g
    - _: y1 ^8 x6 F: X                          语句2& |7 k* R+ ^0 `0 T
                      …
    * t- s  H: |7 Y, ]; A$ Y0 l% M0 S
                      Otherwise
    ! R( k- Q8 E& G/ ~% G2 i0 g: L
    ) @2 H8 g  |. y& y, n                          语句n0 z3 j6 C7 g& @+ @) z

    ) M( r" F+ X' l: I6 Q. c/ d  end
    ; \+ s4 s2 ]$ Z/ a- }/ O+ X. [& P0 e- r9 }5 K
    4、★& L3 r9 L/ p2 u6 u
      for  i=表达式2 e& i. K8 m2 v. M

    ; s$ D: W. a  m; L1 q5 H                  语句8 Q0 E4 o6 V! X! J1 O. X" `/ a
    , l4 N9 r% ~/ z% i) E
       end: O6 ]( H/ b0 k2 E$ x; Y1 q  J
    //能够遍历表达式中所有的元素3 A$ H9 t; U9 j% ~
       如:for i={‘abc’,’xyz’}  %i为元胞数组+ n7 q" r; y# x

    1 e: z! M7 c. A                          disp(i{1});
    ' X6 Q% P  f, m8 w- j6 F' w+ t# C2 z( ~
            end* o  L4 ~7 e9 v. a$ N; `: C
      E; e. z3 s5 [3 ~
                      输出:abc
    : O7 Q/ w: b) i( \6 V" ~1 e1 _
    . P. {1 q2 d% B, a( i; J                            xyz
    $ N1 |& w: T0 ?; m2 e# G1 V1 [) C) g/ t
    5、while 表达式
    - @: @2 ]0 X3 A/ e: c/ b, A5 e
    ' M$ E1 b9 q; B7 i* [  O                  语句# C+ x7 h5 j: e
    % A0 U) t: @. k, _
       end
    8 J# T3 P8 {; w  U( x. L/ M
    & J* z% U2 N  w6 Y

    该用户从未签到

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

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

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

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