MATLAB函数返回梯度
我试图创建一个函数,它有两个输出参数: 1.计算F(X)值 2.梯度MATLAB函数返回梯度
但它递归调用本身所有的时间。 我在做什么错?
function [y, gra] = f1(x)
y = x^2
syms z
gra = gradient(f1(z))
谢谢。
编辑: 现在我有这样的:
function [y, gra] = f1(x)
y = x^2
if nargout == 2
syms x
gra = gradient(f1(x))
end
编辑2:
我想使用的功能如下所示:
[y, grad] = f1(5);
y_derived = grad(10);
我想这是你想要做什么:
function [y, gra] = f1(x)
[email protected](x) x^2;
y=f(x); %// calculate y
syms z %// initialise symbolic variable
gra=gradient(f(z),z); %// symbolic differentiation
这将返回g
作为一个象征性的功能。要计算一个值,您可以使用subs(gra,z,123)
,或者,如果要多次评估它,请执行gradFunc=matlabFunction(gra)
,然后gradFunc(v)
,其中v
是要评估的点的向量或矩阵。
是的。这是有道理的。这是另一个经典案例,提供答案的人比OP更熟悉OP的要求和想要的内容。 – rayryeng 2014-11-23 23:10:52
这是因为争论进入gradient
是你的函数名称f1(z)
。因此,当您的原始函数也被称为f1
时,它会一直呼叫f1
,所以函数会一直调用自己,直到达到递归限制。
我想你的意思是把gradient(y)
代替。尝试更换您的通话gradient
使得它这样做的:
gra = gradient(y);
感谢您的快速回复!但我的问题是,我可以创建一个函数,该函数返回的梯度也作为一个函数,并且尚未评估? – vardump 2014-11-23 20:26:40
@vardump - 在我这样做之前,我需要更多关于'f1'如何工作的细节。 “x”究竟是什么?我没有看到任何功能评估。你也应该提供'f'吗? – rayryeng 2014-11-23 20:28:28
对于'f1',我有两个用例:1.调用'y = f1(5)'2.调用'[grad,grad] = y(0)',以获得梯度函数。后来我想打电话给'grad(123)'。查看编辑 – vardump 2014-11-23 20:36:14
你是如何使用这个功能?你能向我们展示一个如何运行它的例子吗? – David 2014-11-23 21:32:40
是的,看编辑2 – vardump 2014-11-23 21:41:53