这是简化的,但以下面的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
给定G
和F
中的一组索引来替换给定值。
答案 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