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

matlab中eval用法

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

5 k, e2 d! N7 w! n2 keval的功能简单来说就是可以把字符串当做命令来执行,
  w* E# T* W$ X/ s3 |1 k  ?; ?) d' Z. R! \( T/ U# U" z
之前没用到的时候对这句话不太懂,百度了一下,看到有人举的例子:! G/ J) `. g$ |" i
9 j; A' @5 \6 ^7 |" y
eval('y=sin(1)')与命令 y=sin(1)等价
/ L1 C0 c+ v4 \
, ~8 D1 r. U$ J! Oemmm看完后虽然懂了基本用法还是一脸懵逼,道理我都懂,但是  这不是自讨无趣吗,直接打命令不是更简单吗?
: }" W. J8 ^' N' Z- W# S* O3 C/ S5 [; ^& I" U5 u+ U8 g. ~2 n5 y
最近需要把数据按天按时段导出excel我才仔仔细细地研究了一下eval函数的具体用法,真的好用!也指出了遇到的坑,帮助后面像我一样的小白:
' U  n% W& D! J  Q" H2 l3 c
: v, O' g* H' `% |( f  j0 aeval用于循环中是再好不过了,特别是有些变量的名字中含有有规律的数字,比如我们现在要依次把data1,data2,data3写入excel,并命名为data1.xlsx,data2.xlsx,data3.xlsx,
) a, u, i" S, p( A' _8 k. W* D# Q
* G$ Z2 h" b% i0 v当然你可以写三行:
4 _1 s. f6 M8 v# m# }( t' h. K
, m6 N! a8 q! j, Uxlswrirte('data1.xlsx',data1)
7 D( U: z& M1 V/ z
3 Y" ]& {& ^# m$ {6 jxlswrirte('data2.xlsx',data2)% v4 ]" t2 X0 L2 B+ e) ^% Z: Y  E
4 }; _7 e: f2 t' t
xlswrirte('data3.xlsx',data3)! @& D5 j+ r' q/ e/ n
4 H3 h3 b2 g' D$ \2 X1 |
但是假如现在有1000个这种data1,data2,...,data1000呢( k9 Y. U/ ~5 ?$ f5 Y  g

% w, s  B* I* r/ J这个时候就需要eval出马了,我们也可以只用三行:, \) V. n; A/ B9 L2 w/ m, z; j

5 c, H3 n9 J% z; {0 C$ Kfor i=1:1000
' a) `$ A+ G  T+ z% `6 Y$ f0 n3 ^$ b' R
eval(['xlswrite(''data',num2str(i),'.xlsx'',','data',num2str(i),')'])4 B2 u3 I# X- j/ u. s, v# _
. \5 {: s# R) H/ C
end6 W& V/ U- `+ ?: J/ C$ K0 ^" D7 ^

1 ~: s! ?# X8 f1 B%注意上面的eval语句语句中第一个data前面有两个'',而xlsx后面也有两个'',这就是给我们初学者埋下的坑哈哈,两个''号中第一个'代表转义字符,意思是两个''号中第二个'号为命令中的'号,不是用来分割字符串文本的!
( m+ y% T# v  t, H' T  e* F& _0 o: T- w  ]
%使用eval时只需要先把想要表示的语句即命令写好,再用'号分割成一段段字符串,注意上面提到的'可以用作转义字符的情况; I" v% h" g0 }+ F4 k. {& J; {) D) ^- K
4 [8 E" b0 r( G) N3 j
最后放一个我用来分表写入excel的实例吧,看起来复杂一点但是道理都是一模一样的:
, o$ j1 ^* j4 a6 c5 b$ E- o- V+ m- G2 d
这个是把2880个变量(15min一个,一天96个,30天2880个,按时间顺序已排好序)每96个变量一个excel,每个变量一个sheet:
; F2 r4 T( m, [& V$ d" B% _% W
: {" i- Y/ J! A$ x8 T% }) I
) w7 |9 J% X7 E- S) }- h! R7 Q! [6 ?+ d
clear
6 a+ p$ `$ x! X3 |$ g+ d  Gclc9 R5 I5 W( b  t# v  A$ k( M
close all
- y& B  b( o/ Q, a* O7 }( V8 U" ^load time_volume_data.mat%载入数据
9 Y/ r! @8 l4 ]$ r- x- `4 H%把站点流量按天按时段写入excel文件; N, K. O% `! W4 S6 D
m=1;
1 ]' c0 x: I/ O+ r. ?; s' xday=1;) T7 b% x, f: s6 _
for n=1:2880
# p4 O1 u0 x8 H( g1 p' E) ~    eval(['xlswrite(''data',num2str(day),'.xlsx''',',','data',num2str(n),',','''sheet',num2str(m),''')']);
; N! E0 ]! v) d& z+ q! Q    if m==967 u0 \8 l" Q6 N' Q% f2 H
        m=0;3 k! K! y+ z. ^2 y9 z
    end6 d0 }* B; ?6 T  c, O
    if mod(n,96)==01 J/ D" N3 r1 M/ S$ ?+ U
        day=day+1;
  n& g" V) c; }. G% G% I8 g% L    end  M) Y$ L4 ?2 }9 g7 R
    m=m+1;
) X% q1 a+ }& V# g  ]end8 x4 c7 N& y. R5 u
以上,希望大家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-8-1 02:39 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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