标签: function-handle

在MATLAB中获得function_handle的派生

是否有可能将function_handle的衍生物作为另一个function_handle

喜欢:

  fun1 = @(x) x^2;
  % do that ...
  disp(fun2);
    @(x) x*2
Run Code Online (Sandbox Code Playgroud)

我知道如何找到符号函数的导数但我无法将function_handle转换为符号函数.

我是matlab的新手,我找不到任何办法.提前致谢.

matlab derivative function-handle

6
推荐指数
1
解决办法
2万
查看次数

如何使用可变数量的输出参数编写匿名函数?

使用deal我们可以编写具有多个输出参数的匿名函数,例如

minmax = @(x)deal(min(x),max(x));
[u,v] = minmax([1,2,3,4]); % outputs u = 1, v = 4
Run Code Online (Sandbox Code Playgroud)

但是如果你想为优化函数提供一个具有渐变的函数,那么fminunc这不起作用.该函数fminunc有时会调用输入函数,有时会调用两个输出参数. (编辑:这不是真的,你只需要指定你是否真的想要使用渐变,使用例如optimset('SpecifyObjectiveGradient',true).然后在一次调用中它总是要求相同数量的参数.)

我们必须提供类似的东西

function [f,g] = myFun(x)
 f = x^2; % function
 g = 2*x; % gradient
Run Code Online (Sandbox Code Playgroud)

可以使用一个两个输出参数调用.

那么有没有办法在不使用function关键字的情况下进行同样的内联?

matlab anonymous-function variadic-functions function-handle output

6
推荐指数
2
解决办法
185
查看次数

使用cellfun替换条件元素

vec = randi(10,10,1)
vec(vec < 5) = 0

func = @(x) x(x < 5) = 0    % This isn't valid
Run Code Online (Sandbox Code Playgroud)

我该如何将第二行代码转换为可以与之结合使用的函数句柄cellfun

matlab anonymous-function function-handle cell-array elementwise-operations

6
推荐指数
1
解决办法
112
查看次数

是否可以在没有try块的情况下测试函数句柄?

有可能用不使用异常的东西替换下面的代码吗?手柄x是提供的手柄.我想在使用之前测试它的有效性(使用实际代码来支持句柄).

x = @notreallyafunction;
try
   x();
catch 
   disp('Sorry function does not exist.');
end
Run Code Online (Sandbox Code Playgroud)

matlab function handle function-handle

5
推荐指数
1
解决办法
334
查看次数

Octave中的函数句柄格式

Octave中的函数句柄定义如下.

f = @sin;
Run Code Online (Sandbox Code Playgroud)

从现在开始,调用函数f(x)与调用具有相同的效果sin(x).到现在为止还挺好.我的问题从下面的一个编程任务开始.

function sim = gaussianKernel(x1, x2, sigma)
Run Code Online (Sandbox Code Playgroud)

上面的行代表函数的标题gaussianKernel.这需要三个变量作为输入.但是,下面的调用让我心烦意乱,因为它只传递了两个变量,然后传递了三个变量gaussianKernel.

model = svmTrain(X, y, C, @(x1, x2) gaussianKernel(x1, x2, sigma));
Run Code Online (Sandbox Code Playgroud)

不应该那么简单model = svmTrain(X, y, C, @gaussianKernel(x1, x2, sigma));吗?有什么不同?

matlab octave function-handle

4
推荐指数
1
解决办法
291
查看次数

为什么在函数句柄中未显示预定义变量及其值?

在 MATLAB R2020b 中,我有以下代码:

f=@(x) x.^2;
y=2;
g=@(x) f(x).*y
Run Code Online (Sandbox Code Playgroud)

输出是

g = function_handle with value: @(x)f(x).*y
Run Code Online (Sandbox Code Playgroud)

但是y = 2,所以我希望输出是@(x)f.*2. 这是它应该如何工作还是错误?我可以将它显示为f.*2而不是f.*y吗?

matlab function-handle

