eval及其替代 matlab20170313

函数:eval

功能:执行字符串形式的语句

格式:eval(expression)

备注:输入expression为字符串形式的matlab函数语句

使用示例

expression = input('Enter the name of a matrix','s');

if (exist(expression,'var'))

mesh(eval('expression'))

end


替代eval使用的N中情况

为什么要在某些情况下避免使用eval?

eval比较低效,代码可读性差,难以调试

matlab会在第一次执行代码的时候编译它以提高以后的执行速度,但存在eval的代码是在运行时(runtime)改变的,所以matlab无法编译。

可替代的情况

1、操作连续名称的变量

通常会使用eval生成一系列具有连续名称的变量,例如A1,A2,A3...;这种做法违背了matlab向量化操作的原理。更好的解决办法是将相关的数据存储到一个三维矩阵中或胞元数组中。

eval(['A', int2str(n),' = magic(n)'])

替换为

numArrays = 10;
A = cell(numArrays, 1);
for n = 1:numArrays
    A{n} = magic(n);
end

2、操作连续名称的文件

例如保存一些列具有连续名称的文件

eval(['save myfile', int2str(n), '.mat'])

借用良好的编程习惯

currentFile = 'myfile1.mat';
save(currentFile);

可替换为

numFiles = 3;
for n = 1:numFiles
    randomData = rand(n);
    currentFile = sprintf('myfile%d.mat',n);
    save(currentFile,'randomData')
end

3、函数名称作为变量

%creat function handle with @
plotFcn = {@plot @bar};
n = input('Select an example (1 for plot,2 for bar): ');
plotFcn{n}(1:10)


%use feval function
plotFuc = input('Specify a plotting function: ','s');
data = input('Enter data to plot: ');
feval(plotFuc,data)


%% field Names in Variables
myData.height = [67, 72, 58];
myData.weight = [140, 205, 90];


fieldName = input('Select data (height or weight): ','s');
dataToUse = myData.(fieldName)

% access fieldName: structName.(dynamicExpression)


  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
eval函数在MATLAB中是一个非常有用的函数。它可以被理解为直接在MATLAB命令行中运行括号里的MATLAB语句。通过eval函数,我们可以动态地执行字符串形式的MATLAB代码。 eval函数的基本语法是eval(expression),其中expression是一个字符串,它包含了要执行的MATLAB语句。eval函数可以返回一个或多个输出结果,输出结果可以通过赋值给变量来获取。 下面我给出一个简单的代码实例来帮助你理解eval函数的使用: ```matlab x = 5; expression = 'x^2 + 3*x - 2'; result = eval(expression); disp(result); ``` 在这个代码中,我们定义了一个变量x,并给它赋值为5。然后我们定义了一个字符串expression,它表示一个MATLAB表达式x^2 + 3*x - 2。通过eval函数,我们可以动态地计算这个表达式的值,并将结果赋给变量result。最后,我们使用disp函数打印出结果result。运行这段代码,你会得到结果28。 除了单独使用eval函数,它还可以与for循环结合使用,实现批量处理。例如,我们可以使用for循环来遍历一个数组,并通过eval函数对每个元素进行相同的操作。这样可以减少代码的冗余,并提高效率。 总结起来,eval函数在MATLAB中是一个非常有用的函数,它可以让我们动态地执行字符串形式的MATLAB代码,并返回结果。无论是在简单的计算中还是批量处理中,eval函数都能发挥重要的作用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MATLAB函数使用方法:eval](https://blog.csdn.net/qq_46027675/article/details/127267088)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [matlab eval 函数的使用](https://blog.csdn.net/D_O2021/article/details/127609321)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值