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

matlab中eval用法

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

9 \- P0 I2 o3 K' D% Teval的功能简单来说就是可以把字符串当做命令来执行,, C+ u8 I* D8 B: V- j3 e$ f
4 K- r: q# p$ N$ m
之前没用到的时候对这句话不太懂,百度了一下,看到有人举的例子:* `. |; T' w) h4 P$ y

7 I) e- {( b4 qeval('y=sin(1)')与命令 y=sin(1)等价
0 c0 N0 J" t: W+ U9 s0 ?1 Q9 n$ @8 p" P/ R. Q$ S# |
emmm看完后虽然懂了基本用法还是一脸懵逼,道理我都懂,但是  这不是自讨无趣吗,直接打命令不是更简单吗?
  D3 _" A3 v, g, n0 ?
6 J" h! A' ^, w2 A* u) P8 b: X* j最近需要把数据按天按时段导出excel我才仔仔细细地研究了一下eval函数的具体用法,真的好用!也指出了遇到的坑,帮助后面像我一样的小白:
1 V4 R; [+ `! k# J4 i, t( l
9 }. C5 H. T! k( r1 E( @; \eval用于循环中是再好不过了,特别是有些变量的名字中含有有规律的数字,比如我们现在要依次把data1,data2,data3写入excel,并命名为data1.xlsx,data2.xlsx,data3.xlsx,* {" P$ n. i  e

+ g0 X0 E* {* N2 q: T" P- e+ T当然你可以写三行:, t1 ?9 o2 u9 r4 b
6 g* P' A( h( _+ n! ^' r4 W
xlswrirte('data1.xlsx',data1)
; D. n3 b) \8 @
+ d* v3 @& j9 j# O3 N7 E( b' ~xlswrirte('data2.xlsx',data2)$ p5 W( {, y) J: b5 o4 v

$ O& C! n/ o" ^5 hxlswrirte('data3.xlsx',data3)( T2 ^$ c, Y) x$ x) l
4 T1 d# I% z: s
但是假如现在有1000个这种data1,data2,...,data1000呢
+ K1 a' O" n2 X) Y0 O9 N" K8 [6 q5 \4 A- O6 i
这个时候就需要eval出马了,我们也可以只用三行:
. d  J3 p+ z) g, [- ^, I$ B2 `7 Q9 D# W' h' j
for i=1:10001 t; G+ e: g0 W
/ W" M8 t- U. p5 F0 @; |
eval(['xlswrite(''data',num2str(i),'.xlsx'',','data',num2str(i),')']), V% b: L( d# b) J
8 S; A  y. L1 ?4 S: K
end! l# n! V1 |# W" {3 s1 B* W8 m0 G

: G  X- F0 `; _5 [%注意上面的eval语句语句中第一个data前面有两个'',而xlsx后面也有两个'',这就是给我们初学者埋下的坑哈哈,两个''号中第一个'代表转义字符,意思是两个''号中第二个'号为命令中的'号,不是用来分割字符串文本的!
# x; ]& H/ y1 h# j" d9 b  I& c7 u6 _% K2 J6 z
%使用eval时只需要先把想要表示的语句即命令写好,再用'号分割成一段段字符串,注意上面提到的'可以用作转义字符的情况
7 U* H+ Q3 Y* ?7 P5 ~' h: n. L) V( _- s. q3 M& J$ ?6 J
最后放一个我用来分表写入excel的实例吧,看起来复杂一点但是道理都是一模一样的:1 H1 e2 B5 s3 Z$ h3 F8 c0 u

5 `1 r! i$ U5 f2 Q这个是把2880个变量(15min一个,一天96个,30天2880个,按时间顺序已排好序)每96个变量一个excel,每个变量一个sheet:
6 L7 `6 Q& v9 O$ j) @
! D3 e/ l& B0 v8 _8 @
& Z' D% w3 ]8 _. Z- T
! l' w# t. v  G- Y- o4 O  a4 H' v6 Zclear
" o$ \& C: [' r  E8 f$ Fclc- C- _! ?2 [/ j- S! e
close all
' ^, I- |0 U7 Y9 p+ _2 tload time_volume_data.mat%载入数据
" f' O" b; \$ S! h6 J" ~%把站点流量按天按时段写入excel文件$ m1 y4 T! X" n' [( e# }: K  g+ I
m=1;# U; v) n$ [4 x9 S, M
day=1;! c- b( D6 r( P% d( h5 ^0 n; J
for n=1:28806 M2 s, D9 o& B* S# H" ^; p
    eval(['xlswrite(''data',num2str(day),'.xlsx''',',','data',num2str(n),',','''sheet',num2str(m),''')']);0 {7 G" p: D& O* {% `/ c, I
    if m==966 f! f; P& J; i* {* E) T
        m=0;
7 H% c% y, f4 |9 j    end; Z  p0 X' ~7 P) V
    if mod(n,96)==0# W/ a5 G" e+ \/ H. G: m
        day=day+1;. M' x( P& H6 B& y; L
    end
. i  U7 c, s- g! ]4 n    m=m+1;; P- k! X' M2 ~" X+ a
end
3 D: j* L6 K1 X) ~. y以上,希望大家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-2 05:50 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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