'function_handle' 类型的操作数不支持一元运算符 '.''。 出错 gradient>parse_inputs (line 139) f = f.'; 出错 gradient (line 48) [f,ndim,loc,rflag] = parse_inputs(f,varargin); 出错 ceshi1 (line 14) grad = gradient(@(x) circuit(x), x0);
时间: 2023-06-18 21:05:38 浏览: 614
这个错误是因为你在对一个函数句柄进行一元运算符"."操作,但是函数句柄不支持这种操作。具体来说,在你的代码中,当你执行`grad = gradient(@(x) circuit(x), x0)`时,`@(x) circuit(x)`是一个函数句柄,而在`gradient`函数内部,它试图使用`.'`运算符对这个函数句柄进行转置操作,导致了错误。
要解决这个错误,你需要修改代码,使其不再对函数句柄进行转置操作。具体来说,你可以将`@(x) circuit(x)`替换为一个匿名函数,这个匿名函数返回`circuit(x)`的转置,如下所示:
```
grad = gradient(@(x) circuit(x).', x0);
```
这样就可以避免对函数句柄进行转置操作,从而解决这个错误。
相关问题
function_handle 类型的操作数不支持一元运算符
是的,Matlab中确实不支持一元运算符用于函数句柄类型的操作数,因为一元运算符需要操作数是数值类型的变量或数组,而函数句柄类型的操作数并不是数值类型的变量或数组,而是一个指向函数的句柄。如果您需要对函数句柄类型的操作数进行一元运算,可以使用函数句柄中嵌套一个匿名函数的方法来实现。您可以在匿名函数中对函数句柄类型的操作数进行处理,然后再将处理后的结果返回给函数句柄。例如:
```
% 定义一个函数句柄
f = @sin;
% 嵌套一个匿名函数
g = @(x) -f(x);
% 对函数句柄类型的操作数进行一元运算
y = g(pi/2); % 返回结果为 -1
```
在上面的例子中,我们定义了一个函数句柄 `f`,然后通过嵌套一个匿名函数 `g` 来对函数句柄类型的操作数进行一元运算。在匿名函数 `g` 中,我们对输入的参数 `x` 先进行 `sin` 函数运算,然后再将结果取负数,最终将处理后的结果返回给函数句柄 `g`。
matlab中'function_handle' 类型的操作数不支持一元运算符
是的,Matlab中确实不支持一元运算符用于函数句柄类型的操作数,因为一元运算符需要操作数是数值类型的变量或数组,而函数句柄类型的操作数并不是数值类型的变量或数组,而是一个指向函数的句柄。如果您需要对函数句柄类型的操作数进行一元运算,可以使用函数句柄中嵌套一个匿名函数的方法来实现。您可以在匿名函数中对函数句柄类型的操作数进行处理,然后再将处理后的结果返回给函数句柄。例如:
```
% 定义一个函数句柄
f = @sin;
% 嵌套一个匿名函数
g = @(x) -f(x);
% 对函数句柄类型的操作数进行一元运算
y = g(pi/2); % 返回结果为 -1
```
在上面的例子中,我们定义了一个函数句柄 `f`,然后通过嵌套一个匿名函数 `g` 来对函数句柄类型的操作数进行一元运算。在匿名函数 `g` 中,我们对输入的参数 `x` 先进行 `sin` 函数运算,然后再将结果取负数,最终将处理后的结果返回给函数句柄 `g`。