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

matlab中eval用法

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
: u! T/ `' a2 I1 R1 I
eval的功能简单来说就是可以把字符串当做命令来执行,
) q* d/ n( |6 Z  {3 D" @4 z( p$ u* y7 m# {4 J
之前没用到的时候对这句话不太懂,百度了一下,看到有人举的例子:9 O7 ~' p3 t6 w, m! ^

7 ^$ P. b5 `) @6 f# neval('y=sin(1)')与命令 y=sin(1)等价0 `7 a# j5 X3 l9 H8 w

/ y4 E7 L* T. ]emmm看完后虽然懂了基本用法还是一脸懵逼,道理我都懂,但是  这不是自讨无趣吗,直接打命令不是更简单吗?
& S/ ~+ j+ y4 y7 v( o8 G" h$ T
' k/ g8 C& T, M- l最近需要把数据按天按时段导出excel我才仔仔细细地研究了一下eval函数的具体用法,真的好用!也指出了遇到的坑,帮助后面像我一样的小白:0 u, r5 \) r. j! S& A

% k, n: e- ?- }1 J& X' r" W( L/ Keval用于循环中是再好不过了,特别是有些变量的名字中含有有规律的数字,比如我们现在要依次把data1,data2,data3写入excel,并命名为data1.xlsx,data2.xlsx,data3.xlsx,
: A8 d5 T6 j; ?- n+ k; [( a& ?1 d9 J9 ]# z. l5 Y! l8 F
当然你可以写三行:
# d- r! i8 g3 H6 n( I
% a3 ]% F- j, S- |1 P2 Cxlswrirte('data1.xlsx',data1)
$ ~8 |, D" W: ]% P* _
6 o% w( p* B& F% G6 w2 Wxlswrirte('data2.xlsx',data2)  F$ N; h4 [. M% n$ d
% s- J0 }# Y# Y5 ]8 \6 Q' q+ B
xlswrirte('data3.xlsx',data3)
/ A: A* ?% S4 C( m  R+ ]  q1 J& E7 @. B, s5 u# V, F" p
但是假如现在有1000个这种data1,data2,...,data1000呢
3 W4 x( B5 e; n3 d6 B: a. d! ^0 n) C' B' ^  ^
这个时候就需要eval出马了,我们也可以只用三行:& ]9 I; `( T: V( m. v7 q7 ]! d! _+ J

  J) ^% f/ \. P5 mfor i=1:1000! c" y& S: \' _4 l  t! S6 r
# E& A# L& d: i3 X3 t
eval(['xlswrite(''data',num2str(i),'.xlsx'',','data',num2str(i),')'])6 m' P# ?6 V) N* Z
5 Q! v5 w' x7 i& N
end% _1 f# m. H& d2 l" c
- m7 j+ Y7 l5 N) w* W- o
%注意上面的eval语句语句中第一个data前面有两个'',而xlsx后面也有两个'',这就是给我们初学者埋下的坑哈哈,两个''号中第一个'代表转义字符,意思是两个''号中第二个'号为命令中的'号,不是用来分割字符串文本的!7 _$ l7 _' s& L: t+ h

7 t& `- c( d1 Q0 g) {" i2 ?%使用eval时只需要先把想要表示的语句即命令写好,再用'号分割成一段段字符串,注意上面提到的'可以用作转义字符的情况' h. i! z+ _: q. n
+ F+ J$ e2 [8 [: H6 K
最后放一个我用来分表写入excel的实例吧,看起来复杂一点但是道理都是一模一样的:
3 ?0 y8 s, \1 T8 k0 v9 J' M+ t3 e  g- b
这个是把2880个变量(15min一个,一天96个,30天2880个,按时间顺序已排好序)每96个变量一个excel,每个变量一个sheet:6 N7 y, M1 m& z- t3 E# ]2 y

+ u3 G; o9 u! n" W* y% z & z2 a" v7 D* q! O- Q$ l
9 B7 z% E: q' v" j& Y) p5 E5 [
clear
& y5 v& N. j4 f4 p- Zclc
* j+ W" E3 t. i( `close all
- S! \. f" b7 I0 k. B! iload time_volume_data.mat%载入数据
" `8 y9 M4 w: p* a7 n) I%把站点流量按天按时段写入excel文件
' {, ?0 |* N3 zm=1;
. S* I* e, ?# Wday=1;
8 H: S" k, n% u( f7 n3 ~8 }0 \for n=1:2880
( M% \" [* R4 Z    eval(['xlswrite(''data',num2str(day),'.xlsx''',',','data',num2str(n),',','''sheet',num2str(m),''')']);! M5 [# g+ t9 q. P+ I
    if m==96. A2 X' C6 |7 l; k5 V! O
        m=0;% M  S( H# X" U0 ]9 C4 B
    end+ |# O! I% f) ?0 U/ |
    if mod(n,96)==0
  w, a/ s6 F1 T# G% \        day=day+1;
. `/ B' w" F2 [( s  C    end/ k0 L9 O6 j- B* S0 D/ v
    m=m+1;
' l+ D6 c# B. y2 f9 {  R' qend7 W& v4 N9 B9 C1 p. Y+ B
以上,希望大家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-11-24 01:48 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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