当表格具有OptimizationVariable列

时间:2019-06-20 14:44:04

标签: matlab optimization inner-join

当其中一个表包含一列OptimizationVariable对象时,我使用innerjoin遇到错误:

% A normal table
tLeft = table([1;2],[3;4],'VariableNames',{'v1' 'v2'})

% A table with a column of `optimvar` objects
tRight = table( [1;2] , optimvar('myvar',2,1) , ...
                'VariableNames',{'v1' 'ov2'})

% `join` works
tJoin = join(tLeft,tRight,'Key','v1')
showexpr(tJoin.ov2)
   % myvar(1)
   % myvar(2)

% `innerjoin` yields error assigning to optimvar object
tJoin = innerjoin(tLeft,tRight)

% Work-around
tJoin = innerjoin(tLeft,tRight,'RightVar',{})
tJoin = join( tJoin , tRight , 'RightVar','ov2' )
showexpr(tJoin.ov2)
   % myvar(1)
   % myvar(2)

innerjoin后面的表包含OptimizationVariable列是否存在根本的概念上的缺陷,或者这仅仅是Matlab新的高级优化工作流程中的痛处?

1 个答案:

答案 0 :(得分:1)

OptimizationVariable不能使用,但是OptimizationExpression可以使用。这提供了另一种解决方法:使用表达式而不是变量创建tRight

tRight = table( [1;2] , 1*optimvar('myvar',2,1) , ...
                'VariableNames',{'v1' 'ov2'})