assignin与evalin用法理解

本文详细解析了MATLAB中evalin函数的使用限制与特性,包括其无法递归计算表达式、在不同工作区上下文中的行为,以及如何在调试器中正确使用该函数。了解这些内容对于有效利用MATLAB进行科学计算至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

 

 

局限性

evalin 不可递归用于计算表达式。例如,形式为 evalin('caller', 'evalin(''caller'', ''x'')') 的序列无效。

提示

MATLAB 基础工作区是从 MATLAB 命令行看到的工作区(不在调试器中时)。调用方工作区是调用当前运行函数的函数工作区。请注意,基础工作区(base)和调用方工作区(caller)在从 MATLAB 命令行调用的函数上下文中是等效的。

evalin('caller', expression) 只计算调用方工作区中的变量,它不计算调用方中的函数。因此,不能使用 evalin 构造调用方中定义的函数句柄。

在用 dbup 或 dbdown 更改本地工作区上下文后,如果在 MATLAB 调试器中使用 evalin('caller', expression),则 MATLAB 在从当前工作区上下文堆栈中高一级的函数上下文中计算表达式。

 

参考https://ww2.mathworks.cn/help/matlab/ref/evalin.html

参考https://zhidao.baidu.com/question/580592059.html

多看帮助文档

``` function test_default_value() % 初始化优化参数 initiallengths = [0.0, 0.5]; % 初始连杆长度[mm] lb = [-3.0, -1.0]; % 下限 ub = [3.0, 1.0]; % 上限 % 配置优化选项 options = optimoptions('fmincon',... 'Display','iter',... 'Algorithm','sqp',... 'MaxFunctionEvaluations',10); % 执行优化 [optLength, fval] = fmincon(@simulationObjective,... initiallengths,[],[],[],[],lb,ub,[],options); fprintf('最优连杆长度: L1=%.4fm, L2=%.4fm\n总摩擦功:%g J\n',... optLength(1),optLength(2),fval); end function totalEnergy = simulationObjective(lengths) % 更新ADAMS模型参数 % updateAdamsModel(lengths); Controls_Plant_3; cmd1 = sprintf('variable modify variable_name = .Model_1_demo.L1 real_value = %f!', lengths(1)); cmd2 = sprintf('variable modify variable_name = .Model_1_demo.L2 real_value = %f!', lengths(2)); assignin('base', 'ADAMS_init', [cmd1 cmd2]); fprintf('当前尝试参数: L1=%.4f, L2=%.4f\n', lengths(1), lengths(2)); % 执行联合仿真 sim('adams_sys_'); % 提取仿真结果 %energy_cost = evalin("base", max(energy_loss)); %assignin("base", "energy_cost", max(energy_loss)); %Energy1 = trapz(ADAMS_tout(:,1), ADAMS_yout(:,1)); %Energy2 = trapz(ADAMS_tout(:,1), ADAMS_yout(:,2)); %totalEnergy = (Energy1 + Energy2)*10000000; %totalEnergy = energy_cost; %fprintf('当前摩擦功: %g\n', totalEnergy); totalEnergy = max(energy_loss(:,1)); fprintf('a=%g\n',totalEnergy); end```其中totalEnergy函数中lengths值可以赋予初始值“initiallengths”,但后续却不会随fmincon的运行改变lengths的值,查原因
03-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值