如何为句柄函数中的变量赋值?
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
给定 F
和 x
中的一组索引以替换给定值。
你基本上要求做的是 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
这是简化的,但以下面的 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
给定 F
和 x
中的一组索引以替换给定值。
你基本上要求做的是 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