是否有可能将function_handle的衍生物作为另一个function_handle?
喜欢:
fun1 = @(x) x^2;
% do that ...
disp(fun2);
@(x) x*2
Run Code Online (Sandbox Code Playgroud)
我知道如何找到符号函数的导数但我无法将function_handle转换为符号函数.
我是matlab的新手,我找不到任何办法.提前致谢.
使用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
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
有可能用不使用异常的东西替换下面的代码吗?手柄x是提供的手柄.我想在使用之前测试它的有效性(使用实际代码来支持句柄).
x = @notreallyafunction;
try
x();
catch
disp('Sorry function does not exist.');
end
Run Code Online (Sandbox Code Playgroud) 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 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吗?
为什么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可选变量的函数中强加语法检查,这个工件迫使我要么改变我的函数的外观,要么不检查输出的数量。
是否有可能检索包含函数句柄所代表的函数的文件的绝对路径?例如:
%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中是否有相同的功能?它似乎通过简单的功能,但我不能解决它.我知道func2str和which功能,但在那种情况下不起作用.
MATLAB存储变量以及匿名函数.以下是文档中如何工作的示例.
表达式中的变量:
函数句柄不仅可以存储表达式,还可以存储表达式需要用于评估的变量.
例如,为需要系数a,b和c的匿名函数创建函数句柄.
Run Code Online (Sandbox Code Playgroud)a = 1.3; b = .2; c = 30; parabola = @(x) a*x.^2 + b*x + c;因为a,b和c在您创建抛物线时可用,所以函数句柄包含这些值.即使清除变量,值仍会保留在函数句柄中:
Run Code Online (Sandbox Code Playgroud)clear a b c x = 1; y = parabola(x) y = 31.5000
据推测,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中做这样的事情:
>> 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)
有办法吗?
function-handle ×10
matlab ×10
cell-array ×1
derivative ×1
function ×1
handle ×1
octave ×1
output ×1