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

matlab中eval用法

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
5 F, R" h& C  i  c% Q7 u, K
eval的功能简单来说就是可以把字符串当做命令来执行,
& s1 ~' G6 a& o# u
3 W: \! S# b. q" f8 t8 w/ C7 Q6 g之前没用到的时候对这句话不太懂,百度了一下,看到有人举的例子:8 G) \2 u3 C/ F: X$ q

( w- {+ R: }) t: K- leval('y=sin(1)')与命令 y=sin(1)等价9 x9 ^. J, A% t; O, {
# S. d7 T& t3 ~+ B; l" e
emmm看完后虽然懂了基本用法还是一脸懵逼,道理我都懂,但是  这不是自讨无趣吗,直接打命令不是更简单吗?
# [2 S1 Z  a; A3 \6 |1 p: e2 o- ]( ^/ q2 T7 B- L& S$ ~
最近需要把数据按天按时段导出excel我才仔仔细细地研究了一下eval函数的具体用法,真的好用!也指出了遇到的坑,帮助后面像我一样的小白:
& @4 g* l9 n( ]7 P# ^+ H3 \/ k
/ F* M; y9 [! N. m" [4 neval用于循环中是再好不过了,特别是有些变量的名字中含有有规律的数字,比如我们现在要依次把data1,data2,data3写入excel,并命名为data1.xlsx,data2.xlsx,data3.xlsx,2 |2 {% u, Z& s, N. s* V

7 g9 F  M! T, E' G8 Z8 O! e4 R当然你可以写三行:
3 w9 o4 ]. x! J1 L* K) ^5 l+ l4 A" [, Z: I3 H/ E0 e  e
xlswrirte('data1.xlsx',data1)
9 u  \, j/ {; |: g, t* D" E$ m
' f. C! L1 l, f) R4 J1 D8 Z4 Bxlswrirte('data2.xlsx',data2)
  G! B& d3 M4 K: w+ j
' w' O$ _- F+ ?* R) d/ mxlswrirte('data3.xlsx',data3)8 `; f3 _' `. _+ n, }1 I
; r8 x0 i% h1 i' H8 K( P( M: P- S
但是假如现在有1000个这种data1,data2,...,data1000呢
( J" o' J% ]3 ]/ t
3 {' G% v, `0 ^8 y这个时候就需要eval出马了,我们也可以只用三行:7 B) Q/ l+ l. ^0 [2 \2 v- W

4 B7 |$ G0 F, Qfor i=1:10004 K7 c3 B  H* |% w# U0 v

8 t( R. n8 f6 I) Ieval(['xlswrite(''data',num2str(i),'.xlsx'',','data',num2str(i),')'])- G0 s, D0 h8 i

7 ^7 y+ R. s4 Y7 V5 @2 r5 Qend0 t/ P+ F4 R' V" h
3 b3 H% i- ?# _" I* P; R) k
%注意上面的eval语句语句中第一个data前面有两个'',而xlsx后面也有两个'',这就是给我们初学者埋下的坑哈哈,两个''号中第一个'代表转义字符,意思是两个''号中第二个'号为命令中的'号,不是用来分割字符串文本的!
; D0 S) Z/ J9 n" B( {( ^$ |) W7 M' w5 ]& u" k/ c3 E! K* h9 M# U
%使用eval时只需要先把想要表示的语句即命令写好,再用'号分割成一段段字符串,注意上面提到的'可以用作转义字符的情况
2 b( y4 V. C1 z6 m  [5 |
' s2 k; c/ y4 i& l# J; M最后放一个我用来分表写入excel的实例吧,看起来复杂一点但是道理都是一模一样的:
: N* U9 w7 p4 O0 O# P2 W; I
: u7 |* ]( E+ S4 h5 E, G. t5 Q这个是把2880个变量(15min一个,一天96个,30天2880个,按时间顺序已排好序)每96个变量一个excel,每个变量一个sheet:
" [5 [- @/ B! @6 }4 ~9 s
. F, l" h/ X. X) b+ F) d7 h : U1 G4 K8 y9 T% X2 ^

% }; Z8 u, A/ ~3 s" ]4 sclear
" X* V+ U9 `7 Kclc6 |- \: [4 q: ~3 o$ A
close all
; N6 c* L* G$ m! L$ N: Iload time_volume_data.mat%载入数据
0 V5 @2 w' @# K; k" a: D, B: w%把站点流量按天按时段写入excel文件
; {. d0 J( P, d" Xm=1;
3 H9 U4 k+ f- W- d, P/ Nday=1;2 U  u* S# C8 k3 ~  h! i
for n=1:2880
, a: `3 z- e! M8 }0 W! D0 e/ l: d    eval(['xlswrite(''data',num2str(day),'.xlsx''',',','data',num2str(n),',','''sheet',num2str(m),''')']);/ b+ `- G  Y  E5 }0 l8 h. K  F
    if m==96
, @8 w% N: K$ `8 \& `, w0 l% k        m=0;
4 W4 ?$ X1 R/ S( n* Y; U# @    end( H  b' _* P9 e9 t; g
    if mod(n,96)==0; Q5 k# _- U+ R, l5 \+ U
        day=day+1;
8 W* Y/ F# y0 ?0 D, g; k% w9 C    end" O( m8 ]. ?$ K9 L. d: Q5 D
    m=m+1;
' Y/ a+ h4 _" d* R6 j. \end
3 L8 N  P& m7 [1 H& e3 J以上,希望大家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 11:02 , Processed in 0.171875 second(s), 23 queries , Gzip On.

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

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

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