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

How to assign values to variables in a handle function?

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

F = @(x)[x(1)-x(2);x(2)-x(3)]

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

G = @(x)[x(1)-x(2);x(2)-1]

并且可以获得其他变量的解。我使用 fsolve 并且它对我的方程组非常有效。当然,我需要做的事情可以使用 Symbolic Toolbox 来完成,但是在一个大的 for 循环中调用它会使我的代码使用起来太慢。

我正在尝试编写一些代码,可以 return G 给定 Fx 中的一组索引以替换给定值。

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

解决方案与 this answer, but instead of using the functional form for subscripted reference we'll need to use the functional form for subscripted assignment: 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