如何为句柄函数中的变量赋值?

时间:2017-11-27 16:54:52

标签: matlab function variable-assignment function-handle

这是简化的,但以下面的MATLAB函数句柄为例:

class AuthDBView

系统当然有很多解决方案。在替换至少一个变量后,是否有可能获得像这样的函数的解?例如,用F = @(x)[x(1)-x(2);x(2)-x(3)] 替换该函数将变为:

x(3)=1

可以获得其他变量的解决方案。我使用G = @(x)[x(1)-x(2);x(2)-1] ,它对我的​​方程组很有效。当然,我需要做的就是使用符号工具箱完成,但是在一个大的for循环中调用它会使它对我的代码使用太慢。

我尝试提出一些代码,这些代码可以返回fsolve给定GF中的一组索引来替换给定值。

1 个答案:

答案 0 :(得分:0)

您基本上要求做的是G调用F,根据逻辑替换索引x重新分配index中的值和一组替换值values,这是可行的但是凌乱,因为anonymous functions只能有一个可执行语句。

解决方案与this answer中的解决方案类似,但不是使用函数形式进行下标引用,我们需要使用函数形式进行下标分配:subsasgn。这就是它的样子:

F = @(x)[x(1)-x(2); x(2)-x(3)];
values = [3 2 1];
index = logical([0 0 1]);
G = @(x) F(subsasgn(x, struct('type', '()', 'subs', {{index}}), values(index)));

这是一个测试:

>> F([3 2 3])

ans =

     1
    -1

>> F([3 2 1])  % Replace the last element by 1

ans =

     1
     1

>> G([3 2 3])  % G handles replacing the last element by 1

ans =

     1
     1