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

Matlab语言基础

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    + }, H; d- _' E) r1 M0 X
    Matlab用C开发,C语言属于强类型语言,变量在使用之前必须强制声明,而matlab则属于弱类型语言,通过赋值就可以创建变量变量类型取决于创建时的类型,而不需要强制声明。
    ! ]* T& F- I( }0 s5 y
    6 E5 X) p) {8 v/ {6 ^4 v% ~关于数组3 O8 _9 |# R- ?- R5 U
    Matlab的变量和运算是以数组(矩阵)为基础
    & T$ T$ c& Q! y: q6 ~数组分为
    7 m/ m$ B- ?/ W5 q3 @         ●向量:一维数组- T) b) K8 Y- p" ]- B
             ●矩阵:二维/多维数组* o' h. f! l) C0 q, ^, I
             ●标量:1行1列数组
    5 c* {9 `5 c4 D2 a/ B) j
    7 w' n+ M2 \" ]4 I# ~( m4 v, a数组的创建:1.用”[]”操作符直接创建   2.用函数创建      
    + ]% I9 t/ p% P0 |! t+ C0 b! o" c) i9 d
    数组元素的访问(matlab中数组所有下标都从1开始)2 ^0 U9 E8 F1 B3 D) c
    而且matlab中,下标都是从1开始的
    # @9 ?: J0 `6 i7 Q) ?$ O; j/ A( W; k, N有3中方式6 D5 c( w9 r- ~  D' `6 i; x
             ●全下标:a(m,n…)—第m行,第n列
    ' `! e; H2 W) }, I& Q" U         ●单下标:a(index)—在内存中,matlab数组是按列保存的,全部元素按列排成一个大向量,index就是向量的索引。8 G- K- X6 R* t% i9 h+ ?
             ●逻辑1方式:建立一个与矩阵同型的逻辑型数组,抽取该数组为1的位置对应的元素。
    $ o8 w: T( D5 @# @- t; z/ u
    0 S; k! z! _! d( R, `8 s如:
    4 [) N$ Z6 x" H( ^8 i$ ^( C) ]2 f' t. }5 a: Z( k( x
    >> a=[1,2,3;4,5,6];
    5 H) N; r/ p8 `
    $ a3 M1 v! A4 m. ?0 }>> a(2,1)          %第2行第1列7 q* z- X0 Q: j2 v4 F* p. W$ A3 e

    ! I% G. z  @7 o+ j 4 G7 h, j4 N6 `8 G! s
    7 K+ R  d8 k/ Q+ h+ e  T& _/ U
    ans =
    * H5 L0 w) O# D' d  `4 \
    , z, g) r  {  f
    $ D; R& D6 F# m: u5 n. F0 Z$ O# V; Z5 k
         40 V* u) z! q( h4 C) @4 P7 Q& y

    ' u5 b- U. t% O1 L , d7 ]2 B1 c4 Y* o

    ( k# P6 C3 f6 a) r/ U0 Q$ k>> a(2)              %第2个元素) c; o4 {3 `2 F# M) x

    2 \- m$ B$ U' N6 i1 T
    " o0 v: M$ l% @4 H2 X0 t  o, |
    # I% u# c! i$ M, a0 X& V4 [ans =
    & `& v5 ^2 Y" T
    + l1 [: I0 }6 p# i( x
    ( P$ {7 K, s* X. l/ y% ~: O/ f
    / p; a. H' Y7 U该维数中的第几
    ! G( B2 L; W7 s" {" c; \( F
    * _6 s. R+ E- ~. [) c% K1 k1 e! ^ ) Z+ U  P# Y0 P
      1 f9 r7 p& W; J
    # c- X2 w! J, D4 }3 p- X- P9 I" }& H
         41 b+ u& x! H$ Z+ Q/ H% h2 Q
    ( h/ F0 a: m3 F$ p& Y) _7 e
    + E3 W# h- t" s6 M; y* o
    2 ?8 e- A& h) R' x
    >> a(2,[1,3])   %第2行的第1和第3列元素
    0 o  m/ Y4 C2 a1 q  j: ^& Y- O+ W3 n* r

    * z' q; d* F8 {$ L, p3 B
    % D! W* z$ {; D9 l- G  }ans =
    1 |% ?: D! P( P2 h' m! @
    + E/ N4 U" U* O2 ~* V. \1 l
    7 Y7 P0 c! }, ^0 n8 t! f
    ' a; q  }3 [; f" Z9 m" D% w     4     6& J' T' L3 _/ o
    % l! ^; i" k% g& \1 o. O
    >> a(:,2)    %第2列
    2 J% P9 {7 z  j  {
    , v) h! n( Q3 O& z2 q4 @3 n* [5 Z ) e# }  t/ A' }) {7 T
    ! ^; H. h. r5 j0 x
    ans =
    : s2 k" Y! u3 l: e; d1 M4 }7 R2 L+ @: e
    + [2 {- z6 [$ r* S( e; `+ ?4 m

    " y2 w5 J; |- T: u2 u     2
    4 V' r/ I$ u7 Y. m
    - h* M& a  G! o, {1 [2 V8 q' M8 l" k     5! }0 A' [, M, D2 u" e$ Y; K' ?

    + O: k$ V7 `- {; ~- L # {4 D& @) G# I6 k' u
    # }) K) Y5 h9 w4 `
    >> a(2,:)   %第2行% R9 ]1 d" O3 i/ h

    ( _7 B1 R. ^. l6 l: Z: L5 r& |, H 2 U. z& `' g0 E3 x# K& X
    - C6 A& `; I8 ?* p: y
    ans =; G9 \# O  Y# s( d9 h

    $ a! o, ?, X( X; T  a) X
    5 f+ U. v5 f2 j: w# U# `
    2 L- v" h4 L  O/ @  }4 I     4     5     68 {9 @/ c( I  z9 W5 {' ~  Z

    + o' Q9 J, d* L" M. F2 P & ^9 j9 z0 E: A2 ?
    8 @2 V* a) Z( n: f
    >> a([1,2],[1,3])  %第1,2行中的第1,3行的数据(就是交点的位置的数据)
    - }% }$ G* ^% F, s: n. L2 P9 A' |/ |5 J

    8 e; H5 I1 e  ]3 o3 g0 b
    5 C- P$ E0 C6 |6 X. \1 pans =. f3 G$ ^; m8 p6 h) O( y+ i8 e
    ; G4 P& M1 u. ^! ?0 _: r0 w3 N8 D

    + S! q6 A# B2 f, T
    2 ?- k% y; L* Q) v5 s; P     1     3
    . I  P, W3 R9 x! ^
    6 Y3 X$ x3 w4 g" G+ L6 V- D     4     6, w( S: I( b/ f. }1 |7 ~% |, d
    0 l) f' B% e+ @; X9 r* N
    , Z; k# d$ x( G, l- A0 ?3 B

    & z# ~- x% N5 r' L% F/ x9 E: {>> a(2,2:end)           %第2行中第2列到最后0 W& s( V4 ^3 {4 U5 r2 ?) G1 \
    ; Z1 y& T" n% {, p$ ~2 W: C1 @, |

    ( q% b1 q. D3 o" `4 u: ~. [  u4 Y* C. C; F0 u6 f1 P; w! c! }. g
    ans =
    & D) A# Y: E! d' |" H+ H% y/ U
    / T6 u& o0 l$ i # T0 N7 M: A( Y  W7 R& ~4 m  c
    & P7 I( z4 ]0 V) H8 m# v0 Z) ]! @
         5     64 h# N6 ^7 g! L  d( {, _/ v# @9 Q0 Y

    1 m/ V1 M4 L- ]( y2.1数据类型
    7 p& K; c$ t7 m' N2 G2.1.1整型- n2 e. o' e! J  J) M
    整型从字节数,有符号还是无符号两个方面可以分为int8,uint8,int16,uint16…等,int8表示一个字节长度的有符号整数,用intmax(‘int8’) 和intmin(‘int8’)返回int8所能表示的最大值127和-128.8 K  u( e4 _% ~+ M# F; C
    & \$ {0 b! B0 Z) g
    2.1.2浮点型/ `$ A) M  \3 D+ f
    浮点型包括单精度single和双精度浮点数double.realmax(‘double’)和realmax(‘single’)分别返回两者能表示的最大值。$ B  d3 S2 ^4 o
    常数数字默认类型是double  [+ i6 m/ h$ }' z. E
    >>class(pi)% r7 c+ `" l$ p1 S* c
    ans=double
    " R( W- U1 R1 @! ^8 V>>class(2)
    , V2 o  O% F% Z  Xans=double# |+ N/ b1 G7 O, R
    3 k4 o4 u8 }, q1 C
    2.1.3字符型/ V% S) H3 y8 G; P3 f$ m
    1、string=’matlab’,matlab中字符串使用单引号,字符串存储为字符数组,多个字符串可以形成矩阵,但每个字符串长度必须相等。
    # I1 B2 g; P" `  l3 d3 p, Y2、字符串常用操作:
    . y7 V- b' Z' r
    ) |1 Q! Q: P; ]3 Z' @字符串与数值的互换:str2num,num2str
    1 H% h% i$ [( F0 \a=str2num(‘1234’)结果为a=1234# B9 Z" {' X/ j' s. J
    8 w) l, W( x( Q. a
    获取字符ASCII值:double函数或abs()函数) n" ?6 s- S: F9 X/ f) c
    double(‘a’)输出97
    3 s. f5 ]7 ]& l  U9 ?( n0 X1 K
    " f5 g: e) l7 P; G4 |6 m" JASCII转为字符输出:char()
    5 A# N6 u) ^, M5 {. a; G8 @char(97)则输出ans=a
    $ O1 F+ C- d. t8 F5 P2 ?7 D% M
    9 U) i: q1 E) G# b& J4 r0 B; s0 T& ueval(‘t=1’);将’t=1’作为命令执行,结果是将1赋值为t+ |/ f; w. X, W* G- Z* h

    / R+ A/ @. t/ b) K" ?2.1.4逻辑型8 Z7 Y) z1 Z: k8 P
    逻辑型变量只能取true(1)或者false(0),在矩阵操作中逻辑型变量非常有用。: y; P8 c* f% d7 d; a! z7 J% |( M
    / t% Y% L9 y  a$ u
    2.1.5结构体(类似于C语言中的结构体)
    9 x3 }0 r% R4 A- i创建的两种方式:1.直接创建  2.利用struct函数创建; b8 ^+ ]0 e( b5 m

    ' h5 M7 _/ n( @, j7 ^例如:8 K! _! J9 T1 X" y' b% w% D7 j: C

    3 u* j7 P' Z# E/ i' q0 q第一种:4 B* U+ c& ^, J0 v& L/ C4 d

    9 g9 N: d# R. ?" m  ?>> book.name='matlab';1 |% j. O: {' V' N
    , P" i( ]; U( w" N
    >> book.price=20;
    & r' C3 R0 T8 e% r
    : H1 R' `! T( ^1 t- @1 P>> book.pubtime='2011';6 `5 _, c. J, w- P- q
    0 _7 U2 |- x: F; w
    >> book9 h8 j3 G+ n/ g, x/ X/ g8 n
    4 |/ x; W" K, }' c8 c& V% v

    6 V- z7 Z' b( q/ i+ P
    / C  }6 u4 _5 K3 _book =) C1 v) r, u& [, Q2 \, l8 h3 @
    4 z  H) }9 k& L

    3 K$ z( c  ?8 z( r) T  f) E
    " S, ~; i' f: C5 J* k$ g/ e' w- s% f5 c# K- v9 S

    % s% v3 Y& [) x( X/ K  f3 o  E字段
    & a) k5 n3 `7 z1 v; P9 Y1 S$ x
    9 o9 G+ S5 I" f  F$ E! W  , j/ Z( Y0 z+ O6 ~! y$ d
    字段所对应的值
    & a7 y& g; @) Q  A% h, p; _- k+ F( q  W+ b2 ~, m! b# `
    1 q. e7 V  ^8 V7 o& H  R+ k
           name: 'matlab'& F1 I# _" Y: b2 e2 z' z: b
    9 y# y! e# P* c: c0 x* p
          price: 20
    1 y* k0 o1 t& w0 |3 V( I7 u( x  w: I; s( `4 ^
        pubtime: '2011'* B1 ^* q; z' |7 H. F7 z& ~( J% E
      z6 B1 \/ h8 G: z: l
    第二种:
    ! ]  c1 v" }( n3 t6 Q: V0 I& ~; B( M, d
    >> book2=struct('name','matlab','price',20,'pubtime','2011');
    9 h5 @4 `# H+ V5 Q. [* b! ]6 L
    5 q! R# Z- c1 K6 x7 m1 x>> book2+ W. ~) U9 R) D$ ~* g

    + g7 c7 H& A! e; Y$ I1 l; ~ 8 ]/ i9 H8 o5 R4 ?: a5 d

    4 Y( |2 ~9 B! I; [# D' k* p5 N1 hbook2 =* d. B) |) `. I+ Y( P

    8 \4 S, H9 ~- `8 W) ~; K" o# C" Q+ f
    5 j/ u7 c7 R9 O: {% W; Y/ i$ O7 l5 u1 _& j. v9 i2 C
           name: 'matlab'$ h7 o* u' S6 Y, M# x( p0 R
    ) @3 r+ H! q( t6 i! \2 x, D+ ~8 p
          price: 20
    / m* v& D' S2 f& A5 Y0 l1 a" L, t% a" F" L3 N. B0 ^/ d
        pubtime: '2011': j" S" G, |. S8 E! Z, c% m

    ' u4 g4 h; c$ A+ W% l1 l: d对结构体中字段的访问用操作符”.”% H  E1 F/ D1 O& d5 @

      P/ F/ @* R3 R* c0 c/ i: m( a% k创建结构体数组
    / ~' Q: e5 `% A; @+ K' Jfor i=1:10( d( L' ~$ B+ S, t2 H

    . m0 D3 ?7 U7 G! S' Y    books2(i).name=strcat('book',num2str(i));( c. i% _8 e4 E
    $ ~( S& Y$ T) Y
        books2(i).price=20+i;$ ^* |6 u6 O, E" L
    , }* k  U  l4 Z2 n8 Y4 z
        books2(i).pubtime='2011';' C7 g4 H( ?+ N7 L4 ?6 y8 q

    # V% p6 @5 K! h7 ^1 e! Mend
    ( D8 [/ v" z: Z. O( U
    $ d" a3 \, q; N+ O) l) A# K $ z" _, b; q' i9 m6 [5 C
    9 \: ?3 @* C" c. G
    2.1.6元胞数组(类似于C#中非泛型集合)) N8 E3 y3 v$ G. ]2 K
    元胞数组的元素可以是任意类型的数据类型、任意纬度的常量
    2 U8 G; o' B# w6 s0 Y6 H) Q/ L" p用”{}”操作符引用元素时,得到的是元素本身的类型,而使用”()”操作符时,得到的是一个元胞数组。! L" p" O7 P. B1 _. ^, i$ J% u
    1 _8 a9 m3 c3 u+ [
    2.1.7函数句柄(取函数地址)2 r  I3 [$ g, i" n" X/ ]2 u. h
    声明:1.用’@’符号直接声明+ c9 }& f/ v  S3 Y
    # s0 F% l9 R4 ?, g( I7 h
               2.用str2func函数声明+ d4 j1 g1 s7 X9 y6 ?- h

    2 G7 _+ F/ c7 t( Z* F; a' X函数可以是预定义函数,也可以是用户自定义的函数,声明函数句柄以后,就可以像使用函数名一样使用百句柄了。/ G+ @! h' d- n" @& c+ R: V' m
    >>ha=@sum;
    7 g/ a; O, R8 Z>>hb=str2func(‘sum’);) r* ~3 i' J5 U) i2 z: h
    >>functions(ha)       %函数句柄包含的信息. x$ S* G; ~; M; U! q5 a- o
             ans=- ?+ h; e8 k4 N: F( X
                      function:’sum’
    + q. P0 U0 A5 F  u/ D                  type:’simple’& A/ D/ k" B5 n' O/ L
                      file:’’
    / g, L, W  n$ ~9 d( w0 U7 i
    , j" Y/ a' ?3 u/ |! A# y函数句柄包含了函数的路径,函数名,类型及可能存在的重载方法,可用functions(function_handle)来显示函数信息。
    ! ]0 _9 B( {5 F3 b+ ]+ v' p3 [1 Z- }" b. A" U& I/ c5 P3 d
    使用函数句柄可以提高程序的运行速度,因为句柄包含了路径信息,系统不需要再每次调用时搜索一遍路径,而是直接找到函数的路径。正因如此,在系统切换工作路径时,不需要将函数文件复制过来就可以同样使用该函数。
    5 W, G1 `5 z) D0 K/ N" m/ o" T- Y+ w% c- c
    函数句柄的另一种高级用法是声明一个匿名函数句柄,他指向一个表达式
    9 N, j0 |. L. ~0 z& |声明方法:变量名=@(输入参数列表)函数表达式! O/ [& A- U4 a; V0 \
    >>hd=@(x,y)x.^2+y.^2;
    ; z: f8 B- o+ V3 U
    ' f- j+ w' a' {2.1  matlab运算符. o+ d8 w# a0 F  l7 Y
    2.1.1 算术运算符
    9 H3 `! U! o" S8 G  V" a0 T6 Q
    - O& |5 c( A/ k1 F* j- {分为矩阵的运算符和数组的运算符两大类
    & g- H) h9 h' b3 G2 U8 E: Y6 ~- t+ l4 M: H6 r, p# x9 R9 K9 A
    其中矩阵运算符将矩阵作为整体,按线性代数的规则进行运算,而数组运算是在矩阵或数组中的对应元素之间进行的运算
    ; p* c" W4 k, d* B+ L5 Z$ S0 E) S1 A) w' w0 z
    矩阵运算符- R4 T: ~: i* j. a- g7 ^7 V8 O: U
    * V) c8 Y: w+ i3 c* V2 z7 ]! F
    1、+ ,-:加减  2、*:矩阵相乘  3、/:相除
    / \# ?2 L3 m) k. L( ]& ?
    1 e- p9 Q  i, y9 c3 ?6 _9 E4、\:矩阵左除,左边为除数  5、^:矩阵的乘方  6、.’ :转置9 d% Y, v9 U$ s2 j
    , _( t; z9 O! U' g
    数组运算中(点运算)% `) I  T, m7 E* ?
    1、.*:对应元素相乘  2、.^:对应元素乘方  3、./:对应元素相除   4、.\:对应元素左除. O! _8 k* ^* B
    标量与数组的运算,是该标量与数组中每一个元素分别进行的运算。
    6 n8 q! y1 @1 p5 A' N6 B3 m& V4 X! j
    2.2  matlab流程控制语句
    : H$ p8 E. O: O0 a, z注意:不要忘了最后的end$ }+ }3 e# v+ {, g/ g* p' Q7 t
    0 H9 A, O2 _1 [. F' N# `" j
    1、if表达式+ L. S( `# k7 U* ?3 I5 N
             语句;% g+ o' Q# Q" x
    4 I/ c+ ]  o# ?5 ]0 g" L
       end
    6 @  b- X4 z8 \! [$ E5 Y
    : ]% X" H# Q; j: ]2 u% v# @- ?2、if 表达式
    5 j% v$ Q) Z  _3 Z; z1 P7 y          语句1; R, X; B1 N, l& w2 j) z8 y
    7 p' [8 x/ A- D! u8 W, s4 h' r
       else
    / A! e) q& y+ o& R' H9 g+ z( x
    , U' [& i: `% l& {0 t2 _" m          语句2! C% s1 H' L- X" U) `7 A+ C; `, U
    / v/ {; d$ a& U9 |# E5 k
       end4 M+ k" q" e2 `$ v$ X) O, g' R

    9 B/ I% \1 {5 E  v* T3、switch 表达式/ q( D; E6 q+ a" V: k' u

    4 o6 k1 t7 n/ \5 j% P  W                  Case 表达式1
    - q5 |* c2 T: E6 |5 f: K( Q
    ; Z4 {9 W/ P8 D- N" T7 |3 O                          语句1
    9 P( H; c# ^$ @6 r4 {$ B- X9 k) j
    6 \0 v1 o5 n, P7 ], O& e8 S& ]                  Case 表达式2
    % B/ t/ i: \7 I# L3 _* g
    8 V/ F0 p* J+ C) v& S                          语句2  C* L7 J+ u# H; z" A) F
                      …! H) d+ F) \* H. G$ ~. R5 k

    4 ?$ R8 D& H1 F6 r5 x                  Otherwise, c& [6 x7 v% j' f" ?

    ; c2 ^3 {9 g  J$ ^                          语句n
    / t& c. f6 Y) n9 ^! C2 X, g$ C
    6 s  O7 ?% V$ V  end
    7 j: i! n7 ]* f+ f$ J
    / V+ O0 y) I% Y% W& S" x. d2 _. K4、★- V- w1 R; X. Q5 O
      for  i=表达式0 p8 A8 I* Y" {7 C1 B% d1 \
    2 L# }! U6 d9 W' `9 I
                      语句
    ; x5 A" M$ M6 ^6 q- e2 N; ^( n1 |0 P* j) p3 |
       end) p4 A+ Z, X4 V0 g4 r3 v, R
    //能够遍历表达式中所有的元素, ]% u6 K7 w1 i
       如:for i={‘abc’,’xyz’}  %i为元胞数组+ u( D# V0 B& S1 P" s

    4 s# H: |9 E% {$ Q. S1 Z! y$ v                          disp(i{1});
    + [6 f; m9 v; l- m) Q$ e
    : U7 W) I4 r* f" A        end4 S8 n5 L6 y& ?8 e; V

    8 p3 H! b: x* V5 q& y                  输出:abc. k& |. T4 _5 Z0 @$ h
    1 p' Z4 D+ y9 o" \% ~
                                xyz
    ' g' X( ^- G1 Y$ m
    1 j9 `2 _/ G. u, D: a- Y/ U( ^5、while 表达式
    9 O7 |3 D! V. X+ ]" E# T( f4 ^' W# h9 N
                      语句
    3 w( E5 m  q* L* ~; Y5 F) o
    1 e. L, t, V# ^- y% h- _% I+ l   end9 r4 e2 v9 v4 n2 l5 q- _1 w

    # I! z# k; n' Q- Z3 |3 k) l

    该用户从未签到

    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-5 12:15 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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