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

matlab中eval用法

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

4 n) ?6 r1 u4 r7 w/ t( A9 ?eval的功能简单来说就是可以把字符串当做命令来执行,4 @7 M* Y6 o5 J$ E

- Z% u  v) Q6 a. e/ X& S, n之前没用到的时候对这句话不太懂,百度了一下,看到有人举的例子:
2 k( H- R( s$ w6 ~4 B
- P9 v: s+ C) X7 i) z  a" heval('y=sin(1)')与命令 y=sin(1)等价
0 U1 s% N/ ?; D! }: [
4 c2 ~! Y# c2 X: w! [( l$ Aemmm看完后虽然懂了基本用法还是一脸懵逼,道理我都懂,但是  这不是自讨无趣吗,直接打命令不是更简单吗?
* }9 e( D* ]+ P9 C3 T8 r4 W9 A
0 _5 {  t$ m8 e6 T5 i. f4 s最近需要把数据按天按时段导出excel我才仔仔细细地研究了一下eval函数的具体用法,真的好用!也指出了遇到的坑,帮助后面像我一样的小白:
! e5 ]5 w  }0 |0 H2 e8 q9 q! ^4 _1 W' u" c9 O( A
eval用于循环中是再好不过了,特别是有些变量的名字中含有有规律的数字,比如我们现在要依次把data1,data2,data3写入excel,并命名为data1.xlsx,data2.xlsx,data3.xlsx,# C& x' j) Y8 ?

# ^1 F9 @4 `  G  ]当然你可以写三行:
7 X( O" Q' ?$ B: ~3 y- e
1 V9 b0 O3 u' `  D  dxlswrirte('data1.xlsx',data1)+ P- d  e% Z, i

8 l3 N0 _( G! Y5 Q9 q" f! O1 h$ ^xlswrirte('data2.xlsx',data2)# E0 Z2 A* ], ^3 }
3 |7 e, e' ~* v: v6 {9 z% ?5 @' q% ?9 s
xlswrirte('data3.xlsx',data3)
/ P: V/ _# x! d' _; w
0 E0 p. F9 f6 B但是假如现在有1000个这种data1,data2,...,data1000呢, z# o) K7 i7 k" u2 u1 g) k5 r

: p; o& L5 J4 h# }) f这个时候就需要eval出马了,我们也可以只用三行:
# d; ]. L8 e+ _" [6 L$ b1 A0 m- e' b+ B
for i=1:1000- ~- k, Y  y- y* _

& d# _% O2 g1 Q% Jeval(['xlswrite(''data',num2str(i),'.xlsx'',','data',num2str(i),')'])% t7 y$ _8 [; F! Z

* y1 o6 F% ^0 A4 ~9 Send
( M  x1 n- b. A. ?1 D( f
/ ]" j9 c6 G* z6 S, }%注意上面的eval语句语句中第一个data前面有两个'',而xlsx后面也有两个'',这就是给我们初学者埋下的坑哈哈,两个''号中第一个'代表转义字符,意思是两个''号中第二个'号为命令中的'号,不是用来分割字符串文本的!" {) B* v4 ^" M" y+ H5 w
9 e9 ?4 X/ i) ~$ d
%使用eval时只需要先把想要表示的语句即命令写好,再用'号分割成一段段字符串,注意上面提到的'可以用作转义字符的情况
' t0 _. ]& {* X. k  U* o
3 m0 S; X! l" P2 b7 @  s" D最后放一个我用来分表写入excel的实例吧,看起来复杂一点但是道理都是一模一样的:
" u% W/ z2 H5 I6 D8 `
: `- r7 s1 t; ~; G' p- l( [这个是把2880个变量(15min一个,一天96个,30天2880个,按时间顺序已排好序)每96个变量一个excel,每个变量一个sheet:
- x- d! s, ?% o7 y  |, m9 o( n! w# |+ B7 ~

% N2 |5 k  r6 ^' Z( k/ j4 H7 o
( {2 K$ c0 j1 O; E- w0 b5 zclear) S% ?8 B( o5 N' n2 i4 Z. d- s1 v
clc; k3 n* @' O# K2 O- O* J
close all. g7 {, v. B4 F/ F
load time_volume_data.mat%载入数据
" o. T$ s& O( `* k%把站点流量按天按时段写入excel文件0 V5 d- P2 w: [, A8 k& w% ^
m=1;
9 E" Q2 m# |4 {, C; y5 Dday=1;) E0 K( Z7 C3 N  A
for n=1:2880
& ?3 ?- L  x5 a" o+ ~6 b! @+ u    eval(['xlswrite(''data',num2str(day),'.xlsx''',',','data',num2str(n),',','''sheet',num2str(m),''')']);
& d0 G' v8 e8 O    if m==961 r# F- K0 @9 f3 Q1 l- _
        m=0;
% a. Q' N+ A. p! S    end6 k( \4 c, ~; ^3 u  N3 i: F
    if mod(n,96)==0- ?. M0 q5 T  o6 W2 R1 k
        day=day+1;1 X. U& }2 y& H% R- R
    end* B) M7 G& w$ L6 }* Z
    m=m+1;$ [( `5 @0 y. Z# v5 {
end
! f9 [7 m2 @2 s- {以上,希望大家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 05:49 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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