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

matlab中eval用法

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-12-21 18:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
! h# m; _+ ~0 v! m; P
eval的功能简单来说就是可以把字符串当做命令来执行,3 C+ _1 ?6 h' h5 ]

1 U4 g  v% B$ n% t$ B4 M8 L* p之前没用到的时候对这句话不太懂,百度了一下,看到有人举的例子:* [- w: D6 n- {3 q0 R  E' Y) S
) S* Y* E& J! R) e. L6 f
eval('y=sin(1)')与命令 y=sin(1)等价0 E4 h' x) k( A1 }2 [' U
7 V( l$ w/ N6 M8 W0 J
emmm看完后虽然懂了基本用法还是一脸懵逼,道理我都懂,但是  这不是自讨无趣吗,直接打命令不是更简单吗?
) n+ R& h- y! M: S! \3 X4 E! R3 A5 p1 x2 Q9 S1 B  A. d
最近需要把数据按天按时段导出excel我才仔仔细细地研究了一下eval函数的具体用法,真的好用!也指出了遇到的坑,帮助后面像我一样的小白:
! i8 g& ~' U- ]) q/ L: v
2 Z# g9 C4 x9 d8 x8 G  |3 [eval用于循环中是再好不过了,特别是有些变量的名字中含有有规律的数字,比如我们现在要依次把data1,data2,data3写入excel,并命名为data1.xlsx,data2.xlsx,data3.xlsx,2 b7 D4 }6 ?$ C5 ~7 X* i$ ~) J

  ]( ^) p2 J. O3 w/ \当然你可以写三行:
! ?+ N2 \$ Z8 Y7 I+ w9 G  v' \5 U/ b* T+ d8 W
xlswrirte('data1.xlsx',data1)# U  |* D/ P/ P+ ^+ G) _( C

" n4 b  Y( C$ i& zxlswrirte('data2.xlsx',data2)4 N# z- D  W( N# S

6 X+ j; h: B; Lxlswrirte('data3.xlsx',data3)8 J0 k$ W; ^/ m! W/ I

8 A+ x; p0 f3 d& O: c但是假如现在有1000个这种data1,data2,...,data1000呢
9 |" r$ d& P# ^+ }$ X9 d. z2 C; j: D+ l
这个时候就需要eval出马了,我们也可以只用三行:
5 @' D! Y% u9 N1 S  J0 i5 ]
; z! }- `, U7 k6 i; T. B( _for i=1:1000! D4 y) A! I" `: k& i+ f

4 c! s8 U! [4 d  xeval(['xlswrite(''data',num2str(i),'.xlsx'',','data',num2str(i),')'])
; q% u* l/ x5 C% s! f' k
3 x' L5 T% D! D/ p9 E& d- i0 ^4 D' a; E, oend; }6 P4 k2 A$ N7 Z; }

: W6 U. L# S, T9 p%注意上面的eval语句语句中第一个data前面有两个'',而xlsx后面也有两个'',这就是给我们初学者埋下的坑哈哈,两个''号中第一个'代表转义字符,意思是两个''号中第二个'号为命令中的'号,不是用来分割字符串文本的!
8 U0 v2 S# H, }1 @# t& O. Y. }; i! r3 V0 k
%使用eval时只需要先把想要表示的语句即命令写好,再用'号分割成一段段字符串,注意上面提到的'可以用作转义字符的情况
5 I$ ?2 t  y; m: }& E/ s: {" w3 ?
最后放一个我用来分表写入excel的实例吧,看起来复杂一点但是道理都是一模一样的:
- ?  g2 @! X0 @9 }
* X- c- b% I8 B2 K$ N这个是把2880个变量(15min一个,一天96个,30天2880个,按时间顺序已排好序)每96个变量一个excel,每个变量一个sheet:2 Y% B$ |7 ?8 i" w9 p
& \# n/ f2 \) d/ ^% H' ~* D- G# _

" B- o7 e& a3 a9 ^3 Y3 g0 G3 v+ z& `$ {8 D
clear  b1 G7 B5 J0 i0 e) t# ^  o
clc
2 W/ U+ ^7 y# ?3 p+ I3 ?close all0 J  [+ \' L8 g
load time_volume_data.mat%载入数据, N* G$ r1 [$ M  Z, v8 g
%把站点流量按天按时段写入excel文件3 c4 \: Y. o4 K" ]! x! ?
m=1;
$ c+ p' [; C* L7 r% V* l: m8 u. qday=1;% n9 R* c2 d9 _: h, }3 d4 s8 H: s
for n=1:2880& ?3 V7 `7 t7 Y0 r  n3 u
    eval(['xlswrite(''data',num2str(day),'.xlsx''',',','data',num2str(n),',','''sheet',num2str(m),''')']);
! k( k8 B2 `) X! Q    if m==96
* `. T5 Y+ |) z1 x$ M9 s" @        m=0;) I1 [8 q& l0 F
    end
. \0 l8 C& I( C% f! ]    if mod(n,96)==02 j& d/ b7 j: E" p9 V" O
        day=day+1;
* s: v4 f4 D8 q1 C    end2 @# R3 J% ~8 N
    m=m+1;
0 k: K, C7 O8 ]1 E6 Mend
- d9 j4 _, k" H) F+ J  {2 e1 K以上,希望大家eval用的愉快!
  • TA的每日心情

    2019-11-29 15:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-12-21 18:59 | 只看该作者
    matlab中eval用法
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-10-31 23:51 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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