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

Matlab语言基础

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    # P8 D+ d* K3 F6 K1 I4 j/ U/ H7 X, X
    Matlab用C开发,C语言属于强类型语言,变量在使用之前必须强制声明,而matlab则属于弱类型语言,通过赋值就可以创建变量变量类型取决于创建时的类型,而不需要强制声明。
    + ]  Y8 Z) F( x. c* j' C. ^( ]3 l; e- ^3 Q* T. U
    关于数组
    ' {  w: [+ t& ^. M9 SMatlab的变量和运算是以数组(矩阵)为基础
    2 h& \3 n  @6 ]6 v0 `数组分为
    # W+ z4 w$ |6 p0 Y& L         ●向量:一维数组& h& H9 m: i+ n$ |
             ●矩阵:二维/多维数组
    ; y4 R1 z+ Y, f/ \% E# [4 I         ●标量:1行1列数组& g& [5 p2 y* m6 ^4 U2 C
    ' {" h- i. T  \+ p1 K
    数组的创建:1.用”[]”操作符直接创建   2.用函数创建      
    . m4 r: I8 d2 `$ y
    ' G- r0 k/ I) _, f9 Q( i# C数组元素的访问(matlab中数组所有下标都从1开始)
    4 T( t5 v, W7 B3 |, \而且matlab中,下标都是从1开始的
    7 h& X7 C8 L) ?# |& a有3中方式
    4 w( f+ V8 `; p* B4 y7 K- o! G4 L: K         ●全下标:a(m,n…)—第m行,第n列
    0 v( h4 r7 c' K, r6 |         ●单下标:a(index)—在内存中,matlab数组是按列保存的,全部元素按列排成一个大向量,index就是向量的索引。' h" m; s" W3 K9 V- [; z6 X% G) G
             ●逻辑1方式:建立一个与矩阵同型的逻辑型数组,抽取该数组为1的位置对应的元素。% v! F) U" t9 N' i& t4 @

    & P/ l) `% A6 T$ L; B8 h' i如:, X% r8 \1 t6 t! o& Z3 U) p; v! ^

    1 x0 ?3 w' W  X>> a=[1,2,3;4,5,6];6 w: C8 x* i( T4 d

    / q. X% R0 K6 y>> a(2,1)          %第2行第1列
    " P/ e. f' j) j: N4 P7 a/ U  V7 j3 S; A1 ?) k2 v

      b+ P: L) g9 A
    2 @; O( }8 y6 j2 ?6 J0 n" bans =% Y0 W7 U) i5 T' v% @
    1 z  }5 Y9 M3 F3 [

    , ^" z4 w$ W9 r3 S8 v* u8 W% H. f4 ^5 N
         48 S; \- t0 `- M3 o' L- D

    # U& D. D# b6 c % |+ ^( B% w* i

    + `0 C% t9 ~+ B# k9 }0 @>> a(2)              %第2个元素; A$ c" n4 q% I) j4 R

    8 h7 e+ T/ R4 t& a9 H5 a
    ) ]9 Q9 L7 V- `. b
    5 c4 D! L! @7 f8 O. M6 pans =
    . D* Q$ t+ p5 C! x
    3 H7 _& r* ^  \. r2 j
    ; a7 V/ `8 Z; F  c
    7 h* r. c% F; N' f7 V/ I* a该维数中的第几
    7 G: y) Z% F  \( r6 t0 P6 o& |3 |; Q6 T

    , w6 [/ k  a/ _: N' z  1 L7 ]; C$ o7 e! e4 f& n3 r
    + v$ q. I  p' m
         4
    7 P, w' c) `6 H/ s8 h( W$ V
    3 w! j/ H. v% R& \4 N- k% ~ ) g! {/ X! h  D  _( U  f% ^

    * _2 f$ Q0 C& Y6 B>> a(2,[1,3])   %第2行的第1和第3列元素1 K' j8 |2 p9 G

    & Q3 }8 Q& H* {5 L* D8 h) c % y0 H3 V5 h  c( `7 M3 Q+ x
    / p' T2 o5 q6 ~
    ans =
    2 ?+ U; \4 `* l  U0 [% c- ?, W3 _; ^% x4 i
    * c6 ]& M; N/ S" P$ a& @: r0 e
      T9 t3 Q6 |6 N: r( @3 e
         4     6
    ) z. P' N" v; S2 B( u! U, U' G+ ~: i0 V8 V4 W
    >> a(:,2)    %第2列8 O* \& \: m( M! w
    " t/ q+ _; C# [' C, M$ V

    & e6 r/ r' |% n; g+ \4 O" n! M, k3 X- ]/ n2 I& w/ U. ^
    ans =
    - @" R2 N" M/ f1 V, Z
    * N3 H( U. X9 z( I6 Z9 i6 T0 `! t! k
    + m, ^! O, Z1 y5 `8 U+ c) ], Q! p' F% Y- F. J  v! i
         2
    ! M5 b" m- s- ~5 p: h3 r" M& M! y6 d& [
         5' H  F3 t, [& M
    ) F- X8 y$ i# h& u$ c
    6 |+ [0 V3 B+ \+ C- \
    4 l, z, V9 g3 D6 u/ \
    >> a(2,:)   %第2行1 h+ P, I9 q$ D$ J6 D: G) z

    1 p" h% L3 j- d( `4 _) j 0 C# g" U0 v0 q* z0 T, J

    . n0 u$ ~9 Z+ u6 _9 ?ans =
    5 d. I3 J4 _( k# O- N/ t% v# w6 R6 I9 O

    0 n! L+ e1 k0 Z
      @( K1 ~) E1 F" M5 j% N     4     5     6  u+ Q; w: k  e8 f, e2 z

    . {2 p% N8 @. u+ k. Q$ b. e+ s8 l# ` ) Z; y0 U: N/ q

    7 E; P7 M3 g& J8 B: ?0 f- m* q2 G>> a([1,2],[1,3])  %第1,2行中的第1,3行的数据(就是交点的位置的数据)
    8 \! A/ D9 @. s8 `% T8 t  F9 Y6 Q) z, I( Q
    # }5 C! S/ y. P1 t( j0 o" a& R
    % X# r, h- W1 U" [1 z0 q
    ans =: z8 s6 w: Q( ]8 Y5 f/ ]

    * i, N; S6 n& k$ z8 b& n " S  a3 L7 T) r, F

      [" l6 {6 e, D1 K     1     3
    4 n2 z. Y* w" K: @0 ?: m: {+ E8 i9 H' N' E5 u$ N! L& {
         4     6
    7 t: g# A( l2 C
    3 ~* }* j7 z. g # W9 Z5 i/ z+ ~7 G8 t+ m

      c3 O% j& N. J/ Y# _4 r+ k5 G2 b>> a(2,2:end)           %第2行中第2列到最后; W& U4 ~- M, n
    % v, `- r3 z, a4 d0 s/ ?, W
    + O& q3 d" N6 m1 w

    # S/ g6 ^0 ^, nans =
    8 X/ I* K6 Q) }8 N8 O! \5 F7 v+ y  R/ V4 Z9 Z# S

    / L1 ?4 C* q4 X" X# X- @
      c# S8 Y' A) h8 X1 I7 L1 W     5     6
    0 h2 R+ |, p8 Y, c
      o4 ]  {( j. a+ i" r; I2.1数据类型: A" J& E! D$ {* D
    2.1.1整型$ f* q& l! s# ?8 n
    整型从字节数,有符号还是无符号两个方面可以分为int8,uint8,int16,uint16…等,int8表示一个字节长度的有符号整数,用intmax(‘int8’) 和intmin(‘int8’)返回int8所能表示的最大值127和-128.
    + p0 r8 V3 v% q0 v* {9 T5 ~7 Z- _% K$ f; w0 _( C
    2.1.2浮点型
    + S& z/ w+ |! T% g浮点型包括单精度single和双精度浮点数double.realmax(‘double’)和realmax(‘single’)分别返回两者能表示的最大值。
    0 s; N  z$ G8 f8 H常数数字默认类型是double" P+ T2 L+ x& L/ @! f
    >>class(pi)
    : p6 E/ C( [+ z3 I7 q7 M& ~# r) mans=double
    5 q6 C8 @# p7 t& z' N>>class(2)2 J; V5 m" L! N4 \: T
    ans=double
    1 e9 d' ~6 h0 o" d7 H. C5 E) o/ D, U% C( O
    2.1.3字符型6 S; n( u1 e! g. v/ }
    1、string=’matlab’,matlab中字符串使用单引号,字符串存储为字符数组,多个字符串可以形成矩阵,但每个字符串长度必须相等。
      d, N3 E2 p# D, ?2、字符串常用操作:  b0 [2 p5 {  F1 f% H# k
    7 D: l2 Q; q' t1 H5 ]
    字符串与数值的互换:str2num,num2str
    0 H- I6 |0 d7 {8 o' ^& ba=str2num(‘1234’)结果为a=1234( w0 e4 W: K) }. L9 |0 D
    , W; Q0 A: d* v0 y" D
    获取字符ASCII值:double函数或abs()函数
    9 p/ C0 p* W, ^) J. ^double(‘a’)输出97
    + Z5 Z+ {. k$ M$ J; u6 W. t
    , n+ `- B* p4 @) gASCII转为字符输出:char()$ |0 d8 O/ E0 O4 X" n  X
    char(97)则输出ans=a1 o' _! Y9 K* i, X: q% W4 z
    . Z0 A  \/ N0 V1 S+ N5 q
    eval(‘t=1’);将’t=1’作为命令执行,结果是将1赋值为t( j+ j* @9 n% m8 c6 L- ], f

    / U* v( o3 C- M# ~* W2.1.4逻辑型
    $ \5 T8 v: m% X逻辑型变量只能取true(1)或者false(0),在矩阵操作中逻辑型变量非常有用。5 v9 F5 v+ [5 M& a- N
    ' F4 o8 j) R' _8 u% t
    2.1.5结构体(类似于C语言中的结构体)% H* {; l9 G6 Y: c
    创建的两种方式:1.直接创建  2.利用struct函数创建
    9 J% k0 Q+ R; e/ t' N- O3 b- v  T4 v  S- b
    例如:$ n2 f& `/ }7 c/ @+ ^6 C
    : w% s6 T4 r1 I  |0 W4 }8 b
    第一种:; o0 h2 \  Y' A% n; v

    ) G+ Z8 y  b3 ^; G>> book.name='matlab';& k: I4 k/ B, g6 d' ]- ^/ J( B
    ( B; Z( o; R- ?1 d9 o* ~6 U
    >> book.price=20;
    , z- E" X4 R8 q: J: F4 i, I+ ?; R  w7 T
    >> book.pubtime='2011';& @7 a  C! }. f
    8 S; }4 ^$ q2 o6 o9 \
    >> book
    / r& \1 Z, V' Y0 Y1 e9 i5 m% N
    % P! B0 f' n0 F$ L. ~- } * Z2 s* w( v1 c
    . n% H" ~4 d: g
    book =
    ; {4 `: M8 R2 @- \: d: s1 p% A5 m
    % v/ ^) S; p. S0 I
      f9 J0 `- u8 Q( A
    ; m, `, t' B0 ^+ Z) e% q6 O1 c4 Z* D7 Q' I2 P
    4 g2 ^5 w/ w6 C; k. r& i- X
    字段1 O  r; e# P5 L- q2 i% a

    $ a: c) D* F! ]4 ]7 ?* ]  , g' O1 L+ V7 q1 e2 O+ d
    字段所对应的值/ z+ g& g7 \3 r7 u/ C- u, n+ i! u8 o. s
    & d# a0 ~7 u9 {$ E( J1 O7 t, y; L

      C6 p( u# b; @- o, v; N; J       name: 'matlab'3 W8 K, l7 z  B7 {- t6 d
      e0 C1 l7 }  a& [6 [
          price: 20
    2 p$ ~3 M4 K6 S0 U! N
    7 N' t( G' C9 I( n- p    pubtime: '2011'
    % S" `9 D! q  W  n
    4 T! M( M3 f' |1 L5 [5 \第二种:, y" X( A7 C, I3 L% [* d: g
    * @- t- {5 |' @8 `2 Y' H
    >> book2=struct('name','matlab','price',20,'pubtime','2011');
    ) H5 d2 F  M5 }5 b' [; D7 Z( ]" Z
    >> book2
    " o' j  o- q" K/ |  f6 V' _& i
    , P1 n; B6 K* o" k
    , W8 ?2 X% B9 U3 }: g# e! P0 A$ k
    book2 =# X$ d% s* [$ b+ }, l

    - W2 x4 {0 I( V0 X, w- s- ]8 G
    / Z, a2 @# b1 T7 D2 N& }1 h1 _# G' W2 p
           name: 'matlab'! l7 N7 {$ c+ U7 k  k- e4 {

    * e( Q" p1 I# I. R$ M0 i      price: 20
    - W5 r- O) l8 |& n( p* z. P3 Q$ x2 w! P; L4 d  e
        pubtime: '2011'
    ) {' A5 o  \1 i2 D+ q$ }/ m9 Y
    # W& m$ M3 v/ R2 ^) w: u/ o对结构体中字段的访问用操作符”.”
    2 ]7 }4 {  T6 n
    9 D7 T2 C# s/ l3 l5 ~创建结构体数组
    * S. ~4 G/ O2 w: Bfor i=1:102 m9 H) x% Q5 `* t4 i7 k, u
    ( F% R& V% E' @2 n* d5 R! x
        books2(i).name=strcat('book',num2str(i));
    2 r& O5 }/ f& H& z- [" |2 Z8 q" Q/ C0 G" ^5 D
        books2(i).price=20+i;& U8 I3 A& k8 l* n! E4 ^% \

    , h7 \4 T; L' c    books2(i).pubtime='2011';
    ! w. Y+ ], G9 ~; t7 z
      ?0 i  _0 T* @end$ l- S/ |: q' h
    $ E# ~) f/ D% i' m8 D* J

    2 R- T6 ~7 R) N: {
    0 V8 p6 ^7 n6 l1 H0 p4 T4 N2.1.6元胞数组(类似于C#中非泛型集合)  k9 W4 ~2 s1 K* E& E- o
    元胞数组的元素可以是任意类型的数据类型、任意纬度的常量
    6 f0 a% \+ [  v- ?  ^! X/ [' C用”{}”操作符引用元素时,得到的是元素本身的类型,而使用”()”操作符时,得到的是一个元胞数组。
    % [% B* l' K# m: K. E, F1 y& O; @0 {8 H# J( n, N* \# K, {
    2.1.7函数句柄(取函数地址)- e4 l. f* U9 u5 A# v
    声明:1.用’@’符号直接声明7 j$ p, H$ w- E( V" h  n. a  n9 H& I

    - S2 l! ?+ N" y& p3 e  G' l  q           2.用str2func函数声明
    % @6 S3 w6 Z6 [8 n) i' i' v1 ^# a
    3 v3 Y( i; e& d/ c: d! T+ x函数可以是预定义函数,也可以是用户自定义的函数,声明函数句柄以后,就可以像使用函数名一样使用百句柄了。
    $ R% a) i# U7 M  N) o6 j>>ha=@sum;
    % N6 ?. d( P# W/ l7 l$ p4 M, `>>hb=str2func(‘sum’);
    8 e( s- p6 }" \! T  Y>>functions(ha)       %函数句柄包含的信息; w, V6 m! G7 X- b" G
             ans=
    . l% o$ A, G3 r8 r- L                  function:’sum’$ I9 u5 ~! V- j# ?! ?, q9 G
                      type:’simple’" v, U+ Y0 ^0 ~1 p) e8 L
                      file:’’
    " L) b( {8 Y0 f
    7 K+ ^. Y7 G' s7 k# b函数句柄包含了函数的路径,函数名,类型及可能存在的重载方法,可用functions(function_handle)来显示函数信息。 $ @4 j4 r" W5 U

    3 ~. _( a7 J: l9 y+ z使用函数句柄可以提高程序的运行速度,因为句柄包含了路径信息,系统不需要再每次调用时搜索一遍路径,而是直接找到函数的路径。正因如此,在系统切换工作路径时,不需要将函数文件复制过来就可以同样使用该函数。' x$ o0 J9 m0 Q( Y' g. `: h

    ) K: I0 l# m* ~6 w* V0 M函数句柄的另一种高级用法是声明一个匿名函数句柄,他指向一个表达式4 v. n) B7 x1 B: [( p) w3 t) y4 v
    声明方法:变量名=@(输入参数列表)函数表达式9 Z$ W  v! N* j& Z" I
    >>hd=@(x,y)x.^2+y.^2;
    1 U( z9 t7 T6 k. N7 y  ~) e5 {( Z+ I- ~. `4 Z
    2.1  matlab运算符
    ( h0 d3 a/ N- \" g0 O2.1.1 算术运算符9 j* f% O: j2 F+ D' l/ W
    : F6 p; L0 [+ s1 v
    分为矩阵的运算符和数组的运算符两大类' j+ H, p& s0 o
    ! {7 a6 L) B4 }! |( S! |$ i
    其中矩阵运算符将矩阵作为整体,按线性代数的规则进行运算,而数组运算是在矩阵或数组中的对应元素之间进行的运算
    1 T8 X8 l/ E5 K% z0 n
    $ t! w7 |3 H& W/ _$ J. v矩阵运算符
    2 Q2 d& k* e% F4 X5 Q5 E& b0 v# e8 Y/ z, V
    1、+ ,-:加减  2、*:矩阵相乘  3、/:相除# O6 x( Q) e+ m; R3 Y: N" W

    3 X4 ]+ \+ j( R4 c7 h9 Y9 {* x4、\:矩阵左除,左边为除数  5、^:矩阵的乘方  6、.’ :转置/ a" z3 K( K" L! Y. U; u3 |

    $ d$ c3 w1 M# V- r数组运算中(点运算). l7 G' x; P' A8 ^4 Y6 U  Z" m$ ~2 }
    1、.*:对应元素相乘  2、.^:对应元素乘方  3、./:对应元素相除   4、.\:对应元素左除( \5 |# a, l+ V1 y
    标量与数组的运算,是该标量与数组中每一个元素分别进行的运算。) W" M3 m2 Z" z% Z; t$ S2 b- G
    4 I5 O7 Y) p1 Q  X  u7 r6 ^& [
    2.2  matlab流程控制语句
    ! ?+ g% R. S( |+ o3 ]注意:不要忘了最后的end# `% }  N( q( V$ _% j- t
    ! J/ E5 f9 d) u( ?
    1、if表达式* p2 F7 U/ ]+ K  {, _" D6 h
             语句;
    , {- ?* Q" {3 h/ U
    # n2 C) G; H9 J! a( G4 \9 j- a   end' U9 x9 X" @% n4 X5 D0 q% I- a

    * ^+ F9 W3 F8 R2、if 表达式
    3 o' Q) o" ?3 ]0 z, @' h- K          语句1
    - B# Z- r- D2 _4 T2 T& q/ D$ F8 \% f+ |3 M
       else0 h  n* V4 E5 U$ N# Q
    * A1 f# ^2 `& A5 O; E
              语句2
    3 y7 A3 \9 P& b# F, _2 A' {
    2 ^! N; E" j6 R9 L% g4 I" D+ L, a   end
    8 {6 m) d3 U+ S: w. n8 s2 i& j% x8 z: T. b
    3、switch 表达式
    0 |8 |, I6 `$ B# @4 Y$ A: O1 \! _
    / i* i! J. J4 s: X5 m                  Case 表达式1
    ; M5 U# v+ ]2 q6 T1 }( W7 P, W7 l$ z; D$ b/ \# {
                              语句1, b; w$ \- j5 _" ^
    & I- j/ B, s/ `5 T5 g
                      Case 表达式2
    - e- v3 b* K- X( D. @( h2 n( |4 ?- c$ E
                              语句2
    3 F4 T( n7 L$ p/ [! I3 f# Y! T                  …
    ) a3 z. \  u2 p) ?& G6 S5 B! m8 v  G
                      Otherwise
      `6 |. K2 W4 g$ e" x9 m. o& R+ ]7 h
                              语句n
    4 ~+ f8 t5 ~6 \+ v; u
    3 P5 \# E& ?: L# W% t+ v$ d! |  end
    # d" I- [, x3 j' n* M2 ?. K: x, h& E) o8 a2 I7 Q4 g
    4、★
    1 G" J$ w, v2 M, V& A" l  for  i=表达式6 F4 |. {" U7 u: |4 a

    4 I* d+ Y& S* Q  u0 R                  语句6 I8 j6 c) o$ w) v1 T5 h0 Y$ _) ]' x8 q/ Z

    / N7 P+ j9 w: Q% V4 U   end
    ) f/ e( [2 _8 ]$ Y% s//能够遍历表达式中所有的元素1 s- E9 }1 _6 V* V( r) @
       如:for i={‘abc’,’xyz’}  %i为元胞数组
    , n0 m  L" v( T' {+ y  o1 q) |
    9 L+ z6 x' t7 y) Q+ }                          disp(i{1});; n9 n& b! C9 d  Q5 p$ E, u

    - ~/ e0 g4 M/ k' d3 t: F2 `        end; g! k4 y) S; R: `( b2 H
    - l4 [! M2 n( Q: H1 m
                      输出:abc! R" g0 H8 \0 M; Q' J" ^+ F& }
    " v, ], o. S( P) n" e& Y* o
                                xyz. a3 G7 E, S$ W" [' x3 p$ ~) u- Z
    9 R( g0 C, {+ K) J! h% E# x3 ~
    5、while 表达式
    4 I( l# j& v" o
    7 z4 Q6 g1 p+ i! o, K! X                  语句; b) w3 U* Q/ K( h4 P8 R
    ) j+ g7 k; W4 W/ c- T
       end6 @/ D+ z7 y7 A( C/ r

    " T* L6 S- y" ?9 F* d

    该用户从未签到

    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-6-6 23:58 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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