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

matlab中eval用法

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

0 ^9 D; W- q' n' f. keval的功能简单来说就是可以把字符串当做命令来执行,
0 E/ n- p2 x/ L) k3 y# M7 d0 G9 s! l( o" }
之前没用到的时候对这句话不太懂,百度了一下,看到有人举的例子:
& [/ t- Q4 [1 G5 A+ s) c7 M# W" C) z" U
eval('y=sin(1)')与命令 y=sin(1)等价
( \* M, ~. M; Y: E* c: m4 @+ J) q
. n3 b, a2 \, m8 ]) J$ {emmm看完后虽然懂了基本用法还是一脸懵逼,道理我都懂,但是  这不是自讨无趣吗,直接打命令不是更简单吗?$ C7 j; Y6 h/ o3 F2 U! z: ~( Z. T

3 I: w  w+ J& L2 k( T$ t4 H最近需要把数据按天按时段导出excel我才仔仔细细地研究了一下eval函数的具体用法,真的好用!也指出了遇到的坑,帮助后面像我一样的小白:9 C, n* ]) B+ g. y! r

7 f& Z8 v  p7 v3 d# h3 weval用于循环中是再好不过了,特别是有些变量的名字中含有有规律的数字,比如我们现在要依次把data1,data2,data3写入excel,并命名为data1.xlsx,data2.xlsx,data3.xlsx,
  A0 k& \+ r2 m( M4 O8 V1 i) N
. T, X/ k. H3 u当然你可以写三行:
. j9 h+ [, n" d( f/ M1 [* o* f0 t5 q2 J  v
xlswrirte('data1.xlsx',data1); w) w: |4 m- \' ~2 A# T) D

. l; V7 x" _0 b( F3 Qxlswrirte('data2.xlsx',data2)" ?1 K2 W' }& Y. H* a
/ J8 k! I$ a& U7 e% T
xlswrirte('data3.xlsx',data3)" M" m; ~. c# H( N

/ T' g0 O" A' q8 V" V但是假如现在有1000个这种data1,data2,...,data1000呢
: W9 ?8 h4 o& b% E, Q0 Z% M9 Z; p1 i# e' g  f4 w
这个时候就需要eval出马了,我们也可以只用三行:
" j' Y+ h6 F- c3 J0 s
4 B9 y% t; W- T/ vfor i=1:1000
/ v) \1 }2 {( E& q3 x0 C
; |1 A" n  v; }6 n$ U2 \% I, yeval(['xlswrite(''data',num2str(i),'.xlsx'',','data',num2str(i),')'])
/ t3 U8 A, h5 }1 u; t
/ D3 N4 p* G* Wend
3 A* u2 \+ P9 q' V0 f
  x) q3 C$ K2 N! q1 S* D: U) U% g%注意上面的eval语句语句中第一个data前面有两个'',而xlsx后面也有两个'',这就是给我们初学者埋下的坑哈哈,两个''号中第一个'代表转义字符,意思是两个''号中第二个'号为命令中的'号,不是用来分割字符串文本的!
7 e3 b. j& g. `6 M" o
1 t2 s. B2 d% y0 b3 L- W8 D%使用eval时只需要先把想要表示的语句即命令写好,再用'号分割成一段段字符串,注意上面提到的'可以用作转义字符的情况+ K; w2 W/ k' W' L; E+ ~+ ~9 a

, ?% g% @# w! ~& W$ j+ G最后放一个我用来分表写入excel的实例吧,看起来复杂一点但是道理都是一模一样的:
; ?" _6 P2 y" Z* s4 |5 b: s( D2 F: Y
这个是把2880个变量(15min一个,一天96个,30天2880个,按时间顺序已排好序)每96个变量一个excel,每个变量一个sheet:9 z  e  \( u1 Y; h3 S* m# d  b
& B; X) @9 Q( y

8 U4 P. n- U$ A7 [7 \4 N% J# z5 Z3 y; t+ B6 b
clear. G- S( U3 C& X3 s3 w. g; N0 ^7 V# O8 p
clc" `/ i6 c$ |8 B/ {* w
close all
# G" F, k/ i3 u: \load time_volume_data.mat%载入数据' S2 r0 M8 I% R" n9 q$ ?* |
%把站点流量按天按时段写入excel文件
: \6 I7 a% \# Zm=1;+ Z) p% t8 u! H
day=1;
4 k5 B, V: t2 H, Qfor n=1:2880  L" V+ C/ A+ b) k
    eval(['xlswrite(''data',num2str(day),'.xlsx''',',','data',num2str(n),',','''sheet',num2str(m),''')']);8 W! K& {7 v  }2 H
    if m==96' O% C7 j' y. |) w
        m=0;! w- N( d& W2 z9 }3 f3 M; a
    end4 w. ], P; N% u8 k! H
    if mod(n,96)==0
, y( G5 a4 \' [1 t3 s        day=day+1;8 h0 O6 V+ j4 w) z- ]6 J
    end
1 }/ v1 J7 a0 K  B2 b" ^    m=m+1;
" r* T+ @1 X6 [! q% H- |, H2 Yend
3 _( A/ C- }$ W以上,希望大家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-8-12 15:27 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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