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

matlab中eval用法

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
" Q; @& Y1 y# X  e2 }
eval的功能简单来说就是可以把字符串当做命令来执行,
1 g7 ], H2 t7 [& o) Z, T3 ^+ r; d: m* x9 Y# T6 j4 b
之前没用到的时候对这句话不太懂,百度了一下,看到有人举的例子:8 o+ V: F9 G2 `

4 B6 S9 P3 h, M0 k6 r+ T# H8 ueval('y=sin(1)')与命令 y=sin(1)等价
5 B8 Q: b+ j& W; A7 k2 I' m$ Y
8 H7 m# l) y& T5 i3 femmm看完后虽然懂了基本用法还是一脸懵逼,道理我都懂,但是  这不是自讨无趣吗,直接打命令不是更简单吗?
2 m1 \& a, W! n( G6 ^1 x; K
$ h/ q+ v) C# h最近需要把数据按天按时段导出excel我才仔仔细细地研究了一下eval函数的具体用法,真的好用!也指出了遇到的坑,帮助后面像我一样的小白:0 q6 K* p8 V$ r! G
9 c% K7 g6 f; a# x
eval用于循环中是再好不过了,特别是有些变量的名字中含有有规律的数字,比如我们现在要依次把data1,data2,data3写入excel,并命名为data1.xlsx,data2.xlsx,data3.xlsx,
( o7 m; P2 G' P
# Z7 [  B! @0 v" f( e/ a* W当然你可以写三行:! k* B6 b6 Q* {6 |
  H& p4 A% t! M  w! S6 S
xlswrirte('data1.xlsx',data1)0 s" m) V7 p8 D2 [. [

) j5 B& @1 ?+ T4 n2 Wxlswrirte('data2.xlsx',data2)
$ M- M9 O. Q* {0 W: P) q
& z* h& K7 i# U2 A$ Gxlswrirte('data3.xlsx',data3)
2 {# m* ^' W; Q+ ^' ]! V) L2 {% O- y8 l+ i& X7 d+ `9 Y
但是假如现在有1000个这种data1,data2,...,data1000呢9 c1 W1 y8 ?" L+ H% U7 K

8 g8 X, Z2 w: Z8 R这个时候就需要eval出马了,我们也可以只用三行:. _7 J) z8 J# {# H; U

; l/ b& H7 x, l2 c6 a0 Sfor i=1:10007 r6 I- U' f  \4 q5 T

8 D% ]/ G: P+ f/ seval(['xlswrite(''data',num2str(i),'.xlsx'',','data',num2str(i),')'])
; ~( n8 n4 T% s" t6 @; T! E  y  @
end
: Z- g# ^3 l% Y2 x; @$ y) T
/ C; D& \  O; a' N; |0 k6 f! s) U%注意上面的eval语句语句中第一个data前面有两个'',而xlsx后面也有两个'',这就是给我们初学者埋下的坑哈哈,两个''号中第一个'代表转义字符,意思是两个''号中第二个'号为命令中的'号,不是用来分割字符串文本的!
- R2 W1 x# u9 h5 d. j' t6 @. M- Q
%使用eval时只需要先把想要表示的语句即命令写好,再用'号分割成一段段字符串,注意上面提到的'可以用作转义字符的情况! O" l' Z+ S! ], R7 d  q& ^
0 r- F; T5 h/ c; F% `7 H3 T
最后放一个我用来分表写入excel的实例吧,看起来复杂一点但是道理都是一模一样的:
, }+ Y; J! d" `2 L
5 A' I% J# i' A9 y3 m, ]. ~这个是把2880个变量(15min一个,一天96个,30天2880个,按时间顺序已排好序)每96个变量一个excel,每个变量一个sheet:
3 Q- W5 x& ^- R
' ~, M0 m2 y; P9 F
3 }. Q' |1 R; g& K- ?9 Z1 Q1 n4 u$ A; W" s2 `
clear8 b4 V" M0 b- F; p  Z0 t  ^
clc7 z! S1 m& t0 w. E. I
close all
' w5 ^$ \- i6 |2 `5 O$ Tload time_volume_data.mat%载入数据
* t0 [) [. n# E%把站点流量按天按时段写入excel文件0 R, R% z. ~* R
m=1;
& ?0 e1 x1 a, {  I1 ~+ Q2 Aday=1;3 w2 M4 z$ a/ V
for n=1:2880! U5 x& p7 j1 d
    eval(['xlswrite(''data',num2str(day),'.xlsx''',',','data',num2str(n),',','''sheet',num2str(m),''')']);0 a0 W* L; q# O- A$ ]
    if m==96
  C9 J& @/ }- ]. M6 f        m=0;
! K; M3 Z1 U  z: ]    end2 \  N; g! x) x, f, Z- M
    if mod(n,96)==0
: ~1 C$ ]5 o' O% h        day=day+1;
# E1 ~7 @* Q3 v* m! g3 ^- C& \% |" E1 L    end: o+ S2 f3 V% |8 _3 v3 F6 x
    m=m+1;* J$ P$ K7 i- M, l/ u
end$ g% x9 \: {7 v9 e/ I! b! T8 }3 N
以上,希望大家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-6-21 19:06 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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