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

matlab中eval用法

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

0 s; |& n* z! h/ Q0 T7 z; m" Meval的功能简单来说就是可以把字符串当做命令来执行,
# F  P7 @- R2 C3 O$ C) C9 f
# d* X( ~% |( m9 E7 X之前没用到的时候对这句话不太懂,百度了一下,看到有人举的例子:! L. W. _8 G0 ~) j6 C, N0 Y7 W

5 i% E7 t5 q1 c1 X# Peval('y=sin(1)')与命令 y=sin(1)等价
& l) ^/ ?  v" I7 G' k* M/ x: E( _$ r+ ]# X
emmm看完后虽然懂了基本用法还是一脸懵逼,道理我都懂,但是  这不是自讨无趣吗,直接打命令不是更简单吗?
2 |; g4 P+ H  \* F; f! O7 N- y; [  {! C2 P8 p) s: l+ E2 `
最近需要把数据按天按时段导出excel我才仔仔细细地研究了一下eval函数的具体用法,真的好用!也指出了遇到的坑,帮助后面像我一样的小白:' i1 {* m( B" g
- U9 u& f+ h3 k$ v! {6 {
eval用于循环中是再好不过了,特别是有些变量的名字中含有有规律的数字,比如我们现在要依次把data1,data2,data3写入excel,并命名为data1.xlsx,data2.xlsx,data3.xlsx,
! T; s" f* _" f# N) Y# M5 i* U* K2 A' D0 r, B6 a6 B
当然你可以写三行:
  y7 S  b: M3 u/ L# T+ c7 H& p: t0 Q6 v' Q
xlswrirte('data1.xlsx',data1)8 x+ g9 ]# Q- ~
+ r0 h0 n) L5 }/ W; z/ U
xlswrirte('data2.xlsx',data2)
) ?. E8 B/ A% a' c. p4 X  j! v# D+ |" D2 r
xlswrirte('data3.xlsx',data3)- x" u$ A$ k: \: W; q# z
8 o1 g) j. [6 K* b/ a. r
但是假如现在有1000个这种data1,data2,...,data1000呢. i4 @! G+ [) L. i) K; m. y4 [

# H3 F4 c/ z8 W2 u$ |5 G2 I/ y这个时候就需要eval出马了,我们也可以只用三行:
. s7 }6 a$ D# F7 ^
8 {4 U7 ?* G2 B4 z9 a$ a$ J) y4 xfor i=1:10003 I8 m) @1 {: m# X3 l2 y

$ p( o" g5 J/ o% I5 [, b( Ceval(['xlswrite(''data',num2str(i),'.xlsx'',','data',num2str(i),')'])
5 g; X( l2 E& |/ p7 j1 t7 @5 \4 f& R. Q% K: t
end+ ]4 O. e( Y! i( V* Y- y& w/ x3 ^

/ G% K- ^* m6 i& |5 p: T$ J%注意上面的eval语句语句中第一个data前面有两个'',而xlsx后面也有两个'',这就是给我们初学者埋下的坑哈哈,两个''号中第一个'代表转义字符,意思是两个''号中第二个'号为命令中的'号,不是用来分割字符串文本的!
" K4 }0 Y, f% C4 h
$ x9 \( B# x& R2 }$ v. m%使用eval时只需要先把想要表示的语句即命令写好,再用'号分割成一段段字符串,注意上面提到的'可以用作转义字符的情况
/ |8 H5 p5 W+ [' H) E- E
. u2 l$ r7 s% V& E( h+ a) ~最后放一个我用来分表写入excel的实例吧,看起来复杂一点但是道理都是一模一样的:
& ~" T' \; L. J
" \( ~. t( |1 P( t这个是把2880个变量(15min一个,一天96个,30天2880个,按时间顺序已排好序)每96个变量一个excel,每个变量一个sheet:0 L# r3 t' Y2 N3 m4 C1 w. g, ]6 h
% E  @  O9 g7 H/ i$ g! @. G! E% h

5 G. x) d3 y" `" V8 |# i% @* |2 a) E
clear6 P+ [/ N( Q6 ?  p; o6 F
clc
  u6 t, G" ~! |close all
( X9 ]$ ~5 G7 G! D3 e  B$ [  Fload time_volume_data.mat%载入数据
# W' L4 j0 |, Y3 @5 I! K: B%把站点流量按天按时段写入excel文件
2 s% S0 \; O! Um=1;% K+ m; k6 Z0 h* m; H; K! q
day=1;
. G" K; ^4 m1 M. z2 t- Wfor n=1:2880
) Q* M( l  V3 X# |6 c& z% I    eval(['xlswrite(''data',num2str(day),'.xlsx''',',','data',num2str(n),',','''sheet',num2str(m),''')']);% }' J/ m) i+ D) M# S8 N
    if m==96! Z" Z6 e- j7 Z1 s6 o
        m=0;
& b  ^! Y4 \& [    end% l+ V/ H1 x+ Z6 e( v0 s
    if mod(n,96)==0  o) ]7 N. H8 p! q. x
        day=day+1;6 t, b. k1 [- O: h
    end, s  D' |5 J$ m) ^# {
    m=m+1;! R* R0 l9 q" |- T
end) e: M& e/ r6 l5 i. f
以上,希望大家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-6 14:44 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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