4
推荐指数
1
解决办法
55
查看次数

为什么nargout返回-1?在这种情况下如何获得正确的函数输出数量?

为什么nargout在这种情况下返回-1?

function test

fun=@(a)helper_fun(a,2);

[x,y]=fun(1);
x,  % 1
y,  % 2
nargout(fun),   % -1

end

function [c,d] = helper_fun(a,b)

c=a;
d=b;

end
Run Code Online (Sandbox Code Playgroud)

是否有其他方法可以提取 的正确数量的输出变量fun

我希望在一个作为function_handle可选变量的函数中强加语法检查,这个工件迫使我要么改变我的函数的外观,要么不检查输出的数量。

matlab function-handle

4
推荐指数
1
解决办法
282
查看次数

从函数句柄获取绝对文件路径

是否有可能检索包含函数句柄所代表的函数的文件的绝对路径?例如:

%child folder containing test_fun.m file
handle = @test_fun
cd ..

%root folder - test_fun not available
path = GETPATHFROMHANDLE(handle)
Run Code Online (Sandbox Code Playgroud)

GETPATHFROMHANDLE在MATLAB中是否有相同的功能?它似乎通过简单的功能,但我不能解决它.我知道func2strwhich功能,但在那种情况下不起作用.

matlab function-handle

3
推荐指数
1
解决办法
351
查看次数

在MATLAB匿名函数中强制评估变量

MATLAB存储变量以及匿名函数.以下是文档中如何工作的示例.

表达式中的变量:

函数句柄不仅可以存储表达式,还可以存储表达式需要用于评估的变量.

例如,为需要系数a,b和c的匿名函数创建函数句柄.

a = 1.3;
b = .2;
c = 30;
parabola = @(x) a*x.^2 + b*x + c;
Run Code Online (Sandbox Code Playgroud)

因为a,b和c在您创建抛物线时可用,所以函数句柄包含这些值.即使清除变量,值仍会保留在函数句柄中:

clear a b c
x = 1;
y = parabola(x)
y =
   31.5000
Run Code Online (Sandbox Code Playgroud)

据推测,ab和c的值即使在保存并从mat文件重新加载时也与函数一起存储.在实践中,我发现这些值不会持久存在,尤其是在编辑最初创建函数的代码时.

有没有办法根据变量的数值定义函数句柄?我想要一些形式

>> a = 1.3;
>> b = .2;
>> c = 30;
>> parabola = @(x) a*x.^2 + b*x + c

parabola = @(x) a*x.^2+b*x+c

>> parabola2 = forceEval(parabola)

parabola2 = @(x) 1.3*x.^2+.2x+30
Run Code Online (Sandbox Code Playgroud)

编辑:也许我的问题是与文件关联,但当我编辑我最初定义匿名函数的文件时,我得到一个错误,看起来像:

无法在C:中找到函数@(ydata)nr /(na*dt)*normpdf(ydata,mu(j),s(j))./ normpdf(ydata,mu_a(j),s_a(j)). ..\mfilename.m.(我将mfile的名称更改为mfilename)

我对这类东西的通常解决方案是使用func2str()来删除文件依赖项,但这也会删除包含参数值的工作空间信息.所以我想强制所有参数在函数定义中采用它们的数值.

matlab anonymous-function function-handle

3
推荐指数
1
解决办法
598
查看次数

创建一个匿名函数并在MATLAB中调用它在一行中传递参数

你可以在matlab中做这样的事情:

>> fh = @(x) x^2
fh = 
   @(x)x^2
Run Code Online (Sandbox Code Playgroud)

然后

>> fh(3)
ans =
    9
Run Code Online (Sandbox Code Playgroud)

现在我寻找一种方法来创建匿名函数并在一行中调用它,就像这样(它不起作用):

@(x) x^2 (3) <-- This code does not work!
Run Code Online (Sandbox Code Playgroud)

有办法吗?

matlab function-handle

2
推荐指数
2
解决办法
93
查看次数