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

matlab中eval用法

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

' ~9 C8 i0 [6 xeval的功能简单来说就是可以把字符串当做命令来执行,
: l3 v( S$ D  i# S" P* O2 ]! q5 Y/ j9 s& D- |
之前没用到的时候对这句话不太懂,百度了一下,看到有人举的例子:
9 H& L0 e$ T1 `( a4 p" A4 e# z, C& t
( O/ g" F# v3 Y8 Beval('y=sin(1)')与命令 y=sin(1)等价; e& Y9 N" ?$ \: I; ~2 ?

$ l0 Q2 _: n$ c1 D+ S! k# qemmm看完后虽然懂了基本用法还是一脸懵逼,道理我都懂,但是  这不是自讨无趣吗,直接打命令不是更简单吗?, d% P4 _" r6 h9 o: \

4 n  k. C- G" O0 y最近需要把数据按天按时段导出excel我才仔仔细细地研究了一下eval函数的具体用法,真的好用!也指出了遇到的坑,帮助后面像我一样的小白:8 O( I" A' F  \2 |* v
; x/ Y- m' b8 n5 ]
eval用于循环中是再好不过了,特别是有些变量的名字中含有有规律的数字,比如我们现在要依次把data1,data2,data3写入excel,并命名为data1.xlsx,data2.xlsx,data3.xlsx,
: s6 v; ~! g8 z" Y: ~% \1 b+ ~
2 v+ U1 I7 D0 o$ X. R当然你可以写三行:4 I3 X7 N* Y) u% A, s

1 ^1 e9 j. o% k) X1 W8 hxlswrirte('data1.xlsx',data1)2 Q: f, u1 ~3 O  I3 I

  C  E! Q0 w; I- s/ x! _5 nxlswrirte('data2.xlsx',data2)
% {0 p+ z$ v5 q' ~  @; L  o& ]8 u1 R! |* Z& t: V
xlswrirte('data3.xlsx',data3)& B+ |+ W) W, x& O
4 N, F  m% {5 f# }: i1 d( ]: x9 n
但是假如现在有1000个这种data1,data2,...,data1000呢( ?7 T! `& X' p! \1 U
! g& M# l1 ?4 K% z' b) _
这个时候就需要eval出马了,我们也可以只用三行:1 O. F! @0 W6 F" O+ B7 V

  J( A  o$ [, _, ^) ^# Rfor i=1:1000: `% u. _$ M9 G6 s
1 C! j& }0 O. S) p$ T9 A$ W% |
eval(['xlswrite(''data',num2str(i),'.xlsx'',','data',num2str(i),')'])
5 h  t/ S/ u/ a7 R5 Q+ A9 I8 i( }! c( ]7 x8 W$ b$ H
end+ \& k+ z& B6 r# K' B* t

: \4 {" }: {% v  v/ j; Q%注意上面的eval语句语句中第一个data前面有两个'',而xlsx后面也有两个'',这就是给我们初学者埋下的坑哈哈,两个''号中第一个'代表转义字符,意思是两个''号中第二个'号为命令中的'号,不是用来分割字符串文本的!
- G( X- Z7 b6 _8 W0 a9 ~" r5 z! a% n2 B
%使用eval时只需要先把想要表示的语句即命令写好,再用'号分割成一段段字符串,注意上面提到的'可以用作转义字符的情况" B/ w# u6 G% ?6 e' g
* A- O. n1 \; l5 q$ ~, B
最后放一个我用来分表写入excel的实例吧,看起来复杂一点但是道理都是一模一样的:
4 k+ V4 P0 F! g& K- \
" i4 k* m$ d7 }1 ?2 O8 |( o# C2 p这个是把2880个变量(15min一个,一天96个,30天2880个,按时间顺序已排好序)每96个变量一个excel,每个变量一个sheet:
' v' t* `  P! i9 \% ?0 [- x
# J4 Y) h( ~- k ) Z! n) B2 O4 e3 S& E# n

; W# k: Z8 P: X* z2 Eclear* }* _' k' l* ?: g& q# g; e' A
clc
+ r% ]1 ^+ h: |# _close all  |* f7 D! Z# s. b0 l4 {% ~! q
load time_volume_data.mat%载入数据) i% ~) o8 c, _1 ~, B5 `4 F5 B" W
%把站点流量按天按时段写入excel文件& `+ u) T3 ~, F! r! m
m=1;
& U, C: `6 ^/ Z1 Nday=1;
3 y# N. V0 F: _: {/ T& a& y+ X! efor n=1:2880
( r4 @8 a8 X/ h6 O0 k    eval(['xlswrite(''data',num2str(day),'.xlsx''',',','data',num2str(n),',','''sheet',num2str(m),''')']);. v) C% t. Z& Q# Y
    if m==967 r6 C* u5 V/ y" n' B% M$ {) r: D, `
        m=0;
  V) [. c9 Y1 ]9 E0 c' W5 z    end! b: b6 F: B3 t
    if mod(n,96)==02 L) r- V! Z" x' M$ t+ Z
        day=day+1;# ?- n4 |& U; T, j
    end& V5 v$ H  t- P& s0 w
    m=m+1;
6 j7 R7 A8 [( p2 t% U2 w9 d& q2 \. m- Dend
6 O, r2 ^8 T# @" `1 M以上,希望大家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 04:02 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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